1 structures des données. 2 le tableau permettait de désigner sous un seul nom un ensemble de...

51
1 Structures des données

Upload: rochelle-gonzales

Post on 04-Apr-2015

114 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

1

Structures des données

Page 2: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

2

Structures des données

Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée par un indice.

La structure va nous permettre de désigner sous un seul nom un ensemble de valeurs pouvant être de types différents.

L'accès à chaque élément de la structure (nommé champ) se fera non plus par une indication de position, mais par son nom au sein de la structure.

Page 3: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

3

Structures des donnéesDÉCLARATION D'UNE STRUCTURE

Première méthode

Ce modèle s'appelle ici personne et il précise le nom et le type de chacun des "champs" constituant la structure.

Le modèle de structure ne réserve pas de variables correspondant à cette structure.

struct personne { char nom[20];

char prenom[20]; int no_employe; };

On définit un modèle de structure

Page 4: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

4

Structures des donnéesDÉCLARATION D'UNE STRUCTURE

Première méthode Une fois un tel modèle défini, on peut déclarer des "variables" du type correspondant.

struct personne p1,p2;On réserve deux emplacements p1 et p2 du type personne.

nom prenom no_employe nom prenom no_employe

20 octets

20 octets 2 octets 20 octets

20 octets 2 octets

84 octets

p1 p2

Page 5: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

5

Structures des donnéesDÉCLARATION D'UNE STRUCTURE

Deuxième méthode

struct { char nom[20];

char prenom[20]; int no_employe;

} p1,p2;

On déclare des variables de type structure sans utiliser un modèle de structure.

Page 6: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

6

Structures des donnéesDÉCLARATION D'UNE STRUCTURE

Troisième méthode

struct personne { char nom[20];

char prenom[20]; int no_employe;

} p1,p2;. . .struct personne pers1,pers2,pers3;

On peut combiner déclaration du modèle de structure et déclaration de variables.

Page 7: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

7

Structures des donnéesDÉCLARATION D'UNE STRUCTURE

Quatrième méthode – avec TYPEDEF

struct personne { char nom[20];

char prenom[20]; int no_employe;

};. . .typedef struct personne PERSONNE;PERSONNE p1,p2;

Variant A

typedef struct { char nom[20];

char prenom[20]; int no_employe;

}personne;personne p1,p2,*p3,p4[5];

Variant B

Page 8: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

8

Structures des donnéesDÉCLARATION D'UNE STRUCTURE

LA PORTÉE DU MODÈLE DE STRUCTURE La "portée" d'un modèle de structure dépend de l'emplacement de sa déclaration:

si elle se situe au sein d'une fonction (y compris, la "fonction main"), elle n'est accessible que depuis cette fonction;

si elle se situe en dehors d'une fonction, elle est accessible de toute la partie du fichier source qui suit sa déclaration; elle peut ainsi être utilisée par plusieurs fonctions;

il est possible de placer un certain nombre de déclarations de modèles de structures dans un fichier séparé que l'on incorpore par #include.

Page 9: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

9

Structures des donnéesAccès aux membres des structures

L'opérateur de sélection de membre qui se note . (point) ou bien -> (flèche).

personne p1,p2,*p3,p4[5];. . .p1.no_employep2.nomp3 -> no_employe ou bien (*p3).no_employep4[0].no_employe

Page 10: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

10

Structures des donnéesUTILISATION D'UNE STRUCTURE

Utilisation des champs d'une structure

Utilisation globale d'une structure

p1.no_employe=12345;printf (“%d", p1.no_employe);scanf(“%d”,& p1.no_employe);p3 -> no_employe=2345;p4[0].no_employe=5678;strcpy(p1.prenom,”Lili”);

personne x,y;x = y;

Le champ peut être manipulé comme n'importe quelle variable

L'affectation globale n'est pas possible entre tableaux.

Page 11: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

11

Structures des donnéesINITIALISATION D'UNE STRUCTURE

Lors de sa déclaration.

Lors d’exécution du programme.

struct personne p = {"Jean", "Dupond", 7845};

struct personne p;printf(“Entrer le nom:”);gets(p.nom);printf(“Entrer le prenom:”);gets(p.prenom);printf(“Entrer le no_employe:”);scanf(“%d”,&p.no_emploe);

En utilisant constantes ou des expressions constantes

Page 12: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

12

Structures des donnéesIMBRICATION DE STRUCTURES

Chacun des champs d'une structure peut être d'un type absolument quelconque: pointeur, tableau, structure,... Champ - tableau

struct personne { char nom[30] ;

char prenom [20] ;double heures [31] ;

} employe ;

employe.heures[4] désigne le cinquième élément du tableau heures de la structure employe.

Page 13: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

13

Structures des donnéesIMBRICATION DE STRUCTURES

Chacun des champs d'une structure peut être d'un type absolument quelconque: pointeur, tableau, structure,... Champ structure

struct s_date { int jour;

int mois; int an;

};struct personne { char nom[20]; int numero;

struct s_date naissance; } p;

p.nom désigne le nomp.naissance.mois désigne le mois

Page 14: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

14

Structures des donnéesTABLEAUX DE SRUCTURES

point est un nom de modèle de structure. courbe représente effectivement un ''objet'' de type "tableau de 50 éléments du type point". courbe[i].nom représente le nom du point de rang i du tableau courbe.

struct point { char nom ;

int x ;int y ;

};struct point courbe[50];

un point d'un plan

représente un ensemble de 50 points du type défini struct point

Page 15: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

15

Structures des donnéesExemple Faire un programme C de: 1) remplir une structure imbriquée personne avec les champs (nom, numéro, date de naissance) en utilisant

la structure date (avec les champs: jour, mois, an); 2) afficher la structure remplie. Utiliser les fonctions: saisir la date; saisir la personne, afficher la personne.

#include <stdio.h> 1/5struct s_date {

int jour;int mois;int an;

};struct personne {

char nom[20];int numero;struct s_date naissance;

};

Les déclarations des modèles des structures

Page 16: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

16

Structures des donnéesExemple

void afficher( struct personne ); 2/5struct s_date SaisirDate( void );void SaisirPersonne( struct personne *f );

/*----------- programme principal -------------*/main() { struct personne p;

SaisirPersonne(&p); afficher(p); return 0;}

Les déclarations des fonctions

Nom? LiliNumero? 123Jour? 9Mois? 8Annee? 1978Nom: LiliNumero: 123Date de naissance: 9/8/1978

Page 17: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

17

Structures des donnéesExemple

void afficher( struct personne f ) { 3/5

printf("Nom : %s\n", f.nom );printf("Numero : %d\n", f.numero);printf("Date de naissance : %d/%d/%d\n",

f.naissance.jour, f.naissance.mois,f.naissance.an );

}

La définition de la fonction d’affichage

Page 18: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

18

Structures des donnéesExemple

struct s_date SaisirDate( void ) { 4/5 struct s_date date; printf("Jour ? "); scanf("%d", &date.jour); fflush(stdin); printf("Mois ? "); scanf("%d", &date.mois); fflush(stdin); printf("Annee ? "); scanf("%d", &date.an); fflush(stdin); return date;

}

La définition de la fonction de saisie date

Page 19: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

19

Structures des donnéesExemple

void SaisirPersonne( struct personne *f ) { 5/5

printf("Nom ? "); gets( f->nom ); printf("Numero ? "); scanf("%d", &f->numero); fflush(stdin); f->naissance = SaisirDate();

}

La définition de la fonction de saisie personne

Page 20: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

20

Structures des données

TRANSMISSION D'UNE STRUCTURE EN ARGUMENT D'UNE FONCTION

Transmission de la valeur d'une structure

#include <stdio.h>struct enreg { int a;

double b; };

void fct (struct enreg y);int main(void){ struct enreg x;

x.a = 1; x.b = 12.5;printf ("\navant appel fct: %d %.2f",x.a,x.b);fct (x);printf ("\n au retour dans main: %d %.2f", x.a, x.b);

}void fct (struct enreg s){ s.a = 0;

s.b=1;printf ("\ndans fct: %d %.2f", s.a, s.b);

}

avant appel fct : 1 12.50dans fct : 0 1.00au retour dans main : 1 12.50

Page 21: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

21

Structures des donnéesTRANSMISSION D'UNE STRUCTURE EN ARGUMENT D'UNE

FONCTION Transmission de l'adresse d'une structure: l'opérateur ->

#include <stdio.h>struct enreg { int a;

float b; };

void fct (struct enreg *);int main(void){ struct enreg x;

x.a = 1; x.b = 12.5;printf ("\navant appel fct: %d %.2f",x.a,x.b);fct (&x);printf ("\n au retour dans main : %d %.2f", x.a, x.b);retunr 0 ;

}void fct (struct enreg * ads){ ads->a = 0;

ads->b = 1;printf ("\ndans fct: %d %.2f", ads->a, ads->b);

}

avant appel fct : 1 12.50dans fct : 0 1.00au retour dans main : 0 1.00

Page 22: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

22

Structures des donnéesTABLEAUX DE STRUCTURES - modèle 1

Exemple - Faire un programme C de création d'un tableau d'éléments – étudiants (nombre maximale 20), de type structuré. Chaque structure est composée des champs suivants: a) nom - chaîne de caractères; b) note - nombre réel. Trier le tableau selon le champ note en ordre décroissant. Afficher le tableau créé et le tableau après le tri.

Page 23: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

23

Structures des donnéesTABLEAUX DE STRUCTURES - modèle 1

.

.

Tableau des pointeurs Tableau des structures

nom note

Page 24: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

24

Structures des données

TABLEAUX DE STRUCTURES - modèle 1 Exemple

#include<stdio.h> 1/5#include<conio.h>#include <string.h>#include <stdlib.h>#define MAX 20

typedef struct { char nom[80];

float note; }etud;

Le modèle de la structure

Page 25: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

25

Structures des données

TABLEAUX DE STRUCTURES - modèle 1 Exemple

etud in(); 2/5int entrer(etud *p[ ], etud s[ ]);void print(etud *s[ ],int n);void sort(etud *s[ ],int n);

void main() { etud *p[MAX], s[MAX];

int n;n=entrer(p,s);print(p,n);sort(p,n);printf("Apres le tri\n");print(p,n);

}

entrer nombre de structures:3nom:Lilinote:3.50nom:Ivannote:5.50nom:Ananote:4.00Lili 3.50Ivan 5.50Ana 4.00Apres le triIvan 5.50Ana 4.00Lili 3.50

Les prototypes des fonctions

Page 26: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

26

Structures des données

TABLEAUX DE STRUCTURES - modèle 1 Exemple

etud in() 3/5 { etud t;

printf("nom:"); gets(t.nom); printf("note:"); scanf("%f",&t.note); fflush(stdin); return t;

}

La définition de la fonction de saisie étudiant

Page 27: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

27

Structures des données

TABLEAUX DE STRUCTURES - modèle 1 Exemple

int entrer(etud *p[ ],etud s[ ]) 4/5 { int n,i;

do { printf("entrer nombre de structures:"); scanf("%d",&n);

}while(n>MAX); fflush(stdin); for(i=0;i<n;i++) { s[i]=in(); p[i]=&s[i]; } return n;

} void print(etud *s[ ],int n) { int i;

for(i=0;i<n;i++)printf("%s\t%6.2f\n",s[i]->nom,s[i]->note);

}

La définition de la fonction d’entré

La définition de la fonction d’affichage

Page 28: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

28

Structures des données

TABLEAUX DE STRUCTURES - modèle 1 Exemple

void sort(etud *s[ ],int n) 5/5 { etud *temp;

int i,j,f=1; while(f!=0)

{ f=0; for(i=0; i<n-1; i++)

if(s[i]->note < s[i+1]->note){ temp=s[i]; s[i]=s[i+1]; s[i+1]=temp; f=1;}

} }

La définition de la fonction de tri

Page 29: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

29

Structures des donnéesTABLEAUX DE STRUCTURES - modèle 2

Exemple – avec deux structures embriquées

#include<stdio.h> 1/4#include<conio.h>#include <string.h>#include <stdlib.h>#define MAX 20

typedef struct { char nom[80];

float note; }etud;struct tab{ etud tbl[MAX];

int size;};

Les modèles des structures

Page 30: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

30

Structures des donnéesTABLEAUX DE STRUCTURES - modèle 2

Exemple – avec deux structures embriquées

void entrer(struct tab *s); 2/4void print(struct tab s);void sort(struct tab *s);

void main() { struct tab s;

entrer(&s);print(s);sort(&s);printf("Apres le tri\n");print(s);

}

Les prototypes des fonctions

entrer nombre de structures:3nom:Lilinote:3.50nom:Ivannote:5.50nom:Ananote:4.00Lili 3.50Ivan 5.50Ana 4.00Apres le triIvan 5.50Ana 4.00Lili 3.50

Page 31: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

31

Structures des donnéesTABLEAUX DE STRUCTURES - modèle 2

Exemple – avec deux structures embriquées

void entrer(struct tab *s) 3/4 { int n,i;

do { printf("entrer nombre de structures:"); scanf("%d",&n);

} while(n>MAX); fflush(stdin); for(i=0;i<n;i++) { printf("nom:");

gets((*s).tbl[i].nom); printf("note:"); scanf("%f",&(*s).tbl[i].note); fflush(stdin);

} (*s).size=n;

}

La définition de la fonction d’entré

Page 32: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

32

Structures des donnéesTABLEAUX DE STRUCTURES - modèle 2

Exemple – avec deux structures embriquées

void print(struct tab s) 4/4 { int i;

for(i=0;i<s.size;i++)printf("%s\t%6.2f\n",s.tbl[i].nom,s.tbl[i].note);

}void sort(struct tab *s) { etud temp;

int i,j,f=1; while(f!=0)

{ f=0; for(i=0; i<(*s).size-1; i++)

if((*s).tbl[i].note < (*s).tbl[i+1].note){ temp=(*s).tbl[i]; (*s).tbl[i]=(*s).tbl[i+1]; (*s).tbl[i+1]=temp; f=1;}

} }

La définition de la fonction de tri

La définition de la fonction d’affichage

Page 33: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

33

Page 34: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

34

Page 35: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

35

Page 36: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

36

Page 37: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

37

Page 38: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

38

Page 39: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

39

Page 40: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

40

Page 41: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

41

Page 42: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

42

Page 43: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

43

Page 44: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

44

Page 45: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

45

Page 46: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

46

Page 47: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

47

Page 48: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

48

Page 49: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

49

Page 50: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

50

Page 51: 1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée

51