S. Laporte
Chap 6 Enregistrements
Lyc e Louise Michel BTS IG 1
Chapitre 6: les types structur s et les enregistrements
Introduction
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 type diff rent et qui se rapportent
la m me entit (au sens de Merise)
Les l ments qui composent un enregistrement sont appel s champs.
Avant de d clarer une variable enregistrement, il faut avoir au pr alable d finit son type, c'est dire le nom et le type
des champs qui le compose. Le type d'un enregistrement est appel type structur . (Les enregistrements sont parfois
appel structures, en analogie avec le langage C)
Pr alable: d claration d'un type structur
Jusqu' pr sent, nous n'avons utilis que des types primitifs (caract res, entiers, r els, cha nes) et des tableaux de types
primitifs. Mais nous pouvons cr er nos propres types puis d clarer des variables ou des tableaux d' l ments de ce type.
Pour cr er des enregistrements, il faut d clarer un nouveau type, bas sur d'autres types existants, qu'on appelle type
structur Apr s avoir d fini un type structur , on peut l'utiliser comme un type normal en d clarant une ou plusieurs
variables de ce type. Les variables de type structur sont appel es enregistrements.
La d claration des types structur s se fait dans une section sp ciale des algorithmes appel e Type, qui pr c de la section
des variables (et succ de la section des constantes).
Syntaxes :
(notation inspir e du Pascal)
Type
nom_type = enregistrement
(notation inspir e du C)
ou
Type
Structure nom_type
nom_champ1: type_champ1
&
nom_champn: type_champn
finenreg
nom_champ1: type_champ1
&
nom_champN: type_champN
FinStruct
Exemple:
Type
tpersonne = enregistrement
nom : cha ne
pr nom : chaine
ge : entier
finenreg
ou
Type
Structure tpersonne
nom : cha ne
pr nom : cha ne
ge : entier
FinStruct
I. D claration d'un enregistrement partir d'un type structur
Une fois qu'on a d fini un type structur , on peut d clarer des variables enregistrements exactement de la
m me fa on que l'on d clare des variables d'un type primitif.
1
S. Laporte
Chap 6 Enregistrements
Lyc e Louise Michel BTS IG 1
Syntaxe
Advertisement
Var
nom_var : nom_type
Exemple:
Var
pers1, pers2, pers3 : tpersonne
Repr sentation:
les enregistrements sont compos s de plusieurs zones de donn es, correspondant aux champs
pers1.nom
pers1.age
pers1
pers2
pers2.nom
pers2.age
Exemple:
Soit l'entit suivante:
PRODUIT
l gende:
code
lib
paht
pvht
txtva
code: code alphanum rique du produit
lib: lib ll
paht: prix d'achat hors taxes
pvht: prix de vente hors taxes
txtva: taux de TVA applicable
Voici comment d clarer deux occurrences (variables enregsitrements) du type structur correspondant
cette entit .
// Il faut d'abord d finir le type structur correspondant:
Type
produit = enregistrement
ou
code: cha ne
lib: cha ne
paht: r el
pvht: r el
txtva: r el
finenreg
Type
Structure produit
code: cha ne
lib: cha ne
paht: r el
pvht: r el
txtva: r el
FinStruct
// Ensuite il est possible de d clarer deux variables de ce type
Var
prod1, prod2 : produit
II. Manipulation d'un enregistrement
La manipulation d'un enregistrement se fait au travers de ses champs. Comme pour les tableaux,
il n'est pas possible de manipuler un enregistrement globalement, sauf pour affecter un enregistrement
un autre de m me type. Par exemple, pour afficher un enregistrement il faut afficher tous ses champs
uns par uns.
2
S. Laporte
Chap 6 Enregistrements
Advertisement
Lyc e Louise Michel BTS IG 1
A. Acc s aux champs d'un enregistrement
Alors que les l ments d'un tableau sont accessibles au travers de leur indice, les champs d'un
enregistrement sont accessibles travers leur nom, gr ce l'op rateur '.'
nom_enregistrement . nom_champ
repr sente la valeur m moris e dans le champ de l'enregistrement
Par exemple, pour acc der l' ge de la variable pers2, on utilise l'expression:
pers2. ge
(cid:1)Attention : le nom d'un champ est TOUJOURS pr c d du nom de l'enregistrement auquel il
appartient. On ne peut pas trouver un nom de champ tout seul, sans indication de l'enregistrement.
Les champs d'un enregistrement, tout comme les l ments d'un tableau, sont des variables qui on
peut faire subir les m mes op rations (affectation, saisie, affichage,&).
Exemple 1:
Programme de saisie des donn es concernant les personnes pers1 et pers2, puis affichage de la
diff rence d' ge entre ces deux personnes
Programme Exemple
Type
Structure tpersonne
nom : cha ne
pr nom : cha ne
ge : entier
FinStruct
Var
pers1, pers2 : tpersonne
D but
Aff "Entrez le nom puis l'age de la personne 1"
Saisir pers1.nom, pers1.age // il est impossible d' crire Saisir pers1
Aff "Entrez le nom puis l' ge de la personne 2"
Saisir pers2.nom, pers2.age
Aff "La diff rence d' ge entre ", pers1.nom, " et ", pers2.nom, " est de "
Si pers1.age > pers2.age
Alors Aff pers1.age pers2.age, " ans "
Sinon Aff pers2.age pers1.age, " ans "
FinSi
Fin
B. Passage d'un enregistrement en param tre d'un sous-programme
Il est possible de passer tout un enregistrement en param tre d'une fonction ou d'une proc dure (on
n'est pas oblig de passer tous les champs uns uns, ce qui permet de diminuer le nombre de
param tres passer), exactement comme pour les tableaux.
Exemple :
Voil une fonction qui renvoie la diff rence d'age entre deux personnes
3
S. Laporte
Chap 6 Enregistrements
Lyc e Louise Michel BTS IG 1
Fonction diff rence (p1, p2 : tpersonne)
D but
Si pers1.age > pers2.age
Alors Retourne ( pers1.age pers2.age )
Sinon Retourne ( pers2.age pers1.age )
FinSi
FinFonct
Exemple 2 :
Voil une proc dure qui permet de modifier le prix de vente hors taxes d'un produit pass en
param tre. Cette proc dure commence par afficher le libell et l'ancien prix de vente hors taxes du
produit puis saisit le nouveau prix de vente entr par l'utilisateur.
Proc dure majpv (E/S x: produit)
D but
Advertisement
Aff "produit: ", x.lib
Aff "prix de vente hors taxe actuel: ", x.pvht
Aff "Entrez le nouveau prix de vente: "
Saisir x.pvht
Aff "le nouveau prix de vente est: ", x.pvht
FinProc
B. L'imbrication d'enregistrements
Supposons que dans le type personne, nous ne voulions plus l' ge de la personne, mais sa date de
naissance. Une date est compos e de trois variables (jour, mois, ann e) indissociables. Une date
correspond donc une entit du monde r el qu'on doit repr senter par un type enregistrement 3
champs.
Si on d clare le type date au pr alable, on peut l'utiliser dans la d claration du type personne pour le
type de la date de naissance.
Un type structur peut tre utilis comme type pour des champs d'un autre type structur
TYPE
Structure date
jour: entier
mois: cha ne
ann e: entier
FinStuct
Structure personne
nom: cha ne
ddn: date
FinStruct
Pour acc der l'ann e de naissance d'une personne, il faut utiliser deux fois l'op rateur '.'
pers1.ddn.ann e
Il faut lire une telle variable de droite gauche : l'ann e de la date de naissance de la personne 1.
4
S. Laporte
Chap 6 Enregistrements
Lyc e Louise Michel BTS IG 1
Exemple Complet
Un produit (cf. ex pr c dents) est livr par un seul fournisseur. Un fournisseur est caract ris par son code, sa
raison sociale et son num ro de t l phone.
Type
Structure adresse
num : entier
rue: cha ne
cp: cha ne
ville: cha ne
FinStruct
Structure fournisseur
code_frs : chaine
raison_sociale: chaine
ad_frs: adresse
tel: chaine
FinStruct
Structure Produit
code: cha ne
lib: cha ne
paht: r el
pvht: r el
txtva: r el
frs: fournisseur
FinStruct
Var
p: produit
Voil l'instruction qui permet d'afficher le num ro de t l phone du fournisseur du produit p.frs.tel
Advertisement
Aff "t l phone du fournisseur de ", p.lib, " : ", p.frs.tel
Voil le MCD correspondant. D duisez en la correspondance entre l'imbrication des enregistrements
et le type d'association entre 2 entit s.
PRODUIT
code
lib
paht
pvht
txtva
1,1
est livr par
FOURNISSEUR
0,n
code_frs
raison_sociale
tel
Fournisseur qui est en d pendance fonctionnelle sur produit est imbriqu dans produit.
De fa on g n rale, une entit 1 en d pendance fonctionnelle sur une autre entit 2 est repr sent e en
programmation par un type structur imbriqu dans le type structur correspondant l'entit 1.
5
S. Laporte
Chap 6 Enregistrements
Lyc e Louise Michel BTS IG 1
III. Les tableaux d'enregistrement (ou tables)
Il arrive souvent que lon veuille traiter non pas un seul enregistrement mais plusieurs. Par exemple,
on veut pouvoir traiter un groupe de personne. On ne va donc pas cr er autant de variables du type
personne quil y a de personnes. On va cr er un tableau regroupant toutes les personnes du groupe. Il
sagit alors dun tableau denregistrements.
// nombre de personnes du groupe
Const
NP = 20
Type
Structure personne
nom: cha ne
age: entier
FinStruct
Var
groupe: tableau[1..NP] de personnes
Chaque l ment du tableau est un enregistrement, contenant plusieurs variables de type diff rent. On
acc de un enregistrement par son indice dans le tableau.
groupe[2] repr sente la deuxi me personne du groupe
groupe[2].nom repr sente le nom de la deuxi me personne du groupe
nom
ge
nom des champs
1
2
3
4
5
indices du tableau
Attention!
groupe.nom[3] n'est pas valide.
Pour acc der au nom de la troisi me personne du tableau, il faut crire g roupe[3].nom
6