1 / 51

Structures des donné es

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

shaw
Download Presentation

Structures des donné es

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Structures des données

  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.

  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. On définit un modèle de structure struct personne { char nom[20]; char prenom[20]; int no_employe; };

  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. On réserve deux emplacements p1 et p2 du type personne. struct personne p1,p2; p1 p2

  5. Structures des données DÉCLARATION D'UNE STRUCTURE • Deuxième méthode On déclare des variables de type structure sans utiliser un modèle de structure. struct { char nom[20]; char prenom[20]; int no_employe; } p1,p2;

  6. Structures des données DÉCLARATION D'UNE STRUCTURE • Troisième méthode On peut combiner déclaration du modèle de structure et déclaration de variables. struct personne { char nom[20]; char prenom[20]; int no_employe; } p1,p2; . . . struct personne pers1,pers2,pers3;

  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. 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. 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. Structures des données UTILISATION D'UNE STRUCTURE • Utilisation des champs d'une structure • Utilisation globale d'une structure Le champ peut être manipulé comme n'importe quelle variable 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; L'affectation globale n'est pas possible entre tableaux.

  11. Structures des données INITIALISATION D'UNE STRUCTURE • Lors de sa déclaration. • Lors d’exécution du programme. En utilisant constantes ou des expressions constantes 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);

  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. 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 lenom p.naissance.moisdésigne lemois

  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. 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 <stdio.h> 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. Structures des données Exemple Les déclarations des fonctions 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; } Nom? Lili Numero? 123 Jour? 9 Mois? 8 Annee? 1978 Nom: Lili Numero: 123 Date de naissance: 9/8/1978

  17. Structures des données Exemple La définition de la fonction d’affichage 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 ); }

  18. Structures des données Exemple La définition de la fonction de saisie date 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; }

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

  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.50 dans fct : 0 1.00 au retour dans main : 1 12.50

  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 <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.50 dans fct : 0 1.00 au retour dans main : 0 1.00

  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. Structures des données TABLEAUX DE STRUCTURES - modèle 1 nom note . . Tableau des pointeurs Tableau des structures

  24. Structures des données TABLEAUX DE STRUCTURES - modèle 1 • Exemple Le modèle de la structure #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;

  25. Structures des données TABLEAUX DE STRUCTURES - modèle 1 • Exemple Les prototypes des fonctions etud in(); 2/5 int 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:3 nom:Lili note:3.50 nom:Ivan note:5.50 nom:Ana note:4.00 Lili 3.50 Ivan 5.50 Ana 4.00 Apres le tri Ivan 5.50 Ana 4.00 Lili 3.50

  26. Structures des données TABLEAUX DE STRUCTURES - modèle 1 • Exemple La définition de la fonction de saisie étudiant etud in() 3/5 { etud t; printf("nom:"); gets(t.nom); printf("note:"); scanf("%f",&t.note); fflush(stdin); return t; }

  27. Structures des données TABLEAUX DE STRUCTURES - modèle 1 • Exemple La définition de la fonction d’entré 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’affichage

  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

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

  30. Structures des données TABLEAUX DE STRUCTURES - modèle 2 • Exemple – avec deux structures embriquées Les prototypes des fonctions 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); } entrer nombre de structures:3 nom:Lili note:3.50 nom:Ivan note:5.50 nom:Ana note:4.00 Lili 3.50 Ivan 5.50 Ana 4.00 Apres le tri Ivan 5.50 Ana 4.00 Lili 3.50

  31. 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é

  32. 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 d’affichage La définition de la fonction de tri

More Related