1 / 23

GEF 243B Programmation informatique appliquée

GEF 243B Programmation informatique appliquée. Structures §12.3. Revue. Quelle est la syntaxe pour la définition d’un type ? Le type énuméré est bâti sur quel autre type? Quelle est la valeur de MER ? enum JOURS {DIM, LUN, MAR, MER, JEU, VEN, SAM};

radwan
Download Presentation

GEF 243B Programmation informatique appliquée

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. GEF 243BProgrammation informatique appliquée Structures §12.3

  2. Revue • Quelle est la syntaxe pour la définition d’un type? • Le type énuméré est bâti 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 énumération pour en faire un type qui s’appèle JOURS? JGA Beaulieu

  3. Synopsis • Structures – Définition et déclaration • Étiquetée • Type définit • Structures – initialisation • Structures – accès au champs • Structures et pointeurs • Mémoire dynamique et structures JGA Beaulieu

  4. Structures • De nos jours les solutions informatiques demandent que nous soyons capables de définir des structures de données complexes • Comme nous l’avons appris dans les cours précédents, 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 d’éléments apparentés possiblement de différents types portant un seul nom • Chaque élément dans une structure est appelé un champ JGA Beaulieu

  5. Structures • Si je veux décrire un étudiant (mon abstraction d’un étudiant) je pourrais ramasser l’information suivante:: • Prénom • Surnom • Numéro de collège • Moyenne • Nous voyons maintenant comment créer une structure et comment déclarer une variable pour entreposer cette information • Il y a trois façons de déclarer une structure en C • variable structure (très limité donc pas utilisé souvent) • structure étiquetée • structure de type définit JGA Beaulieu

  6. Structures - Étiquetée • Exemple: struct ETUDIANT { char prenom[15]; char surnom[25]; int numDeCollege; float moyenne; }; JGA Beaulieu

  7. Structures • Pour déclarer une variable pour cette structure, je fais principalement ce que j’ai fais pour les types énumérés: • Le nom réservé struct est répété de la même façon que enum l’était: struct ETUDIANT unEtudiantCMR; JGA Beaulieu

  8. Définition de type structure • Et similairement aux types énumérés, je peux aussi typedef toutes structures pour ne pas avoir à taper le mot clé structchaque fois: typedef struct { char prenom[15]; char surnom[25]; int numDeCollege; float moyenne; } ETUDIANT; //nom du type ETUDIANT unEtudiantCMR;//déclaration • C’est plus puissant et c’est la méthode préférée JGA Beaulieu

  9. Structure - initialisation • Les structures sont initialisées de façon semblable aux tableaux. Si nous prenons le type (typedef)ETUDIANT et la variable unEtudiantCMR de la diapo précédente: ETUDIANT unETUDIANTCMR = {"Ti-Joe", "Branch",45239,78.3}; Vous devez revenir pour rencontrer cet étudiant JGA Beaulieu

  10. Exemple • Définissez une structure de type définit (typedef) qui inclut: • le manufacturier, • nom du modèle, • type de transmission, • nombre de portes (2,3,4 ou 5) • couleur, • année, • grosseur du moteur (# de cylindres) • Vous pouvez utiliser les typedef enum du dernier cours JGA Beaulieu

  11. Exemple • En utilisant la structure de type définit que vous avez fait TYPE_VEHICLE déclarez une variable avec: • Manufacturier Chrysler • Modèle NewYorker • Année 1978 • PORTES 4 • Cylindres 8 • COULEUR ROUGE • TRANSMISSION AUTOMATIQUE JGA Beaulieu

  12. Exemple typedef enum {MANUELLE, AUTOMATIQUE} TRANSMISSION; typedef enum {ROUGE, BLANC, JAUNE, VERT, BEIGE, GRIS, NOIR} COULEUR; JGA Beaulieu

  13. Exemple typedef struct { char manufacturier[25]; char modele[25]; int annee; int nombrePortes; TRANSMISSION typeTrans; COULEUR couleurAuto; int nombreCylindres; } AUTO; JGA Beaulieu

  14. Exemple AUTO monPremierChar = { "CHRYSLER", "NEWYORKER", 1978, 4, AUTOMATIQUE, ROUGE, 8 } AUTO; JGA Beaulieu

  15. Structures et champs • Les structures sont construites avec des champs. Chaque place que vous pouvez vous servir d’une variable, vous pouvez vous servir d’un champ de structure • Chaque champ peut être accédé individuellement avec l’opérateur de membre de structure (.): strcpy(unEtudiantCMR.prenom, "Bob"); unEtudiantCMR.numeroDeCollege = 98876; Vous pourriez rencontrer cet étudiant un jour … JGA Beaulieu

  16. Structures et champs • Les structures sont des entités qui peuvent être traités en entièreté, mais SEULEMENT pendant une opération d’affectation: ETUDIANT fEtudiant = {"Collete", "Stérole", 23498, 33.2}; //pauvre Collette! unEtudiantCMR = fEtudiant; • Vous ne pouvez pas comparer deux structures: if (unEtudiantCMR == fEtudiant) printf("Totalement une erreur"); JGA Beaulieu

  17. Structures et champs • Pour que vous puissiez comparer deux structures du même 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)); } JGA Beaulieu

  18. Pointer aux structures? Point! JGA Beaulieu

  19. Pointer aux structures • Comme n’importe quel type en C, les pointeurs peuvent être utilisés pour pointer aux structures. Le pointeur pointe au premier octet de la structure. • Vous pouvez aussi utiliser les pointeurs pour avoir accès aux champs de la structure: ETUDIANT* pEtudiant = &unEtudiantCMR; unEtudiantCMR.numeroDeCollege = 12345; (*pEtudiant).numeroDeCollege = 12345; • Résulte à la même chose; mais nous avons besoin des parenthèses autour de la déréférence à cause de la précédence des opérateurs JGA Beaulieu

  20. Pointer aux structures • Par chance, C nous donne un autre opérateur qui nous permet de déréférencer le pointeur et d’avoir accès à un des champ en même temps; l’opérateur de sélection de structure: pEtudiant->numeroDeCollege = 54321; JGA Beaulieu

  21. Allocation dynamique de la mémoire • Vous pouvez allouer de la mémoire pour n’importe quel type incluant des structures de type définit: typedef struct { char prenom[15]; char surnom[25]; } NOM; NOM* pNom = NULL; pNom = (NOM*)malloc (sizeof(NOM)); JGA Beaulieu

  22. Quiz Time JGA Beaulieu • Qu’est-ce qui est imprimé avec ce code? int* pInt; ETUDIANT unEtudiant ={"Collete", "Stérole", 23498, 33.2}; ETUDIANT* pEtudiant = &unEtudiant; pInt = &unEtudiant.numDeCollege; printf("%s numéro d’étudiant est %d", (*pEtudiant).prenom, *pInt); printf("%s numéro d’étudiant est %d", pEtudiant->prenom, unEtudiant.numDeCollege);

  23. Quiz Time • Si vous déclarez une variable qui est une définition de type structure quel opérateur est-ce que vous utilisez pour accéder les champs? • Si vous avez un pointeur à la structure, quel opérateur utilisez vous? • Pouvez vous affecter une structure à une autre au complet? • Comment est-ce que vous comparez les structures? JGA Beaulieu

More Related