gef 243b programmation informatique appliquée structures §12.3

Download GEF 243B Programmation informatique appliquée Structures §12.3

Post on 03-Apr-2015

103 views

Category:

Documents

1 download

Embed Size (px)

TRANSCRIPT

  • Page 1
  • GEF 243B Programmation informatique applique Structures 12.3
  • Page 2
  • 21-Jan-14 2 JGA Beaulieu Revue Quelle est la syntaxe pour la dfinition dun type? Le type numr est bti sur quel autre type? Quelle est la valeur de MER ? enum JOURS {DIM, LUN, MAR, MER, JEU, VEN, SAM}; Comment est-ce que je changerais cette numration pour en faire un type qui sapple JOURS?
  • Page 3
  • 21-Jan-14 3 JGA Beaulieu Synopsis Structures Dfinition et dclaration tiquete Type dfinit Structures initialisation Structures accs au champs Structures et pointeurs Mmoire dynamique et structures
  • Page 4
  • 21-Jan-14 4 JGA Beaulieu Structures De nos jours les solutions informatiques demandent que nous soyons capables de dfinir des structures de donnes complexes Comme nous lavons appris dans les cours prcdents, nous pourrions crire des programmes complexes en utilisant seulement les types standards, mais les programmes seraient gigantesques et pas soutenables Une structure est une collection dlments apparents possiblement de diffrents types portant un seul nom Chaque lment dans une structure est appel un champ
  • Page 5
  • 21-Jan-14 5 JGA Beaulieu Structures Si je veux dcrire un tudiant (mon abstraction dun tudiant) je pourrais ramasser linformation suivante:: Prnom Surnom Numro de collge Moyenne Nous voyons maintenant comment crer une structure et comment dclarer une variable pour entreposer cette information Il y a trois faons de dclarer une structure en C variable structure (trs limit donc pas utilis souvent) structure tiquete structure de type dfinit
  • Page 6
  • 21-Jan-14 6 JGA Beaulieu Structures - tiquete Exemple: struct ETUDIANT { char prenom[15]; char surnom[25]; int numDeCollege; float moyenne; };
  • Page 7
  • 21-Jan-14 7 JGA Beaulieu Structures Pour dclarer une variable pour cette structure, je fais principalement ce que jai fais pour les types numrs: Le nom rserv struct est rpt de la mme faon que enum ltait: struct ETUDIANT unEtudiantCMR;
  • Page 8
  • 21-Jan-14 8 JGA Beaulieu Dfinition de type structure Et similairement aux types numrs, je peux aussi typedef toutes structures pour ne pas avoir taper le mot cl struct chaque fois: typedef struct { char prenom[15]; char surnom[25]; int numDeCollege; float moyenne; } ETUDIANT; //nom du type ETUDIANT unEtudiantCMR;//dclaration Cest plus puissant et cest la mthode prfre
  • Page 9
  • 21-Jan-14 9 JGA Beaulieu Structure - initialisation Les structures sont initialises de faon semblable aux tableaux. Si nous prenons le type ( typedef) ETUDIANT et la variable unEtudiantCMR de la diapo prcdente: ETUDIANT unETUDIANTCMR = {"Ti-Joe", "Branch",45239,78.3}; Vous devez revenir pour rencontrer cet tudiant
  • Page 10
  • 21-Jan-14 10 JGA Beaulieu Exemple Dfinissez une structure de type dfinit ( typedef ) qui inclut: le manufacturier, nom du modle, type de transmission, nombre de portes (2,3,4 ou 5) couleur, anne, grosseur du moteur (# de cylindres) Vous pouvez utiliser les typedef enum du dernier cours
  • Page 11
  • 21-Jan-14 11 JGA Beaulieu Exemple En utilisant la structure de type dfinit que vous avez fait TYPE_VEHICLE dclarez une variable avec: ManufacturierChrysler ModleNewYorker Anne1978 PORTES4 Cylindres8 COULEURROUGE TRANSMISSIONAUTOMATIQUE
  • Page 12
  • 21-Jan-14 12 JGA Beaulieu Exemple typedef enum {MANUELLE, AUTOMATIQUE} TRANSMISSION; typedef enum {ROUGE, BLANC, JAUNE, VERT, BEIGE, GRIS, NOIR} COULEUR;
  • Page 13
  • 21-Jan-14 13 JGA Beaulieu Exemple typedef struct { char manufacturier[25]; char modele[25]; int annee; int nombrePortes; TRANSMISSION typeTrans; COULEUR couleurAuto; int nombreCylindres; } AUTO;
  • Page 14
  • 21-Jan-14 14 JGA Beaulieu Exemple AUTO monPremierChar = { "CHRYSLER", "NEWYORKER", 1978, 4, AUTOMATIQUE, ROUGE, 8 } AUTO;
  • Page 15
  • 21-Jan-14 15 JGA Beaulieu Structures et champs Les structures sont construites avec des champs. Chaque place que vous pouvez vous servir dune variable, vous pouvez vous servir dun champ de structure Chaque champ peut tre accd individuellement avec loprateur de membre de structure (.): strcpy(unEtudiantCMR.prenom, "Bob"); unEtudiantCMR.numeroDeCollege = 98876; Vous pourriez rencontrer cet tudiant un jour
  • Page 16
  • 21-Jan-14 16 JGA Beaulieu Structures et champs Les structures sont des entits qui peuvent tre traits en entiret, mais SEULEMENT pendant une opration daffectation: ETUDIANT fEtudiant = {"Collete", "Strole", 23498, 33.2}; //pauvre Collette! unEtudiantCMR = fEtudiant; Vous ne pouvez pas comparer deux structures: if (unEtudiantCMR == fEtudiant) printf("Totalement une erreur");
  • Page 17
  • 21-Jan-14 17 JGA Beaulieu Structures et champs Pour que vous puissiez comparer deux structures du mme type, vous devriez crire une fonction qui compare chaque champ en ordre : //fonction retourne 1 si tout les champs sont gales int CompareEtudiants(ETUDIANT et1, ETUDIANT et2) { return (!strcmp (et1.prenom,et2.prenom) && !strcmp (et1.surnom,et2.surnom) && et1.numeroDeCollege == et2.numeroDeCollege && (fabs(et1.moyenne - et2.moyenne) < 0.0001)); }
  • Page 18
  • 21-Jan-14 18 JGA Beaulieu Pointer aux structures? Point!
  • Page 19
  • 21-Jan-14 19 JGA Beaulieu Pointer aux structures Comme nimporte quel type en C, les pointeurs peuvent tre utiliss pour pointer aux structures. Le pointeur pointe au premier octet de la structure. Vous pouvez aussi utiliser les pointeurs pour avoir accs aux champs de la structure: ETUDIANT* pEtudiant = &unEtudiantCMR; unEtudiantCMR.numeroDeCollege = 12345; (*pEtudiant).numeroDeCollege = 12345; Rsulte la mme chose; mais nous avons besoin des parenthses autour de la drfrence cause de la prcdence des oprateurs
  • Page 20
  • 21-Jan-14 20 JGA Beaulieu Pointer aux structures Par chance, C nous donne un autre oprateur qui nous permet de drfrencer le pointeur et davoir accs un des champ en mme temps; loprateur de slection de structure: pEtudiant->numeroDeCollege = 54321;
  • Page 21
  • 21-Jan-14 21 JGA Beaulieu Allocation dynamique de la mmoire Vous pouvez allouer de la mmoire pour nimporte quel type incluant des structures de type dfinit: typedef struct { char prenom[15]; char surnom[25]; } NOM; NOM* pNom = NULL; pNom = (NOM*)malloc (sizeof(NOM));
  • Page 22 prenom, unEtudiant.numDeCollege);">
  • 21-Jan-14 22 JGA Beaulieu Quiz Time Quest-ce qui est imprim avec ce code? int* pInt; ETUDIANT unEtudiant ={"Collete", "Strole", 23498, 33.2}; ETUDIANT* pEtudiant = &unEtudiant; pInt = &unEtudiant.numDeCollege; printf("%s numro dtudiant est %d", (*pEtudiant).prenom, *pInt); printf("%s numro dtudiant est %d", pEtudiant->prenom, unEtudiant.numDeCollege);
  • Page 23
  • 21-Jan-14 23 JGA Beaulieu Quiz Time Si vous dclarez une variable qui est une dfinition de type structure quel oprateur est-ce que vous utilisez pour accder les champs? Si vous avez un pointeur la structure, quel oprateur utilisez vous? Pouvez vous affecter une structure une autre au complet? Comment est-ce que vous comparez les structures?

Recommended

View more >