Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
B.Shishedjiev - Informatique II
Structures Modèles d'objets réels B.Shishedjiev - Informatique II
2
Qu'est ce que c'est une structure
Un objet complexe dont les parts ne sont du même type Exemple Etudiant Nom Date_naiss Sex Notes Texte Date M ou F Nombres Chaque partie d'objet (champ) peut être d'un type différent et a un nom par lequel il peut être accédé. B.Shishedjiev - Informatique II
3
Déclaration et présentation
Déclaration – on déclare le nom et les noms et les types des champs. Déclaration de l'étiquette d'une structure struct nom_de_structopt{ declare_champ1; declare_champ2; ... ; declare_champn; }; B.Shishedjiev - Informatique II
4
Déclaration et présentation...
Exemples struct etudiant{ int numero; char nom[30]; char sex; int naiss[3]; double notes[5]; };// déclaration de la structure étudiant struct etudiant e1,e2;//e1 et e2 sont variable //de type struct etudiant struct point{ int x; int y; } p1,p2;// déclaration combinée struct point p3,p4; ;//p1,p2,p3,p4sont variable //de type struct point B.Shishedjiev - Informatique II
5
Déclaration et présentation...
On peut omettre le nom du structure mais puis on ne peut pas déclarer nouvelle variable avec la même structure. on peut déclarer de nouveaux étudiants, mais pas de nouvelles variables qui ont la structure déclarée au dessus même que les deux structures ont les mêmes champs ils ne sont pas identiques struct { double r; double im; } c1; struct { double r; double im; } c2; B.Shishedjiev - Informatique II
6
Déclaration et présentation...
Représentation dans la mémoire numero nom sex jour etud naiss mois annee 1 notes 2 3 4 typedef struct {int jour; int mois; int annee;} DATE; struct etudiant{ int numero; char nom[30]; char sex; DATE naiss; double notes[5];} etud; B.Shishedjiev - Informatique II
7
B.Shishedjiev - Informatique II
Initialisation La structure est initialisée de même façon que le tableau (par des expressions constantes) . typedef struct {double x, double y} POINT; struct fiche { int numero; char nom[32], prenom[32]; } u = { 1234, "DURAND", "Pierre" }; POINT p1 ={3.45, 2.56}, p2={0.0,0.0}; B.Shishedjiev - Informatique II
8
B.Shishedjiev - Informatique II
Initialisation Exemple typedef struct {int jour; int mois; int annee} DATE; typedef struct { int numero; char nom[30]; char sex; DATE naiss; double notes[5];} ETUDIANT; ETUDIANT e1 = {245, "Dubois", 'M',{12,2,1988}, {12,10,8,14,6}}; B.Shishedjiev - Informatique II
9
B.Shishedjiev - Informatique II
Affectation On peut affecter la valeur d'une structure à une variable du même type. C'est équivalent à l'affectation des champs correspondants. typedef struct etudiant{ int numero; char nom[30]; char sex; DATE naiss; double notes[5];} ETUDIANT ; ETUDIANT e1 = {245, "Dubois", 'M',{12,2,1988}, {12,10,8,14,6}}, e2; ... e2 = e1; B.Shishedjiev - Informatique II
10
B.Shishedjiev - Informatique II
Accès aux champs L'opérateur accès au champ '.' Exemples nom_de_varaible_structure.nom_du-champ e1.numero = 1234; e2.naiss.jour = 3; e2.naiss.mois = 4; e2.naiss.annee = 1983; e2.notes[0] = 14; B.Shishedjiev - Informatique II
11
Pointeurs vers structures
Déclaration Exemples Accès aux champs des structures designées type_structure *nom ETUDIANT *p1; struct point {int x, int y} pt1,pt2, *p4; p1 = &e1; p4 = &pt2; nom_de_pointeur_vers_structure->nom_du-champ p1->numero = 1234; p1->naiss.jour = 3; p4->x = 3; B.Shishedjiev - Informatique II
12
Pointeurs vers structures
Accès aux champs et adresses des champs Si les déclarations suivants existent Les expressions suivants sont équivalents ETUDIANT *p1,et; struct point {int x, int y} pt1,pt2, *p4; p1 = &e1; p4 = &pt2; et.numero p1->numero (&et)->numero et.naiss.annee p1->naiss.annee (&et)->naiss.annee pt2.x p4->x (&pt2)->x &et.numero &p1->numero &(&et)->numero &pt2.x &p4->x &(&pt2)->x B.Shishedjiev - Informatique II
13
Paramètres de fonctions
La structure ne diffère pas d'autres type comme paramètre Exemple: void affichEtud(ETUDIANT e) { printf ("%6d %-15s %2d/%2d/%4d %5.2lf\n", e.numero,e.nom, e.naiss.jour, e.naiss.mois, e.naiss.annee, e.moyenne); } void affichEtud(ETUDIANT e) { DATE *d = &e.naiss; printf ("%6d %-15s %2d/%2d/%4d %5.2lf\n", e.numero,e.nom, d->jour, d->mois, d->annee, e.moyenne); } B.Shishedjiev - Informatique II
14
B.Shishedjiev - Informatique II
Résultat de fonction Une valeur du type structure peut servir comme résultat d'une fonction. Exemple ETUDIANT lireEtud(void){ ETUDIANT e; int i; printf("Tapez le numero, le nom, et le gendre d'etudiant…"); scanf("%d , %s , %c \n",&e.numero,&e.nom,&e.sex); puts("Tapez la date de naissance…"); scanf(", %2d / %2d / %d \n", &e.naiss.jour, &e.naiss.mois, &e.naiss.annee); printf("Tapez les %d notes d'etudiant \n", MAXNOTES); for (i=0; i <MAXNOTES; i++) scanf(", %lf",(e.notes+i)); return e; } B.Shishedjiev - Informatique II
15
B.Shishedjiev - Informatique II
Tableau de structures On peut utiliser un tableau dont les éléments sont de structures. Exemples Chaque élément est une structure ETUDIANT groupe[40]; struct point polygone[20]; groupe[0].numero = 12345; (groupe+1)->numero = groupe->numero +1; groupe[3].notes[2] = 12; polygone[10].x = 4; (polygone+10)->y = 6; B.Shishedjiev - Informatique II
16
B.Shishedjiev - Informatique II
Exemple Trouver les moyennes des notes d'un groupe d'étudiants #include <stdio.h> #define MAXETUD 40 #define MAXNOTES 5 typedef struct {int jour; int mois; int annee;} DATE; typedef struct { int numero; char nom[30]; char sex; DATE naiss; double notes[MAXNOTES]; double moyenne;} ETUDIANT; ETUDIANT lireEtud(void); void affichEtud(ETUDIANT e); int lireGroupe(ETUDIANT g[], int maxEtud); void calcMoyennes(ETUDIANT g[], int n); B.Shishedjiev - Informatique II
17
B.Shishedjiev - Informatique II
Exemple void main(void){ ETUDIANT groupe[MAXETUD]; int netud,i; netud = lireGroupe(groupe, MAXETUD); calcMoyennes(groupe, netud); printf("num nom date moyenne\n"); for (i=0; i<netud;i++) affichEtud(groupe[i]); } void calcMoyennes(ETUDIANT g[], int n){ int i,j; for (i=0 ; i< n; i++) { g[i].moyenne = 0; for (j=0; j<MAXNOTES; j++)g[i].moyenne +=g[i].notes[j]; g[i].moyenne /= MAXNOTES; B.Shishedjiev - Informatique II
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.