Les types structurés et les enregistrements

1/8
100%

Chapitre : 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 .

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

nom\_champ1: type\_champ1

&

nom\_champn: type\_champn

finenreg

(notation inspir e du C)

Type

Structure nom\_type

nom\_champ1: type\_champ1

&

nom\_champN: type\_champN

FinStruct

Exemple:

-Pascal

Type

tpersonne = enregistrement

nom : cha ne

pr nom : chaine

ge : entier

finenreg

-en C

Publicité

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.

Syntaxe

Var

nom\_var : nom\_type

Exemple:

Var

pers1, pers2, pers3 : tpersonne

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.

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

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

Publicité

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

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

Aff "produit: ", x.lib

Aff "prix de vente hors taxe actuel: ", x.pvht

Aff "Entrez le nouveau prix de vente: "

Publicité

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.

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

Publicité

FinStruct

Structure Produit

code: cha ne

lib: cha ne

paht: r el

pvht: r el

txtva: r el

frs: fournisseur

FinStruc

Var

p: produit

Voil l'instruction qui permet d'afficher le num ro de t l phone du fournisseur du produit p.frs.tel

Aff "t l phone du fournisseur de ", p.lib, " : ", p.frs.tel

III. Les tableaux d'enregistrement

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.

Const

NP = 20 // nombre de personnes du groupe

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

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

Les types structurés et les enregistrements

Programming, Data Structures · course

Browse all programmation documents

Chapitre : 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 .

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

nom\_champ1: type\_champ1

&

nom\_champn: type\_champn

finenreg

(notation inspir e du C)

Type

Structure nom\_type

nom\_champ1: type\_champ1

&

nom\_champN: type\_champN

FinStruct

Exemple:

-Pascal

Type

tpersonne = enregistrement

nom : cha ne

pr nom : chaine

ge : entier

finenreg

-en C

Advertisement

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.

Syntaxe

Var

nom\_var : nom\_type

Exemple:

Var

pers1, pers2, pers3 : tpersonne

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.

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

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

Advertisement

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

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

Aff "produit: ", x.lib

Aff "prix de vente hors taxe actuel: ", x.pvht

Aff "Entrez le nouveau prix de vente: "

Advertisement

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.

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

Advertisement

FinStruct

Structure Produit

code: cha ne

lib: cha ne

paht: r el

pvht: r el

txtva: r el

frs: fournisseur

FinStruc

Var

p: produit

Voil l'instruction qui permet d'afficher le num ro de t l phone du fournisseur du produit p.frs.tel

Aff "t l phone du fournisseur de ", p.lib, " : ", p.frs.tel

III. Les tableaux d'enregistrement

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.

Const

NP = 20 // nombre de personnes du groupe

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

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