You are on page 1of 6

S.

Laporte

Chap 6 Enregistrements

Lyce Louise Michel BTS IG 1

Chapitre 6: les types structurs et les enregistrements

Introduction
Contrairement aux tableaux qui sont des structures de donnes dont tous les lments sont de mme type, les enregistrements sont des structures de donnes dont les lments peuvent tre de type diffrent et qui se rapportent la mme entit (au sens de Merise) Les lments qui composent un enregistrement sont appels champs. Avant de dclarer une variable enregistrement, il faut avoir au pralable dfinit 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)

Pralable: dclaration d'un type structur


Jusqu' prsent, nous n'avons utilis que des types primitifs (caractres, entiers, rels, chanes) et des tableaux de types primitifs. Mais nous pouvons crer nos propres types puis dclarer des variables ou des tableaux d'lments de ce type. Pour crer des enregistrements, il faut dclarer un nouveau type, bas sur d'autres types existants, qu'on appelle type structur Aprs avoir dfini un type structur, on peut l'utiliser comme un type normal en dclarant une ou plusieurs variables de ce type. Les variables de type structur sont appeles enregistrements. La dclaration des types structurs se fait dans une section spciale des algorithmes appele Type, qui prcde la section des variables (et succde la section des constantes).

Syntaxes : (notation inspire du Pascal) Type

nom_type = enregistrement nom_champ1: type_champ1 nom_champn: type_champn finenreg Exemple:


Type

(notation inspire du C) ou Type

Structure nom_type nom_champ1: type_champ1 nom_champN: type_champN FinStruct


ou

tpersonne = enregistrement nom : chane prnom : chaine ge : entier finenreg

Type Structure tpersonne nom : chane prnom : chane ge : entier FinStruct

I. Dclaration d'un enregistrement partir d'un type structur


Une fois qu'on a dfini un type structur, on peut dclarer des variables enregistrements exactement de la mme faon que l'on dclare des variables d'un type primitif.

S. Laporte

Chap 6 Enregistrements

Lyce Louise Michel BTS IG 1

Syntaxe
Var

nom_var : nom_type Exemple:


Var

pers1, pers2, pers3 : tpersonne


Reprsentation: les enregistrements sont composs de plusieurs zones de donnes, correspondant aux champs
pers1.nom pers1.age

pers1
pers2.nom pers2.age

pers2

Exemple: Soit l'entit suivante:

PRODUIT code lib paht pvht txtva

lgende:
code: code alphanumrique du produit lib: libll paht: prix d'achat hors taxes pvht: prix de vente hors taxes txtva: taux de TVA applicable

Voici comment dclarer deux occurrences (variables enregsitrements) du type structur correspondant cette entit. // Il faut d'abord dfinir le type structur correspondant: Type ou Type produit = enregistrement Structure produit code: chane code: chane lib: chane lib: chane paht: rel paht: rel pvht: rel pvht: rel txtva: rel txtva: rel finenreg FinStruct // Ensuite il est possible de dclarer 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 mme type. Par exemple, pour afficher un enregistrement il faut afficher tous ses champs uns par uns.

S. Laporte

Chap 6 Enregistrements

Lyce Louise Michel BTS IG 1

A. Accs aux champs d'un enregistrement


Alors que les lments d'un tableau sont accessibles au travers de leur indice, les champs d'un enregistrement sont accessibles travers leur nom, grce l'oprateur '.' nom_enregistrement . nom_champ reprsente la valeur mmorise dans le champ de l'enregistrement Par exemple, pour accder l'ge de la variable pers2, on utilise l'expression: pers2.ge Attention : le nom d'un champ est TOUJOURS prcd 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 lments d'un tableau, sont des variables qui on peut faire subir les mmes oprations (affectation, saisie, affichage,). Exemple 1: Programme de saisie des donnes concernant les personnes pers1 et pers2, puis affichage de la diffrence d'ge entre ces deux personnes Programme Exemple Type Structure tpersonne nom : chane prnom : chane ge : entier FinStruct Var pers1, pers2 : tpersonne Dbut 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 diffrence 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 paramtre d'un sous-programme


Il est possible de passer tout un enregistrement en paramtre d'une fonction ou d'une procdure (on n'est pas oblig de passer tous les champs uns uns, ce qui permet de diminuer le nombre de paramtres passer), exactement comme pour les tableaux. Exemple : Voil une fonction qui renvoie la diffrence d'age entre deux personnes

S. Laporte

Chap 6 Enregistrements

Lyce Louise Michel BTS IG 1

Fonction diffrence (p1, p2 : tpersonne) Dbut Si pers1.age > pers2.age Alors Retourne ( pers1.age pers2.age ) Sinon Retourne ( pers2.age pers1.age ) FinSi FinFonct

Exemple 2 : Voil une procdure qui permet de modifier le prix de vente hors taxes d'un produit pass en paramtre. Cette procdure 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. Procdure majpv (E/S x: produit) Dbut 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 compose de trois variables (jour, mois, anne) indissociables. Une date correspond donc une entit du monde rel qu'on doit reprsenter par un type enregistrement 3 champs. Si on dclare le type date au pralable, on peut l'utiliser dans la dclaration 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: chane anne: entier FinStuct

Structure personne nom: chane ddn: date FinStruct Pour accder l'anne de naissance d'une personne, il faut utiliser deux fois l'oprateur '.' pers1.ddn.anne Il faut lire une telle variable de droite gauche : l'anne de la date de naissance de la personne 1.

S. Laporte

Chap 6 Enregistrements

Lyce Louise Michel BTS IG 1

Exemple Complet Un produit (cf. ex prcdents) est livr par un seul fournisseur. Un fournisseur est caractris par son code, sa raison sociale et son numro de tlphone.

Type
Structure adresse num : entier rue: chane cp: chane ville: chane FinStruct Structure fournisseur code_frs : chaine raison_sociale: chaine ad_frs: adresse tel: chaine FinStruct Structure Produit code: chane lib: chane paht: rel pvht: rel txtva: rel frs: fournisseur FinStruct

Var p: produit Voil l'instruction qui permet d'afficher le numro de tlphone du fournisseur du produit p.frs.tel Aff "tlphone du fournisseur de ", p.lib, " : ", p.frs.tel

Voil le MCD correspondant. Dduisez en la correspondance entre l'imbrication des enregistrements et le type d'association entre 2 entits.
PRODUIT code lib paht pvht txtva
1,1 FOURNISSEUR code_frs raison_sociale tel

est livr par

0,n

Fournisseur qui est en dpendance fonctionnelle sur produit est imbriqu dans produit. De faon gnrale, une entit 1 en dpendance fonctionnelle sur une autre entit 2 est reprsente en programmation par un type structur imbriqu dans le type structur correspondant l'entit 1.

S. Laporte

Chap 6 Enregistrements

Lyce 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 crer autant de variables du type personne quil y a de personnes. On va crer un tableau regroupant toutes les personnes du groupe. Il sagit alors dun tableau denregistrements. Const NP = 20 Type Structure personne nom: chane age: entier FinStruct Var groupe: tableau[1..NP] de personnes Chaque lment du tableau est un enregistrement, contenant plusieurs variables de type diffrent. On accde un enregistrement par son indice dans le tableau. groupe[2] reprsente la deuxime personne du groupe groupe[2].nom reprsente le nom de la deuxime personne du groupe nom
1 2 3 4 5

// nombre de personnes du groupe

ge

nom des champs

indices du tableau Attention! groupe.nom[3] n'est pas valide. Pour accder au nom de la troisime personne du tableau, il faut crire g roupe[3].nom

You might also like