Chapitre 6 : Les types structurés et les enregistrements

Page 1 sur 6Lecteur de document UniversityLib

Chapitre 6 : Les types structurés et les enregistrements

Programmation et algorithmique · course

Voir tous les documents en programmation

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

Publicité

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

Publicité

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

Publicité

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

Publicité

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