CM01 Structures
Télécharger le CM01 Structures en pdf
Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
Page 1 : INFORMATIQUE 2I . S T R U C T U R E S E N U M E R AT I O N S T Y P E S Eva ANSERMIN & Romuald GRIGNONE. ANSERMIN R. GRIGNON1v1.00
Page 2 : Page moodle du cours !E. ANSERMIN R. GRIGNON2
Page 3 : Les différents types en programmation•Nous avons vu jusqu’à maintenant les types “de base” int, float, char, double.•Les différents types sont répartis en deux categories :•Les types primitifs : la variable contient directement une valeur c’est le cas de int, float etc…•Les types références: la variable fait référence à une ou plusieurs valeurs stockées en mémoire. E. ANSERMIN R. GRIGNON3
Page 4 : Les différents types en programmation•Nous avons vu jusqu’à maintenant les types “de base” int, float, char, double. •Les différents types sont répartis en deux categories :•Les types primitifs : la variable contient directement une valeur c’est le cas de int, float etc…•Les types références: la variable fait référence à une ou plusieurs valeurs stockées en mémoire. •Ex : les tableaux ! tab1tab0tab2tab3tab 10, 23, 505 ,8tab fait référence à tout cet espace mémoire et àtoutes ces valeursE. ANSERMIN R. GRIGNON4
Page 5 : Le monde n’est pas fait d’entiers et de réels….http://www.spencerauthor.com/pblproblems/E. ANSERMIN R. GRIGNON5
Page 6 : ●En géométrie, nous manipulons des coordonnées, des rectangles, des droites ... ;●Un magasin gère des produits, des clients, des factures, des fournisseurs ;●Dans une médiathèque, il y a des documents, des usagers, qui louent, réservent ces documents ...●Exemple : On souhaite faire un programme qui va gérer des étudiants. Chaque étudiant possède :○un nom○un prénom○un numéro d’étudiant○un groupe○une ou plusieurs notes…Le monde n’est pas fait d’entiers et de réels….E. ANSERMIN R. GRIGNON6
Page 7 : Exemple : gestion des étudiants Programme gestionetudiantsVARIABLE nometudiant1, nometudiant2 : chaîne de caractèrespnometudiant1, pnometudiant2 : chaîne de caractèresnumetudiant1, numetudiant2 : entiergpetudiants1, gpetudiant2 : entiernoteetudiant1, noteetudiant2 : réelDEBUT …E. ANSERMIN R. GRIGNON7
Page 8 : Une première définition des structureUn type structuré représente une donnée complexe, composée de plusieurs valeurs pouvant être de types différents :●Un nombre Complexe possède une partie réelle et une partie imaginaire ;●Une Coordonnée est composée de coordonnées réelles x, y dans un espace de dimension 2, de coordonnées réelles x, y, z pour une Coordonnée en 3D, etc. ;●Une Date est définie par un jour, un mois, une année, une heure, des minutes, secondes, millisecondes ;●Une Adresse est définie par un numéro et un nom de rue, un code postal et une ville, etc.E. ANSERMIN R. GRIGNON8
Page 9 : ●Un type structuré définit un type de donnée au même titre qu’entier, chaîne ou réel ;●À la différence des variables de types primitifs, une variable d’un tel type structuré contient plusieurs valeurs stockées dans des champs ou membres ou attributs ;●Les variables de type structuré sont appelées parfois enregistrements.●C’est le programmeur qui definit la structure, lui donne un nom et définit ses champs. Une définition étendue des structuresE. ANSERMIN R. GRIGNON9
Page 10 : ●Une Coordonnée dans un espace 2D est définie par son abscisse et son ordonnée. ●On va construire une structure appellee Coordonnée, qui sera definit par deux champs: l’abscisse et l’ordonnée.Exemple simpleSTRUCTURE Coordonnée abscisse : réelordonnée : réelFIN STRUCTUREE. ANSERMIN R. GRIGNON10
Page 11 : ●Coordonnée est maintenant un nouveau type!Exemple simpleSTRUCTURE Coordonnée // définition de la structure abscisse : réelordonnée : réelFIN STRUCTUREVARIABLE // déclaration des variablesa: entierx : Coordonnée // x et y sont des ‘Coordonnée’y : Coordonnée E. ANSERMIN R. GRIGNON11
Page 12 : ●Coordonnée est maintenant un nouveau type!●Les Coordonnées sont des variables possédant deux attributs de types réels: abscisse et ordonnée.Exemple simpleSTRUCTURE Coordonnée // définition de la structure abscisse : réelordonnée : réelFIN STRUCTUREVARIABLE // déclaration des variablesa: entierx : Coordonnée // x et y sont des ‘Coordonnée’y : CoordonnéeE. ANSERMIN R. GRIGNON12
Page 13 : Exemple simpleSTRUCTURE Coordonnée // définition de la structure abscisse : réelordonnée : réelFIN STRUCTUREVARIABLE // déclaration des variablesa: entierx : Coordonnée // x et y sont des ‘Coordonnée’y : CoordonnéeDEBUTx.abscisse - 3 // acceder au champs x.ordonnée - 5,5y.abscisse - x.abscisse +2…E. ANSERMIN R. GRIGNON13
Page 14 : Syntaxe●Définition du type structuréSTRUCTURE nomType nomChamp1 : TYPE1, nomChamp2 : TYPE2,....,nomChampn : TYPEnFIN STRUCTURE●Déclaration de variableelt1, elt2 : nomType●Manipulation :Accéder au champ nomChampi de la variable elt1 se fait selon : elt1.nomChampiE. ANSERMIN R. GRIGNON14
Page 15 : Manipulation des structure• Chaque champ d’une occurrence de la structure peut être considérée comme une variable indépendante.• Les opérations se font champ par champ ! comme les cases pour les tableaux• Exemple : x, y et z sont des Coordonnéez x+yz. abscisse x. abscisse + y. abscissez.ordonnee x.ordonnee + y.ordonneeE. ANSERMIN R. GRIGNON15
Page 16 : Manipulation des structure• Chaque champ d’une occurrence de la structure peut être considérée comme une variable indépendante.• Les opérations se font champ par champ ! comme les cases pour les tableaux• On a par contre le droit d’écrire :Les valeurs des champs de z seront égales à ceux de x z xE. ANSERMIN R. GRIGNON16
Page 17 : ●Constructeur de variable de type structuré permet de valider les préconditions sur le type et de retourner la variable ou bien de terminer le programmeFONCTION creerTypeval1 : TYPE1, val2 : TYPE2, ... : nomType VAR res : nomTypeDÉBUTSI conditionval1, val2, ... ALORSécrire “Un message d’erreur explicite”erreur // met fin au programme en erreurFIN SIres.nomChamp1 - val1 res.nomChamp2 - val2....retourner resFIN ConstructeurE. ANSERMIN R. GRIGNON17
Page 18 : STRUCTURE Coordonnéeabscisse : réelordonnée : réelFIN STRUCTUREFONCTION creerCoordonnéex, y: reel : CoordonnéeVAR p : CoordonnéeDÉBUTp.abscisse - xp.ordonnee- yRETOURNER pFIN Exemple simpleVARIABLE x : Coordonnéea : réelb : réelDEBUTECRIRE“donner les coordonnées du Coordonnée”LIREaLIREbx- creerCoordonnéea,bFINE. ANSERMIN R. GRIGNON18
Page 19 : Remarques• Le nom des structures commence toujours par une majuscule.• Il ne faut pas confondre la structure le type créé et les variables de cettestructure.• Les différents champs d’une variable de type structure sont à la suite dans la mémoire comme les cases d’un tableau. x.abcissex.ordonnéex : CoordonnéeE. ANSERMIN R. GRIGNON19
Page 20 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a :STRUCTURE EtudiantFIN STRUCTUREE. ANSERMIN R. GRIGNON20
Page 21 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nomSTRUCTURE Etudiantnom : chaîne de caractèresFIN STRUCTUREE. ANSERMIN R. GRIGNON21
Page 22 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénomSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresFIN STRUCTUREE. ANSERMIN R. GRIGNON22
Page 23 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénom, un numéro etudiantSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entierFIN STRUCTUREE. ANSERMIN R. GRIGNON23
Page 24 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupeSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entierFIN STRUCTUREE. ANSERMIN R. GRIGNON24
Page 25 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupe, des notesSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernote1 : reel FIN STRUCTUREE. ANSERMIN R. GRIGNON25
Page 26 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupe, N notesSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernote1 : reel note2: reel …noteN : reelFIN STRUCTUREE. ANSERMIN R. GRIGNON26
Page 27 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupe, N notesSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de réélsFIN STRUCTUREE. ANSERMIN R. GRIGNON27
Page 28 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupe, N notes, une adresseSTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de rééladresse : ???FIN STRUCTUREE. ANSERMIN R. GRIGNON28
Page 29 : Un exemple plus compliqué…•Une adresse est composée de plusieurs informations : le nom de la rue, le numéro de la maison, la ville, le code postal…•Une structure semble donc appropriée pour représenter une adresseSTRUCTURE Adressenum : entierrue : chaîne de catactèresville : chaîne de caractèrescode : entierFIN STRUCTUREE. ANSERMIN R. GRIGNON29
Page 30 : Un exemple plus compliqué…•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupe, N notes, une adresseSTRUCTURE Adressenum : entierrue : chaîne de catactèresville : chaîne de caractèrescode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de réélsadd : AdresseFIN STRUCTUREE. ANSERMIN R. GRIGNON30
Page 31 : Un exemple plus compliqué…•Chaque étudiant a : un nom, un prénom, un numéro etudiant, un groupe, N notes, une adresseSTRUCTURE Adressenum : entierrue : chaîne de catactèresville : chaîne de caractèrescode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de réélsadd : AdresseFIN STRUCTUREPour indiquer le code postal d’un Etudiant: VARIABLEetu1 : EtudiantDEBUTetu1.add.code - 95000 Se lit : “ le code de l’adresse de l’étudiant etu1”E. ANSERMIN R. GRIGNON31
Page 32 : Un exemple plus compliqué…•Et pour gérer la promotion de 330 élèves? STRUCTURE Adressenum : entierrue : chaîne de catactèresville : chaîne de caractèrescode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de réélsadd : AdresseFIN STRUCTUREE. ANSERMIN R. GRIGNON32
Page 33 : Un exemple plus compliqué…•Et pour gérer la promotion de 330 élèves? Constante NBETU - 330STRUCTURE Adressenum : entierrue : chaîne de catactèresville : chaîne de caractèrescode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de réélsadd : AdresseFIN STRUCTUREVARIABLEpromNBETU : tableau d’EtudiantDEBUTE. ANSERMIN R. GRIGNON33
Page 34 : Un exemple plus compliqué…•Et pour gérer la promotion de 330 élèves? Constante NBETU - 330STRUCTURE Adressenum : entierrue : chaîne de catactèresville : chaîne de caractèrescode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèresprenom : chaîne de catactèresnum : entiergroupe : entiernoteN : tableau de réélsadd : AdresseFIN STRUCTUREVARIABLEpromNBETU : tableau d’EtudiantDEBUTprom0.nom-“Dupont”prom5.groupe - 2prom1.add.num - 56prom1.num- 225784…E. ANSERMIN R. GRIGNON34
Page 35 : Les structure en C : syntaxe●Déclaration d’une structurestruct NomStructure type champ1 ;type champ2 ;…;●Utilisation d’une structurestruct NomStructure nomVariable;●Manipulation :nomVariable.champE. ANSERMIN R. GRIGNON35
Page 36 : Les structure en C : syntaxe●Exemplestruct Coordonnéefloat abscisse;float ordonnee;;int mainstruct Coordonnée c1;scanf"f",&c1.abcisse;scanf"f",&c1.ordonnee;printf "Les coordonnées de c1 sont f, f \n",c1.abcisse,c1.ordonnee ;return 0;E. ANSERMIN R. GRIGNON36
Page 37 : Les structure en C : syntaxe●Exemple//Attention à l’ordre !!struct Adresseint num;char rue200; // Tableau de caractèreschar ville200;int code;;struct Etudiantchar nom200; char prenom200;int groupe;int num;struct Adresse add; // Adresse doit etre décrite avant;E. ANSERMIN R. GRIGNON37
Page 38 : Types équivalents●Permet de renommer un type existant ●Permet de simplifier une écriture, de gagner en expressivité●Exemple :typedef type nouveaunom ; typedef type nouveaunom1, nouveaunom2, ... ; E. ANSERMIN R. GRIGNON38
Page 39 : Exemple// Renommagetypedef float reel ;typedef int entier ;// Utilisationentier a ;reel x ;E. ANSERMIN R. GRIGNON39
Page 40 : Types équivalents●Déclaration d’une structure + renommage en type : // Dorénavant, nous l’écrirons comme cecitypedef struct char nom200 ; char prenom200 ; Auteur;// UtilisationAuteur tolkien, rowling ;●Plus besoin d’utiliser struct à chaque déclaration ! E. ANSERMIN R. GRIGNON40
Page 41 : Énumération●Une énumération définit un nouveau type permettant à une variable de prendre un nombre fini de valeurs ;●Exemples :○mois : JANVIER, FÉVRIER, MARS, ... ○jours : LUNDI, MARDI, MERCREDI, ...○couleurCarte : PIQUE, COEUR, CARREAU, TREFLE○feuTtricolore : ROUGE, ORANGE, VERT○booléen : VRAI, FAUX○...E. ANSERMIN R. GRIGNON41
Page 42 : ●Déclaration d’une énumérationenum nomEnumeration VAL1, VAL2, …, VALN ;ou plutôt :typedef enum VAL1, VAL2, …, VALN nomEnumeration;●Utilisation d’une énumérationenum nomEnumeration nomVariable;ou plutôt :nomEnumeration nomVariable; SyntaxeE. ANSERMIN R. GRIGNON42
Page 43 : Exempletypedef enum PIQUE, COEUR, CARREAU, TREFLE Couleur;typedef struct char valeur ; /1-10, 11: valet, 12: dame, 13: roi / Couleur ccouleur ; Carte;typedef Carte52 Deck; // Deck definit un lot de 52 Cartes/Utilisation /Deck jeu ;jeu0.valeur = 1;jeu0.ccouleur = TREFLE;E. ANSERMIN R. GRIGNON43
Page 44 : Énumération : Sous le capot●Une valeur est affectée à chaque valeur de l’énumération ;●Première valeur : 0 ;●Itération pour les autres +1 par défaut ;●Il est possible de :○démarrer avec une autre valeur,○donner une valeur différente à un élément de l’énumération:typedef enum FAIBLE = 10, MOYEN = 50, FORT = 100Volume;E. ANSERMIN R. GRIGNON44
Page 45 : Pour completer●Enumeration des types de rue pour completer la structure Adresse:typedef enum RUE, BOULEVARD, IMPASSE, CHEMIN, AVENUE typerue;E. ANSERMIN R. GRIGNON45
Page 46 : Pour completertypedef enum RUE, BOULEVARD, IMPASSE, CHEMIN, AVENUE Typerue;typedef structint num;Typerue style; // Type de rue de l’adressechar rue200; // Nom de la rue char ville200;int code; Adresse;typedef struct char nom200; char prenom200;int groupe;int num;Adresse add; Etudiant;E. ANSERMIN R. GRIGNON46
Page 47 : Structure générale d’un fichier .c Instructions du préprocesseur inclusion bibliothèque+ définition constante Code de la fonction 1Code de la fonction 2….Code de la fonction mainDéfintions structures+ typedef E. ANSERMIN R. GRIGNON47
Page 48 : Conclusion•Il est possible de créer/personnaliser ses propres types. •Une structure est composée de sous-variables appellées champs ou attributsou membres.•Pour acceder à un membre d’une variable de type structure:•nomVariable.membre•L’énumeration est un type qui permet de prendre un valeur définie parmid’autres.•On peut faire de l’imbrication de structures/énumerations pour créer des types complexes.E. ANSERMIN R. GRIGNON48
Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48