SlideShare une entreprise Scribd logo
S. Laporte                                                                           Lycée Louise Michel BTS IG 1



                       Les structures (enregistrements)
                      Définitions et syntaxe

Structure est le nom donné en C et C++ à ce qu'on appelle enregistrement en algorithmique.
Ce nom peut porter à confusion car les structures ne représentent qu'un sous-ensemble des structures de données. Les
tableaux sont aussi des structures de données mais ce ne sont pas des structures. Nous verrons l'année prochaine d'autres type
de structures de données (comme les listes chaînées).

Une structure (au sens enregistrement) permet de désigner sous un seul nom un ensemble de valeurs pouvant être de type
différent. L'accès aux éléments d'une structure (appelés champs) ne se fait pas par un indice contrairement à l'accès aux
éléments d'un tableau, mais par le nom du champ (précédé du nom de la structure et d'un point).

  Comme en algorithmique, il faut bien distinguer le type de structure de la structure elle-
même.
Une structure est une variable dont on a préalablement défini le type.
Ainsi, pour déclarer une structure, deux étapes sont nécessaires:
      - définir1 le type de structure (appelé aussi modèle de structure, correspondant au type enregistrement)
      - déclarer une ou plusieurs variables de ce type, appelées structures


       !      Remarque:
Dans certains ouvrages, vous trouverez écrit qu'une structure est un type et que les variables de ce type sont
des variables structures ou variables structurées. Cela dépend des auteurs. L'important est de bien faire
la distinction entre le type structuré et les variables de ce type.

     Syntaxe

En C++                                                                  En algorithmique

// déclaration (ou définition) du type de structure2                    Type

struct ttoto                                                            ttoto = enregistrement
{                                                                                 tutu: entier
int tutu;                                                                         titi: réel
float titi;                                                                    finenreg
};

// déclaration des structures du type ttoto(variables)                  Var

ttoto toto1, toto2;                                                     toto1, toto2: ttoto

                                                                        Début
// accès au champ titi de toto1 (pour affichage)                        …
                                                                        Aff toto1.titi
cout << toto1.titi;



Les champs d'une structure peuvent être de n'importe quel type, y compris d'un "type utilisateur" ou d'un autre type de
structure. La seule contrainte est que les types des champs soient connus du compilateur. Les types crées par le
programmeur doivent avoir été définis (déclarés) préalablement à leur utilisation comme type d'un champ.




1 dans le cas des types de structure, la déclaration correspond à la définition. On peut utiliser ces deux termes

indifféremment
2 Cette syntaxe est valable en C++ mais pas en C où il faudrait utiliser typedef. Pour plus de renseignements, voir les

différents ouvrages de C à la bibliothèque.



                                                                                                                            1
S. Laporte                                                                            Lycée Louise Michel BTS IG 1

ε Exemple
Déclaration de 3 clients caractérisés par leur nom, leur prénom et leur adresse, composée d'un numéro de rue, d'un nom de
rue, d'un code postal et d'une ville.
Pour simplifier l'utilisation des chaines de caractères, on déclare tout d'abord un type utilisateur chaine

typedef                                                   // définition d'un type chaine


struct tadresse                           // déclaration d'un type de structure tadresse
{
             num_rue;
             nom_rue;
             cp;
             ville;
};
struct tclient                            // déclaration d'un type de structure tclient
{
             nom;
             prenom;
                adresse;
};

                                                            // déclarations des 3 clients


     Application

Ecrire un programme en C++ qui saisit les caractéristiques de 2 personnes (nom, prénom, date de naissance) puis qui affiche
le nombre d'années d'écart qui sépare la naissance de ces deux personnes (pour simplifier, on considère que deux personnes
nées sur deux années différentes ont un an d'écart, même si l'une est née en janvier et l'autre en décembre). Vous pourrez
utiliser la fonction abs( ) déclaré dans le fichier d'en-tête math.h.




                    Les tableaux de structures

Il est bien entendu possible de regrouper sous un même nom, plusieurs structures de même type pour former un tableau de
structure.

ε Exemple
Déclaration d'un tableau de 20 clients:
          tclient client[20];

   Application
On suppose que le tableau client déclaré ci-dessus a été initialisé.
Ecrire l'instruction qui permet d'afficher le nom, le prénom et l'adresse du quatrième client du tableau, sous la forme suivante:
Pierre Dupond
12, rue Jean Monnet
93000 Bobigny




                                                                                                                               2
S. Laporte                                                                             Lycée Louise Michel BTS IG 1



Ecrire maintenant la séquence qui permettrait d'afficher ainsi tous les clients, séparés par une ligne.




                 Passage d'une structure en paramètre d'une fonction et portée des types
          de structure

Les structures, comme toutes variables, peuvent être passés en paramètre d'une fonction. L'intégralité de la structure est
passée en paramètre, ce qui évite d'avoir à passer tous les champs uns à uns (cela est possible car l'affectation globale entre
deux structures de même type est autorisée).
Le mode de passage des structures est le même que les variables simples (contrairement aux tableaux):
    - par défaut, le passage s'effectue par valeur, donc la structure paramètre ne sera pas modifiée.
    - si la structure est un paramètre résultat ou un paramètre modifié, il faut alors utiliser le passage par référence (avec
    &).
ε Exemple
Voilà une fonction void qui permute les valeurs des champs de deux clients.
Attention, pour que la permutation se fasse sentir sur les paramètres effectifs, il faut utiliser le passage par référence
(paramètres en entrée/sortie)

          void permut (tclient & toto, tclient & titi)
          {
            tclient temp;     // déclaration d'une personne temporaire pour la permutation

              temp = toto;    // affectation globale possible entre 2 structures de même type
              toto = titi;
              titi = temp;
          }


     Attention à la portée des types de structures!
Si le type de structure tclient est déclaré (défini) à l'intérieur du programme principal main( ), alors la fonction permut ne va
pas fonctionner. En effet, la portée d'un type de structure (ou d'un type utilisateur) suit les mêmes règles que la portée d'une
variable:
- s'il est déclaré au sein d'une fonction (y compris main( ) bien entendu), il n'est accessible (utilisable) qu'au sein de cette
fonction, même pas par les fonctions appelées. Il n'est donc pas possible de passer en paramètre à une autre fonction,.une
structure déclarée en local
- s'il est déclaré avant toute fonction, le type structuré est alors accessible par toutes les fonctions contenues dans le
fichier source (y compris main( ) bien entendu). Dans ce cas, il est possible de passer une structure en paramètre d'une
fonction.

Ainsi, en général, les types structuré sont déclarés avant la fonction main (avant prototypes et les constantes globales.

Dans notre exemple, il faudrait déclarer le type tclient en dehors des fonctions pour pouvoir appeler permut.

Remarque: une structure peut aussi être la valeur retournée d'une fonction.

    Application



                                                                                                                                    3
S. Laporte                                                               Lycée Louise Michel BTS IG 1


Ecrire un programme qui permute les données concernant deux personnes caractérisées par leur nom, leur
prénom et leur date de naissance. La permutation est réalisée à l'aide d'une fonction void.

# include …

                                                            // déclaration du type utilisateur chaine
                                                            // déclaration de la structure date




                                                            // déclaration de la structure personne




//prototype (déclaration) de la fonction void permut
main( )
{
// déclaration et initialisation de 2 personnes



// appel de la fonction permut


// affichage pour vérification
cout << pers1.nom << " " << pers1.prenom <<" "<< pers1.ddn.jour << "/ " << pers1.ddn.mois <<"/ "<<
pers1.ddn.annee;
cout << pers2.nom << " " << pers2.prenom <<" "<< pers2.ddn.jour << "/ " << pers2.ddn.mois <<"/ "<<
pers2.ddn.annee;
}
// définition de la fonction void permut




                                                                                                        4
S. Laporte                                                                            Lycée Louise Michel BTS IG 1




    Exercice

Le but de cet exercice est d'écrire un petit programme qui permette de mémoriser et de traiter différentes informations sur les
équipes de rugby du tournoi des 6 nations (France, Angleterre, Pays de Galles, Irlande, Ecosse, Italie). Pour chaque nation, on
veut mémoriser le nom, le prénom et le poids de chacun des 15 joueurs de l'équipe (on ne tient pas compte des remplaçants).
Chaque joueur a un numéro de poste (de 1 à 15) qui détermine son rôle dans l'équipe (le numéro 1 est pilier gauche, le
numéro deux est talonneur, …).
Cette application devra dans un premier temps saisir les informations concernant tous les joueurs de la façon suivante:
France
joueur 1: Christian Califano 95
…
joueur 15: Thomas Castaignede 76

Angleterre
joueur 1: …


Une fois les informations saisies, l'application affiche
- le poids, le numéro de poste, le nom et le prénom du joueur le plus lourd, et la nation pour qui il joue, selon le modèle
suivant:

Avec 130 kg, le numéro 5 William Smith de l'equipe Angleterre est le joueur le plus lourd du tournoi
- le poids moyen des joueurs pour chacun des postes
les joueurs du poste 1 pèsent en moyenne 98 kg
les joueurs du poste 2 pèsent en moyenne 89 kg
…
les joueurs du poste 15 pèsent en moyenne 73 kg

Travail à Faire:
Après avoir choisi des structures de données appropriées pour mémoriser les informations, écrire en C++ le programme
demandé de façon modulaire.




                                                                                                                              5

Contenu connexe

Tendances

JAVA Chapitre6
JAVA Chapitre6JAVA Chapitre6
JAVA Chapitre6
Mohamed Ferchichi
 
JAVA Chapitre8
JAVA Chapitre8JAVA Chapitre8
JAVA Chapitre8
Mohamed Ferchichi
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
Sana REFAI
 
Ch02
Ch02Ch02
Ch02
yarsenv47
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
InforMatica34
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
Aziz Darouichi
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
Mariem ZAOUALI
 
Structure de Contrôle
Structure de Contrôle Structure de Contrôle
Structure de Contrôle
InforMatica34
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
coursuniv
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
Aziz Darouichi
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
Mariem ZAOUALI
 
Cours java script
Cours java scriptCours java script
Cours java script
AdelThaljaoui
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
InforMatica34
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
Aziz Darouichi
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage java
krymo
 
Caml intro
Caml introCaml intro
Caml intro
zan
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
Aziz Darouichi
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
Aziz Darouichi
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
Aziz Darouichi
 
Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithme
mustapha4
 

Tendances (20)

JAVA Chapitre6
JAVA Chapitre6JAVA Chapitre6
JAVA Chapitre6
 
JAVA Chapitre8
JAVA Chapitre8JAVA Chapitre8
JAVA Chapitre8
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
 
Ch02
Ch02Ch02
Ch02
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Structure de Contrôle
Structure de Contrôle Structure de Contrôle
Structure de Contrôle
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
Cours java script
Cours java scriptCours java script
Cours java script
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage java
 
Caml intro
Caml introCaml intro
Caml intro
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
 
Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithme
 

En vedette

Infopreneur
InfopreneurInfopreneur
Infopreneur
pprem
 
Usages du e-Portfolio 2.0 : Des enjeux aux perspectives
Usages du e-Portfolio 2.0 : Des enjeux aux perspectivesUsages du e-Portfolio 2.0 : Des enjeux aux perspectives
Usages du e-Portfolio 2.0 : Des enjeux aux perspectives
Philippe-Didier GAUTHIER
 
Ce qu'il faut faire en cours de gym
Ce qu'il faut faire en cours de gymCe qu'il faut faire en cours de gym
Ce qu'il faut faire en cours de gym
School
 
Semana 6
Semana 6Semana 6
Semana 6
cata92tor
 
Recette gâteau
Recette gâteau Recette gâteau
Recette gâteau
School
 
11 30 session 50
11 30 session 5011 30 session 50
11 30 session 50
nblock
 
Kulture(S) Web
Kulture(S) WebKulture(S) Web
Kulture(S) Web
Julien Devriendt
 
Exposition de couvertures de romans: projet scolaire (2014)
Exposition de couvertures de romans: projet scolaire (2014) Exposition de couvertures de romans: projet scolaire (2014)
Exposition de couvertures de romans: projet scolaire (2014)
gbadau
 
Pwd photos magnifiques1
Pwd photos magnifiques1Pwd photos magnifiques1
Pwd photos magnifiques1
eosorio
 
La peche aux chiffres
La peche aux chiffresLa peche aux chiffres
La peche aux chiffres
Jocelyn Prud'homme
 
Monte nativo
Monte nativoMonte nativo
Monte nativo
Andrea Tejera
 
Visite Du Louvre
Visite Du LouvreVisite Du Louvre
Visite Du Louvre
guestc35121
 
Bélesta sous la neige
Bélesta sous la neigeBélesta sous la neige
Bélesta sous la neige
guest05713b2
 
Présentation Réunion 5/1
Présentation Réunion 5/1Présentation Réunion 5/1
Présentation Réunion 5/1
jwarembourg
 
E-Portfolio 2.0 : un état des recherches sur les usages
E-Portfolio 2.0 : un état des recherches sur les usagesE-Portfolio 2.0 : un état des recherches sur les usages
E-Portfolio 2.0 : un état des recherches sur les usages
Philippe-Didier GAUTHIER
 
090723140418 03 Ri Annexe 2 Cf0910
090723140418 03 Ri Annexe 2 Cf0910090723140418 03 Ri Annexe 2 Cf0910
090723140418 03 Ri Annexe 2 Cf0910
khalfoun2
 
Article opinion clément delfour
Article opinion clément delfourArticle opinion clément delfour
Article opinion clément delfour
Caroline Marteuilh
 

En vedette (20)

Infopreneur
InfopreneurInfopreneur
Infopreneur
 
Usages du e-Portfolio 2.0 : Des enjeux aux perspectives
Usages du e-Portfolio 2.0 : Des enjeux aux perspectivesUsages du e-Portfolio 2.0 : Des enjeux aux perspectives
Usages du e-Portfolio 2.0 : Des enjeux aux perspectives
 
Cafen2310v2
Cafen2310v2Cafen2310v2
Cafen2310v2
 
Ce qu'il faut faire en cours de gym
Ce qu'il faut faire en cours de gymCe qu'il faut faire en cours de gym
Ce qu'il faut faire en cours de gym
 
Semana 6
Semana 6Semana 6
Semana 6
 
Recette gâteau
Recette gâteau Recette gâteau
Recette gâteau
 
Approvisionnement sur forêts privées et lots intramunicipaux
Approvisionnement sur forêts privées et lots intramunicipauxApprovisionnement sur forêts privées et lots intramunicipaux
Approvisionnement sur forêts privées et lots intramunicipaux
 
11 30 session 50
11 30 session 5011 30 session 50
11 30 session 50
 
Kulture(S) Web
Kulture(S) WebKulture(S) Web
Kulture(S) Web
 
Exposition de couvertures de romans: projet scolaire (2014)
Exposition de couvertures de romans: projet scolaire (2014) Exposition de couvertures de romans: projet scolaire (2014)
Exposition de couvertures de romans: projet scolaire (2014)
 
Pwd photos magnifiques1
Pwd photos magnifiques1Pwd photos magnifiques1
Pwd photos magnifiques1
 
La peche aux chiffres
La peche aux chiffresLa peche aux chiffres
La peche aux chiffres
 
Monte nativo
Monte nativoMonte nativo
Monte nativo
 
Visite Du Louvre
Visite Du LouvreVisite Du Louvre
Visite Du Louvre
 
Bélesta sous la neige
Bélesta sous la neigeBélesta sous la neige
Bélesta sous la neige
 
Pari Hebdo
Pari HebdoPari Hebdo
Pari Hebdo
 
Présentation Réunion 5/1
Présentation Réunion 5/1Présentation Réunion 5/1
Présentation Réunion 5/1
 
E-Portfolio 2.0 : un état des recherches sur les usages
E-Portfolio 2.0 : un état des recherches sur les usagesE-Portfolio 2.0 : un état des recherches sur les usages
E-Portfolio 2.0 : un état des recherches sur les usages
 
090723140418 03 Ri Annexe 2 Cf0910
090723140418 03 Ri Annexe 2 Cf0910090723140418 03 Ri Annexe 2 Cf0910
090723140418 03 Ri Annexe 2 Cf0910
 
Article opinion clément delfour
Article opinion clément delfourArticle opinion clément delfour
Article opinion clément delfour
 

Similaire à Les structures en c++

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SiratiSoufiane
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
MARYAM510573
 
Rappel_Structure programmatio. 2 smi.ppté
Rappel_Structure programmatio.  2 smi.pptéRappel_Structure programmatio.  2 smi.ppté
Rappel_Structure programmatio. 2 smi.ppté
JihadKhalili
 
Langage c partie_2
Langage c partie_2Langage c partie_2
Langage c partie_2
Mohamed Lahby
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
ImaneLoukili7
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
FadouaBouafifSamoud
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
AyoubElmrabet6
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
haythem_2015
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
FadouaBouafifSamoud
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdf
c79024186
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#
Youness Boukouchi
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
betalab
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
Tunisie collège
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
LamissGhoul1
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
WajihBaghdadi1
 
05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...
Hamza SAID
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
SergeOngolo
 

Similaire à Les structures en c++ (20)

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
Rappel_Structure programmatio. 2 smi.ppté
Rappel_Structure programmatio.  2 smi.pptéRappel_Structure programmatio.  2 smi.ppté
Rappel_Structure programmatio. 2 smi.ppté
 
Langage c partie_2
Langage c partie_2Langage c partie_2
Langage c partie_2
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdf
 
Ch13
Ch13Ch13
Ch13
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Ch08
Ch08Ch08
Ch08
 
05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...
 
TAD (1).pptx
TAD (1).pptxTAD (1).pptx
TAD (1).pptx
 
Chapitre 2
Chapitre 2Chapitre 2
Chapitre 2
 

Plus de Wael Ismail

Devoir de synthèse N°1
Devoir de synthèse N°1 Devoir de synthèse N°1
Devoir de synthèse N°1
Wael Ismail
 
Devoir de contrôle N°1 Système et réseaux 2011-2012
Devoir de contrôle N°1 Système et réseaux 2011-2012Devoir de contrôle N°1 Système et réseaux 2011-2012
Devoir de contrôle N°1 Système et réseaux 2011-2012
Wael Ismail
 
devoir de contrôle N° 1 TIC 2011-2012
devoir de contrôle N° 1 TIC 2011-2012devoir de contrôle N° 1 TIC 2011-2012
devoir de contrôle N° 1 TIC 2011-2012
Wael Ismail
 
Ch5 base de données
Ch5   base de donnéesCh5   base de données
Ch5 base de données
Wael Ismail
 
Ch3 eléments de présentation
Ch3   eléments de présentationCh3   eléments de présentation
Ch3 eléments de présentation
Wael Ismail
 
Ch1 traitement de texte
Ch1   traitement de texteCh1   traitement de texte
Ch1 traitement de texte
Wael Ismail
 
Les algorithmes d’approximation
Les algorithmes d’approximationLes algorithmes d’approximation
Les algorithmes d’approximation
Wael Ismail
 
Presentation algo-irem-2x2 (1)
Presentation algo-irem-2x2 (1)Presentation algo-irem-2x2 (1)
Presentation algo-irem-2x2 (1)
Wael Ismail
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)
Wael Ismail
 
Cours intro05 06
Cours intro05 06Cours intro05 06
Cours intro05 06
Wael Ismail
 

Plus de Wael Ismail (20)

Dc23 si
Dc23 siDc23 si
Dc23 si
 
Dc13 si
Dc13 siDc13 si
Dc13 si
 
Ds1
Ds1Ds1
Ds1
 
Dc23 si
Dc23 siDc23 si
Dc23 si
 
Dc2cc
Dc2ccDc2cc
Dc2cc
 
Dc2
Dc2Dc2
Dc2
 
Devoir de synthèse N°1
Devoir de synthèse N°1 Devoir de synthèse N°1
Devoir de synthèse N°1
 
Devoir de contrôle N°1 Système et réseaux 2011-2012
Devoir de contrôle N°1 Système et réseaux 2011-2012Devoir de contrôle N°1 Système et réseaux 2011-2012
Devoir de contrôle N°1 Système et réseaux 2011-2012
 
devoir de contrôle N° 1 TIC 2011-2012
devoir de contrôle N° 1 TIC 2011-2012devoir de contrôle N° 1 TIC 2011-2012
devoir de contrôle N° 1 TIC 2011-2012
 
Ch5 base de données
Ch5   base de donnéesCh5   base de données
Ch5 base de données
 
Ch4 internet
Ch4   internetCh4   internet
Ch4 internet
 
Ch3 eléments de présentation
Ch3   eléments de présentationCh3   eléments de présentation
Ch3 eléments de présentation
 
Ch2 tableur
Ch2  tableurCh2  tableur
Ch2 tableur
 
Ch1 traitement de texte
Ch1   traitement de texteCh1   traitement de texte
Ch1 traitement de texte
 
Les algorithmes d’approximation
Les algorithmes d’approximationLes algorithmes d’approximation
Les algorithmes d’approximation
 
Presentation algo-irem-2x2 (1)
Presentation algo-irem-2x2 (1)Presentation algo-irem-2x2 (1)
Presentation algo-irem-2x2 (1)
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)
 
L2006
L2006L2006
L2006
 
Jmc habile
Jmc habileJmc habile
Jmc habile
 
Cours intro05 06
Cours intro05 06Cours intro05 06
Cours intro05 06
 

Les structures en c++

  • 1. S. Laporte Lycée Louise Michel BTS IG 1 Les structures (enregistrements) Définitions et syntaxe Structure est le nom donné en C et C++ à ce qu'on appelle enregistrement en algorithmique. Ce nom peut porter à confusion car les structures ne représentent qu'un sous-ensemble des structures de données. Les tableaux sont aussi des structures de données mais ce ne sont pas des structures. Nous verrons l'année prochaine d'autres type de structures de données (comme les listes chaînées). Une structure (au sens enregistrement) permet de désigner sous un seul nom un ensemble de valeurs pouvant être de type différent. L'accès aux éléments d'une structure (appelés champs) ne se fait pas par un indice contrairement à l'accès aux éléments d'un tableau, mais par le nom du champ (précédé du nom de la structure et d'un point). Comme en algorithmique, il faut bien distinguer le type de structure de la structure elle- même. Une structure est une variable dont on a préalablement défini le type. Ainsi, pour déclarer une structure, deux étapes sont nécessaires: - définir1 le type de structure (appelé aussi modèle de structure, correspondant au type enregistrement) - déclarer une ou plusieurs variables de ce type, appelées structures ! Remarque: Dans certains ouvrages, vous trouverez écrit qu'une structure est un type et que les variables de ce type sont des variables structures ou variables structurées. Cela dépend des auteurs. L'important est de bien faire la distinction entre le type structuré et les variables de ce type. Syntaxe En C++ En algorithmique // déclaration (ou définition) du type de structure2 Type struct ttoto ttoto = enregistrement { tutu: entier int tutu; titi: réel float titi; finenreg }; // déclaration des structures du type ttoto(variables) Var ttoto toto1, toto2; toto1, toto2: ttoto Début // accès au champ titi de toto1 (pour affichage) … Aff toto1.titi cout << toto1.titi; Les champs d'une structure peuvent être de n'importe quel type, y compris d'un "type utilisateur" ou d'un autre type de structure. La seule contrainte est que les types des champs soient connus du compilateur. Les types crées par le programmeur doivent avoir été définis (déclarés) préalablement à leur utilisation comme type d'un champ. 1 dans le cas des types de structure, la déclaration correspond à la définition. On peut utiliser ces deux termes indifféremment 2 Cette syntaxe est valable en C++ mais pas en C où il faudrait utiliser typedef. Pour plus de renseignements, voir les différents ouvrages de C à la bibliothèque. 1
  • 2. S. Laporte Lycée Louise Michel BTS IG 1 ε Exemple Déclaration de 3 clients caractérisés par leur nom, leur prénom et leur adresse, composée d'un numéro de rue, d'un nom de rue, d'un code postal et d'une ville. Pour simplifier l'utilisation des chaines de caractères, on déclare tout d'abord un type utilisateur chaine typedef // définition d'un type chaine struct tadresse // déclaration d'un type de structure tadresse { num_rue; nom_rue; cp; ville; }; struct tclient // déclaration d'un type de structure tclient { nom; prenom; adresse; }; // déclarations des 3 clients Application Ecrire un programme en C++ qui saisit les caractéristiques de 2 personnes (nom, prénom, date de naissance) puis qui affiche le nombre d'années d'écart qui sépare la naissance de ces deux personnes (pour simplifier, on considère que deux personnes nées sur deux années différentes ont un an d'écart, même si l'une est née en janvier et l'autre en décembre). Vous pourrez utiliser la fonction abs( ) déclaré dans le fichier d'en-tête math.h. Les tableaux de structures Il est bien entendu possible de regrouper sous un même nom, plusieurs structures de même type pour former un tableau de structure. ε Exemple Déclaration d'un tableau de 20 clients: tclient client[20]; Application On suppose que le tableau client déclaré ci-dessus a été initialisé. Ecrire l'instruction qui permet d'afficher le nom, le prénom et l'adresse du quatrième client du tableau, sous la forme suivante: Pierre Dupond 12, rue Jean Monnet 93000 Bobigny 2
  • 3. S. Laporte Lycée Louise Michel BTS IG 1 Ecrire maintenant la séquence qui permettrait d'afficher ainsi tous les clients, séparés par une ligne. Passage d'une structure en paramètre d'une fonction et portée des types de structure Les structures, comme toutes variables, peuvent être passés en paramètre d'une fonction. L'intégralité de la structure est passée en paramètre, ce qui évite d'avoir à passer tous les champs uns à uns (cela est possible car l'affectation globale entre deux structures de même type est autorisée). Le mode de passage des structures est le même que les variables simples (contrairement aux tableaux): - par défaut, le passage s'effectue par valeur, donc la structure paramètre ne sera pas modifiée. - si la structure est un paramètre résultat ou un paramètre modifié, il faut alors utiliser le passage par référence (avec &). ε Exemple Voilà une fonction void qui permute les valeurs des champs de deux clients. Attention, pour que la permutation se fasse sentir sur les paramètres effectifs, il faut utiliser le passage par référence (paramètres en entrée/sortie) void permut (tclient & toto, tclient & titi) { tclient temp; // déclaration d'une personne temporaire pour la permutation temp = toto; // affectation globale possible entre 2 structures de même type toto = titi; titi = temp; } Attention à la portée des types de structures! Si le type de structure tclient est déclaré (défini) à l'intérieur du programme principal main( ), alors la fonction permut ne va pas fonctionner. En effet, la portée d'un type de structure (ou d'un type utilisateur) suit les mêmes règles que la portée d'une variable: - s'il est déclaré au sein d'une fonction (y compris main( ) bien entendu), il n'est accessible (utilisable) qu'au sein de cette fonction, même pas par les fonctions appelées. Il n'est donc pas possible de passer en paramètre à une autre fonction,.une structure déclarée en local - s'il est déclaré avant toute fonction, le type structuré est alors accessible par toutes les fonctions contenues dans le fichier source (y compris main( ) bien entendu). Dans ce cas, il est possible de passer une structure en paramètre d'une fonction. Ainsi, en général, les types structuré sont déclarés avant la fonction main (avant prototypes et les constantes globales. Dans notre exemple, il faudrait déclarer le type tclient en dehors des fonctions pour pouvoir appeler permut. Remarque: une structure peut aussi être la valeur retournée d'une fonction. Application 3
  • 4. S. Laporte Lycée Louise Michel BTS IG 1 Ecrire un programme qui permute les données concernant deux personnes caractérisées par leur nom, leur prénom et leur date de naissance. La permutation est réalisée à l'aide d'une fonction void. # include … // déclaration du type utilisateur chaine // déclaration de la structure date // déclaration de la structure personne //prototype (déclaration) de la fonction void permut main( ) { // déclaration et initialisation de 2 personnes // appel de la fonction permut // affichage pour vérification cout << pers1.nom << " " << pers1.prenom <<" "<< pers1.ddn.jour << "/ " << pers1.ddn.mois <<"/ "<< pers1.ddn.annee; cout << pers2.nom << " " << pers2.prenom <<" "<< pers2.ddn.jour << "/ " << pers2.ddn.mois <<"/ "<< pers2.ddn.annee; } // définition de la fonction void permut 4
  • 5. S. Laporte Lycée Louise Michel BTS IG 1 Exercice Le but de cet exercice est d'écrire un petit programme qui permette de mémoriser et de traiter différentes informations sur les équipes de rugby du tournoi des 6 nations (France, Angleterre, Pays de Galles, Irlande, Ecosse, Italie). Pour chaque nation, on veut mémoriser le nom, le prénom et le poids de chacun des 15 joueurs de l'équipe (on ne tient pas compte des remplaçants). Chaque joueur a un numéro de poste (de 1 à 15) qui détermine son rôle dans l'équipe (le numéro 1 est pilier gauche, le numéro deux est talonneur, …). Cette application devra dans un premier temps saisir les informations concernant tous les joueurs de la façon suivante: France joueur 1: Christian Califano 95 … joueur 15: Thomas Castaignede 76 Angleterre joueur 1: … Une fois les informations saisies, l'application affiche - le poids, le numéro de poste, le nom et le prénom du joueur le plus lourd, et la nation pour qui il joue, selon le modèle suivant: Avec 130 kg, le numéro 5 William Smith de l'equipe Angleterre est le joueur le plus lourd du tournoi - le poids moyen des joueurs pour chacun des postes les joueurs du poste 1 pèsent en moyenne 98 kg les joueurs du poste 2 pèsent en moyenne 89 kg … les joueurs du poste 15 pèsent en moyenne 73 kg Travail à Faire: Après avoir choisi des structures de données appropriées pour mémoriser les informations, écrire en C++ le programme demandé de façon modulaire. 5