Post

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 1

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 2

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 3

Page 4 : Le monde n’est pas fait d’entiers et de réels….http://www.spencerauthor.com/pblproblems/

page 4

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 5

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 6

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 7

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 8

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 9

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 10

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 11

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 12

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 13

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 14

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 15

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 16

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 17

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 18

Page 19 : Un exemple plus compliqué…•On va écrire la structure Etudiant.•Chaque étudiant a :STRUCTURE EtudiantFIN STRUCTURE

page 19

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 20

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 21

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 22

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 23

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 24

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 25

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 26

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 27

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 28

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 29

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 30

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 31

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 32

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 33

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 34

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 35

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 36

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 37

Page 38 : Exemple// Renommagetypedef float reel ;typedef int entier ;// Utilisationentier a ;reel x ;

page 38

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 39

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 40

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 41

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 42

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 43

Page 44 : Pour completer●Enumeration des types de rue pour completer la structure Adresse:typedef enum RUE, BOULEVARD, IMPASSE, CHEMIN, AVENUE typerue;

page 44

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 45

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 46

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.

page 47

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

Le contenu de cet article est la propriété exclusive de son auteur.