Chapitre 7 - Enregistrements
Chapitre 7 - Enregistrements
Chapitre 7 - Enregistrements
1
Plan
2
Plan
3
Pourquoi une structure de données?
Problème : Programme plus complexe
Solution : Créer différents types de variables structurées : « types de
variables personnalisés » pour organiser la gestion de données.
Structure de données : les variables déclarées se distinguent par leur type
et par leur classe de stockage.
► Exemple en C :
struct personne
{
char nom[100];
char prenom[100];
char adresse[1000];
int age;
};
4
Définition
Contrairement aux tableaux qui sont des structures de données dont tous
les éléments sont de même type, les enregistrements sont des structures de
données dont les éléments peuvent être de types différents.
5
Syntaxe
Exemple Exemple
Type Type
Tpersonne=enregistrement Structure Tpersonne
nom: chaine[20] nom: chaine[20]
prenom: chaine[20] prenom: chaine[20]
age: entier age: entier
finenreg finStruct
6
Déclaration
Type
Structure tpersonne
nom: chaine[20]
âge: entier
finStruct
Syntaxe
Var
Nom_var : nom_type
Exemple
Var
Pers1, pers2, pers3 : tpersone
7
Accès aux champs d’un enregistrement
Nom_enregistrement. Nom_champ
Exemple
pers2.age
8
Imbrication d’enregistrements
Un type structure peut être utilise comme type pour des champs d'un autre
type de structure.
Type
Structure date
jour : entier
mois : chaine[20]
année : entier
finStruct
Type
Structure personne
nom : chaine[20]
ddn : date
finStruct
11
Plan
12
Définition d’une structure
Une structure est un regroupement d’objets qui ne sont pas nécessairement de
même type.
Syntaxe
struct étiquette
{
/* membres ou champs de la structure. */
};
Le mot struct permet de définir un nouveau type.
Exemple
struct temps
{
unsigned heures; //un membre de la structure temps
unsigned minutes;
double secondes;
};
13
Définition d’une variable de type structure
Syntaxe
struct étiquette identificateur;
Exemple 1 ► Exemple 2
#include <stdio.h> struct temps
struct temps {
unsigned heures;
{
unsigned minutes;
unsigned heures; double secondes;
unsigned minutes; }t1,t2;
double secondes;
};
void main()
{ struct temps t; }
14
Définition d’une variable de type structure
Exemple 3 ► Exemple 4
struct temps struct personne
{ {
unsigned heures; char nom[100];
unsigned minutes; char prenom[100];
double secondes; char adresse[1000];
}t1,t2; int age;
struct temps t3; };
struct personne p1,p2;
15
Représentation en mémoire
La norme impose aux objets de type structure les deux contraintes
suivantes :
o Les champs doivent être alloués selon leur ordre d’apparition dans la
structure ;
o L’adresse d’une structure correspond à l’adresse de son premier champ.
struct temps
{
unsigned heures; @m @m+1 @m+2
unsigned minutes; t heures minutes secondes
double secondes;
};
struct temps t;
16
Exemple
Un livre est caractérisé par les données suivantes :
<un titre , un code, un auteur, un éditeur, un prix>
On désire définir un type ouvrage tel que chaque élément de ce type soit caractérisé par ces
données.
struct ouvrage
{
char titre [20] ;
int code ;
char auteur [30] ;
char editeur [20] ;
float prix ;
}
17
Initialisation
L’initialisation d’une variable de type structure est effectuée à l’aide d’une liste
fournissant une valeur pour chaque membre de la structure.
Exemple 1 : Initialisation
struct temps t = { 1, 45, 30.560 };
Exemple 2 : Définition et initialisation
struct temps
{
unsigned heures;
unsigned minutes;
double secondes;
} t1 = { 1, 45, 30.560 };
18
Accès à un membre de la structure
L’accès à un membre d’une structure est effectué via la variable de type structure et
de l’opérateur « . » suivi du nom du membre concerné.
Syntaxe
variable.membre
La même syntaxe est utilisée pour récupérer la valeur d’un membre et pour modifier
son contenu.
Exemple
struct temps t = { 1, 45, 30.560 };
ou
t.heures = 1;
t.minutes = 45;
t.secondes = 30.560;
19
Accès à un membre de la structure : Exemple
20
Portée / Visibilité d’une structure
La définition d’une structure de données peut être circonscrite à un bloc afin
de limiter sa portée (visibilité).
Exemple
void main()
{
struct temps
{
unsigned heures;
unsigned minutes;
double secondes;
};
struct temps t1 = { 1, 45, 30.560 };
struct temps t2;
}
21
Exercice
Ecrire deux mesures de temps sous la forme heure(s):minute(s):seconde(s) puis
afficher la différence en seconde entre celles-ci.
#include <stdio.h>
struct temps
{ unsigned heures;
unsigned minutes;
double secondes;
};
void main()
{ struct temps t1; struct temps t2;
printf("Première mesure (hh:mm:ss) : ");
scanf("%u:%u:%lf", &t1.heures, &t1.minutes, &t1.secondes);
printf("Deuxième mesure (hh:mm:ss) : ");
scanf("%u:%u:%lf", &t2.heures, &t2.minutes, &t2.secondes);
t1.minutes += t1.heures * 60; t1.secondes += t1.minutes * 60;
t2.minutes += t2.heures * 60; t2.secondes += t2.minutes * 60;
printf("Il y a %.3f seconde(s) de différence.\n", t2.secondes - t1.secondes);
}
22
Pointeur de Structure
23
Accès via un pointeur
L’opérateur d’adressage & peut s’appliquer aussi bien à une structure qu’à
un de ses membres.
Exemple
struct temps t;
// un pointeur p pointant sur la structure t
struct temps *p = &t;
26
Accès via un pointeur : Exemple
27
Tableaux de structures
Etant donné qu'une structure est composée d'éléments de taille fixe, il est
possible de créer un tableau ne contenant que des éléments du type d'une
structure donnée.
Syntaxe
struct Nom_Structure Nom_Tableau[Nb_Elements];
Exemple
#define MAX_PERS 100
struct personne
{
char genre ;
float taille, poids ;
};
struct personne pers[MAX_PERS] ;
int nbPers ; /* le nombre effectif de personnes*/
28
Tableaux de structures : Exemple
29
Structure de structures
Un des membres de la structure peut être lui-même une structure de données.
Exemple
struct complex
{
int imag_value;
float real_value;
};
struct number
{ struct complex comp;
int real;
} num1, num2;
//struct number num1, num2;
num2.comp.imag_value;
30
Alias de structure
Une structure de données peut être définit dans le fichier header.
L’ajout de l’ instruction typedef permet de créer un alias de structure
utiliser le nouveau type de données sans le mot clé « struct »
Exemple 1
typedef unsigned long ulong;
typedef struct
{
int x;
int y;
}Coordonnees;
void main()
{ Coordonnees C; }
31
Exercice
Ecrire une fonction qui permet de saisir un tableau de livres au clavier.
32
Exercice
Ecrire une fonction qui permet de saisir un ouvrage au clavier selon la
structure précédente.
Ecrire une fonction qui permet d’afficher un livre selon la structure précédente.
void affich_livre2(ouvrage l)
{
puts (l.titre) ;
printf ("%d",l.code) ;
puts (l.auteur) ;
puts (l.editeur) ;
printf ("%f",l.prix) ;
printf ("%d",l.date_edition.jour) ;
puts (l.date_edition.mois);
printf ("%d",l.date_edition.annee) ;
}
34
Exercice
Si on veut ajouter un tableau indiquant le nombre de sorties du livre pour
chaque jour du mois :
typedef struct
{
char titre[20] ;
int code ;
char auteur[30] ;
char editeur[20] ;
float prix ;
date date_edition ;
int nb_sorties[31] ;
}ouvrage ;
35
Exercice