17
B.Shishedjiev - Informatique I I 1 Structures Modèles d'objets réels

Structures

  • Upload
    jeroen

  • View
    20

  • Download
    0

Embed Size (px)

DESCRIPTION

Structures. Modèles d'objets réels. Qu'est ce que c'est une structure. Un objet complexe dont les parts ne sont du même type Exemple. Chaque partie d'objet (champ) peut être d'un type différent et a un nom par lequel il peut être accédé. Déclaration et présentation. - PowerPoint PPT Presentation

Citation preview

Page 1: Structures

B.Shishedjiev - Informatique II 1

Structures

Modèles d'objets réels

Page 2: Structures

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– Chaque partie d'objet (champ) peut être d'un type

différent et a un nom par lequel il peut être accédé.

Texte

Date

M ou F

Nombres

Page 3: Structures

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; };

Page 4: Structures

B.Shishedjiev - Informatique II 4

Déclaration et présentation...

• Exemplesstruct 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

Page 5: Structures

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;

Page 6: Structures

B.Shishedjiev - Informatique II 6

Déclaration et présentation...

• Présentation

Représentation dans la mémoire

numero

nom

sex

jour

etud naiss mois

annee

0

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;

Page 7: Structures

B.Shishedjiev - Informatique II 7

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};

Page 8: Structures

B.Shishedjiev - Informatique II 8

Initialisation

• Exempletypedef 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}};

Page 9: Structures

B.Shishedjiev - Informatique II 9

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;

Page 10: Structures

B.Shishedjiev - Informatique II 10

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;

Page 11: Structures

B.Shishedjiev - Informatique II 11

Pointeurs vers structures

• Déclaration

– Exemples

• Accès aux champs des structures designées

– Exemples

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;

Page 12: Structures

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

Page 13: Structures

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);

}

Page 14: Structures

B.Shishedjiev - Informatique II 14

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;

}

Page 15: Structures

B.Shishedjiev - Informatique II 15

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;

Page 16: Structures

B.Shishedjiev - Informatique II 16

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);

Page 17: Structures

B.Shishedjiev - Informatique II 17

Exemplevoid 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;

}

}