Professional Documents
Culture Documents
Laporte
Chap 6 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)
S. Laporte
Chap 6 Enregistrements
Syntaxe
Var
pers1
pers2.nom pers2.age
pers2
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
S. Laporte
Chap 6 Enregistrements
S. Laporte
Chap 6 Enregistrements
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
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
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
ge
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