CM01 Les structures
Télécharger le CM01 Les 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
Page 1 : INFORMATIQUE 1I X . L E S S T R U C T U R E S E T C O M P A G N I E
Page 2 : Les différents type en programmation•Nous avons vu jusqu’à maintenant les types “de base” int, float, char, double.•Les différents types sont réparties en deux categories :•Les types primitifs : la variable contient directement une valeur c’est le cas de int, flaot etc…•Les types references: la variable fait reference à une ou plusieurs valeurs stockés en mémoire.
Page 3 : Les différents type en programmation•Nous avons vu jusqu’à maintenant les types “de base” int, float, char, double. •Les différents types sont réparties en deux categories :•Les types primitifs : la variable contient directement une valeur c’est le cas de int, flaot etc…•Les types references: la variable fait reference à une ou plusieurs valeurs stockés en mémoire. •Ex : les tableaux ! tab1tab0tab2tab3tab-10, 23, 505 ,8tab fait reference à tout cet espace mémoire et àtoutes ces valeurs
Page 4 : Le monde n’est pas fait d’entiers et de réels….http://www.spencerauthor.com/pblproblems/
Page 5 : ●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 a : 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….
Page 6 : Exemple : gestion des étudiants Programme gestionetudiantsVARIABLE nometudiant1, nometudiant2 : chaîne de caractèrepnometudiant1, pnometudiant2 : chaîne de caractèrenumetudiant1, numetudiant2 : entiergpetudiants1, gpetudiant2 : entiernoteetudiant1, noteetudiant2 : reelDEBUT …
Page 7 : 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 ;●Un Coordonnée est composé de coordonnées réelles x, y dans un espace de dimension 2, x, y, z pour un 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 nom de rue, un code postal et une ville, etc.
Page 8 : ●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 type primitif, une variable d’un tel type structuré contient plusieurs valeurs stockée dans des champs 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éfini ses champs. Une définition étendue des structures
Page 9 : ●Un Coordonnée dans un espace 2D est définie par son abscisse est son ordonnée. ●On va construire une structure appellee Coordonnée, qui sera defines par deux champs: l’abcsisse et l’ordonnée.Exemple simpleSTRUCTURE Coordonnée abscisse : réelordonnée : réelFIN STRUCTURE
Page 10 : ●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éesy : Coordonnée
Page 11 : ●Coordonnée est maintenant un nouveau type!●Les Coordonnées sont des variables possédant deux attributs de type reel: 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éey : Coordonnée
Page 12 : 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éey : CoordonnéeDEBUTx.abscisse - 3 // acceder au champs x.ordonnée - 5,5y.abscisse - x.abscisse +2…
Page 13 : 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.nomChampi
Page 14 : Manipulation des structure• Chaque champs d’un occurrence de la structure peut être considérée comme une variable indépendante.• Les opérations se font champs par champs ! comme les cases pour les tableaux• Exemple : x, y et z sont des Coordonnéesz- x+yz. abscisse - x. abscisse + y. abscissez.ordonnee-x.ordonnee + y.ordonnee
Page 15 : Manipulation des structure• Chaque champs d’un occurrence de la structure peut être considérée comme une variable indépendante.• Les opérations se font champs par champs ! 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- x
Page 16 : ●Constructeur de variable de type structuré permet de valider les préconditions sur le type et de retourner la variable ou bien de planter 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 Constructeur
Page 17 : 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,bFIN
Page 18 : 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ée
Page 19 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a :STRUCTURE EtudiantFIN STRUCTURE
Page 20 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nomSTRUCTURE Etudiantnom : chaîne de caractèreFIN STRUCTURE
Page 21 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a : un nom, un prénomSTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèreFIN STRUCTURE
Page 22 : 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èreprenom : chaîne de catactèrenum : entierFIN STRUCTURE
Page 23 : 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èreprenom : chaîne de catactèrenum : entiergroupe : entierFIN STRUCTURE
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 groupe, des notesSTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernote1 : reel FIN STRUCTURE
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, N notesSTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernote1 : reel note2: reel …noteN : reelFIN STRUCTURE
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èreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de réélFIN STRUCTURE
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 notes, une adresseSTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de rééladresse : ???FIN STRUCTURE
Page 28 : Un exemple plus compliqué…•Une adresse est compose de plusieures information: le nom de la rue, le numéro de la maison, la ville, le code postal…•Une structure semble donc approprié pour representer une adresseSTRUCTURE Adressenum : entierrue : chaîne de catactèreville : chaîne de caractèrecode : entierFIN STRUCTURE
Page 29 : 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èreville : chaîne de caractèrecode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de rééladd : AdresseFIN STRUCTURE
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èreville : chaîne de caractèrecode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de rééladd : 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”
Page 31 : Un exemple plus compliqué…•Et pour gérer la promotion de 330 élèves? STRUCTURE Adressenum : entierrue : chaîne de catactèreville : chaîne de caractèrecode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de rééladd : AdresseFIN STRUCTURE
Page 32 : Un exemple plus compliqué…•Et pour gérer la promotion de 330 élèves? Constante NBETU - 330STRUCTURE Adressenum : entierrue : chaîne de catactèreville : chaîne de caractèrecode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de rééladd : AdresseFIN STRUCTUREVARIABLEpromNBETU : tableau d’EtudiantDEBUT
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èreville : chaîne de caractèrecode : entierFIN STRUCTURESTRUCTURE Etudiantnom : chaîne de caractèreprenom : chaîne de catactèrenum : entiergroupe : entiernoteN : tableau de rééladd : AdresseFIN STRUCTUREVARIABLEpromNBETU : tableau d’EtudiantDEBUTprom0.nom-“Dupont”prom5.groupe - 2prom1.add.num - 56prom1.num- 225784…
Page 34 : Les structure en C : syntaxe●Déclaration d’une structurestruct NomStructure type champ1 ;type champ2 ;…;●Utilisation d’une structurestruct NomStructure nomVariable;●Manipulation :nomVariable.champ
Page 35 : Les structure en C : syntaxe●Exemplestruct Coordonnéefloat abscisse;float ordonnee;;int mainstruct Coordonnée x;scanf"f",&x.abcisse;scanf"f",&x.ordonnee;printf " les coordonnées du Coordonnée sont f, f \n", x.abcisse, x.ordonnee;return 0;
Page 36 : Les structure en C : syntaxe●Exemple//Attention à l’ordre !!struct Adresseint num;char rue200; // Tableau de caractèrechar ville200;int code;;struct Etudiantchar nom200; char prenom200;int groupe;int num;struct Adresse add; // Adresse doit etre décrite avant;
Page 37 : 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, ... ;
Page 38 : Exemple// Renommagetypedef float reel ;typedef int entier ;// Utilisationentier a ;reel x ;
Page 39 : 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 !
Page 40 : É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○...
Page 41 : ●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; Syntaxe
Page 42 : Exempletypedef enum PIQUE, COEUR, CARREAU, TREFLE Couleur;typedef struct short valeur ; /short ??! 1-10, 11: valet, 12: dame, 13: roi / Couleur ccouleur ; carte;typedef carte deck52 // deck defini donc un lot de 52 cartes/Utilisation /deck jeu ;jeu0.valeur = 1;jeu0.ccouleur = TREFLE;
Page 43 : É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;
Page 44 : Pour completer●Enumeration des types de rue pour completer la structure Adresse:typedef enum RUE, BOULEVARD, IMPASSE, CHEMIN, AVENUE typerue;
Page 45 : 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;
Page 46 : 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
Page 47 : Conclusion•Il est possible de creer/personnaliser ses propres types. •Une structure est composée de sous-variable appellees champs ou attribus.•Pour acceder au champs d’une variable de la structure:•nomVariable.champ•L’énumeration est un type qui permet de prendre un valeur définie parmisd’autres.•On peut faire de l’imbrication de structure/ enumeration pour creer des types complexes.
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