La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

1 1 Structures des données

2 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 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.

3 3 Structures des données DÉ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

4 4 Structures des données DÉ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. nomprenomno_employenomprenom no_employe 20 octets 2 octets20 octets 20 octets 2 octets 84 octets p1 p2

5 5 Structures des données DÉ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.

6 6 Structures des données DÉ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.

7 7 Structures des données DÉ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

8 8 Structures des données DÉ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.

9 9 Structures des données Accè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_employe p2.nom p3 -> no_employe ou bien(*p3).no_employe p4[0].no_employe

10 10 Structures des données UTILISATION 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.

11 11 Structures des données INITIALISATION 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

12 12 Structures des données IMBRICATION 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.

13 13 Structures des données IMBRICATION 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 nom p.naissance.mois désigne le mois

14 14 Structures des données TABLEAUX 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

15 15 Structures des données Exemple  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 1/5 struct 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

16 16 Structures des données Exemple void afficher( struct personne ); 2/5 struct 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? Lili Numero? 123 Jour? 9 Mois? 8 Annee? 1978 Affichage de la personne Nom: Lili Numero: 123 Date de naissance: 9/8/1978

17 17 Structures des données Exemple void afficher( struct personne f ) { 3/5 printf("Affichage de la personne"); 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

18 18 Structures des données Exemple struct s_date SaisirDate( void ) { 4/5 struct s_date date; printf("Jour ? "); scanf("%d", &date.jour); printf("Mois ? "); scanf("%d", &date.mois); printf("Annee ? "); scanf("%d", &date.an); return date; } La définition de la fonction de saisie date

19 19 Structures des données Exemple void SaisirPersonne( struct personne *f ) { 5/5 printf("Nom ? "); gets( f->nom ); printf("Numero ? "); scanf("%d", &f->numero); f->naissance = SaisirDate(); } La définition de la fonction de saisie personne

20 20 Structures des données TRANSMISSION D'UNE STRUCTURE EN ARGUMENT D'UNE FONCTION  Transmission de la valeur d'une structure #include 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.50 dans fct : 0 1.00 au retour dans main : 1 12.50

21 21 Structures des données TRANSMISSION D'UNE STRUCTURE EN ARGUMENT D'UNE FONCTION  Transmission de l'adresse d'une structure: l'opérateur -> #include 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.50 dans fct : 0 1.00 au retour dans main : 0 1.00

22 22 Structures des données TABLEAUX 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.

23 23 TABLEAUX DE STRUCTURES - modèle 1 nom note pointeur nom note nom note... nom note El. 1 El. 2 El. n Structures des données

24 24 Structures des données TABLEAUX DE STRUCTURES - modèle 1  Exemple #include #define MAX 20 struct etud { char nom[81]; float note; }; typedef struct etud STUD; int enter(STUD *ps); int print(STUD s); void sort(STUD *s,int n); Le modèle de la structure Les prototypes des fonctions

25 25 Structures des données TABLEAUX DE STRUCTURES - modèle 1 int main() {STUD fac[MAX]; int n, res, i, flag; do { printf("nombre: "); scanf("%d", &n); } while(n MAX); printf ("\nEntrer les etudiants\n"); for (i=0, flag = 1; i<n && flag == 1; i++) { res = enter(&fac[i]); if(res == 0) flag = 0; } if(flag == 0) n = i;

26 26 Structures des données TABLEAUX DE STRUCTURES - modèle 1 printf("\nListe des etudiants\n"); printf("nom \t\t\t note\n"); for (i=0; i<n; i++) if(print (fac[i]) == 0) printf("problem d'affichage!\n"); sort(fac,n); printf("\nListe des etudiants apres le tri\n"); printf("nom \t\t\t note\n"); for (i=0; i<n; i++) if(print (fac[i]) == 0) printf("problem d'affichage!\n"); }

27 27 Structures des données TABLEAUX DE STRUCTURES - modèle 1 int enter(STUD *ps) {int res; if(ps == NULL) return 0; fflush(stdin); printf("\nnom: "); if(gets(ps->nom) == NULL) return 0; // CTRL/Z if(ps->nom[0] == '\0')//la chaine vide est entre strcpy(ps->nom, "?"); if(strlen(ps->nom) > 80) ps->nom[80] = '\0'; do { fflush(stdin); printf("\nnote: "); res = scanf("%f", &(ps->note)); if (res == EOF) return 0; } while( res==0 || ps->note note > 6.0); return 1; } res: 0 (erreur en entrant les donnees) res:1 (entre les donnees sans erreur)

28 28 Structures des données TABLEAUX DE STRUCTURES - modèle 1 int print(STUD s) {int res; res = printf("%-20s\t%4.2f\n", s.nom,s.note); if(res < 0) return 0; else return 1; }

29 29 Structures des données TABLEAUX DE STRUCTURES - modèle 1 void sort(STUD*s,int n) {STUD 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; } } }

30 30 Structures des données TABLEAUX DE STRUCTURES - modèle 1

31 31 Structures des données TABLEAUX DE STRUCTURES - modèle 1

32 32 Structures des données TABLEAUX DE STRUCTURES - modèle 2  Exemple – avec deux structures embriquées #include 1/4 #include #define MAX 20 typedef struct { char nom[80]; float note; }etud; struct tab { etud tbl[MAX]; int size; }; Les modèles des structures

33 33 Structures des données TABLEAUX DE STRUCTURES - modèle 2  Exemple – avec deux structures embriquées void entrer(struct tab *s); 2/4 void 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:3 nom:Lili note:3.50 nom:Ivan note:5.50 nom:Ana note:4.00 Lili3.50 Ivan5.50 Ana4.00 Apres le tri Ivan5.50 Ana4.00 Lili3.50

34 34 Structures des données TABLEAUX 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é

35 35 Structures des données TABLEAUX 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


Télécharger ppt "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."

Présentations similaires


Annonces Google