Vous êtes sur la page 1sur 39

Module: ALGORITHMIQUE 1

Chapitre 7: Les Enregistrements

Niveaux: 1A
Equipe ALGO

Année universitaire:
2022/2023

1
Objectifs Spécifiques
A la fin de ce chapitre, l’étudiant sera capable de :

▪ Comprendre le type Enregistrement


▪ Manipuler un enregistrement: lecture, écriture, affichage ,etc.
▪ Manipuler des tableaux d’enregistrements.
▪ Comprendre les enregistrements de taille variable.

2
Problématique
▪ Les variables que nous avons jusqu’au présent utilisées ne se constituent
que d’un seul type de donnée (Entier, Réel, Caractère, etc.).

▪ Les tableaux constituent une extension puisque nous y déclarons une


variable composée de plusieurs éléments de même type.

Est-il possible de déclarer un type qui regroupe différents types de données?


Solution

Le type Enregistrement ou Structure

Exemple: Date
30 Jour

Octobre Mois

2022 Année
Définition

▪ Un enregistrement est une structure de données qui sert à mémoriser, dans une
même variable, un nombre fini d'éléments (appelées aussi Champs ou
Rubriques) de types hétérogènes (non nécessairement de même type).

▪ Une variable de type enregistrement est dite une variable composée.

▪ A titre d’exemple, une date, une adresse ou un nombre complexe peuvent être
considérés comme des enregistrements.
Déclaration d’un Enregistrement
Un type enregistrement doit être déclaré dans la partie réservée aux types, selon la convention
algorithmique suivante :
TYPE
Nom_type = ENREGISTREMENT
Nom_rubrique1 : type_rubrique1
Nom_rubrique2 : type_rubrique2
Nom_rubrique3 : type_rubrique3
………….
………….
Nom_rubriqueN : type_rubriqueN
FinEnregistrement
VARIABLE
Nom_variable : Nom_type
Remarque :
Si certaines rubriques ont le même type, on peut les déclarer ensemble en les séparant par des virgules et en mentionnant
une seule fois le type.
Déclaration d’un Enregistrement
Exemple 1 : Déclaration de l’enregistrement étudiant

TYPE
Etudiant = ENREGISTREMENT
Nom : Chaîne [20]
Prénom: Chaîne [30]
CIN : entier
Age : entier
FinEnregistrement
VARIABLE
E : Etudiant

L’espace réservé pour E aura l’allure suivante:


Déclaration d’un Enregistrement
Exemple 2 : Déclaration d’un nombre complexe

TYPE
Complexe = Enregistrement
Préel : réel
Pimaginaire : réel
FinEnregistrement
VARIABLE
C : Complexe
Accès aux Rubriques
▪ Pour accéder aux rubriques d’un enregistrement, on doit effectuer tout d’abord une
opération de lecture, écriture, affectation, etc.

▪ Cet accès peut être global ou partiel:

Dans le cas où l’accès est global, on utilise Nom_variable.

Dans le cas où l’accès se fait à une rubrique, on utilise:

Nom_variable.Nom_rubrique
Lecture
a) Globale : Lire(E) cette primitive va lire en un seul coup les différentes rubriques de l’enregistrement
Étudiant.

La saisie s’effectuera comme suit : Tounsi Mohamed 123456 35.


On remarque qu’une telle saisie n’est pas conviviale.

b) Partielle : la lecture se fait rubrique par rubrique. On l’utilise généralement pour une saisie conviviale.
Dans notre exemple, la saisie de l’enregistrement Étudiant se fera alors :

Lire(E.Nom) (* on lira alors le nom Tounsi *)


Lire(E.Prénom) (* on lira alors le prénom Mohamed *)
Lire(E.CIN) (* on lira alors le numéro CIN 123456 *)
Lire(E.Age) (* on lira alors l’age 35 *)
Écriture
a) Globale : Ecrire(E) est une primitive qui affiche les valeurs des différentes rubriques d’une
manière assemblée ; elle peut être utilisée si jamais on veut écrire dans un fichier.

b) Partielle : L’écriture se fait rubrique par rubrique. Dans notre exemple, on peut afficher
l’enregistrement étudiant après l’avoir saisi, rubrique par rubrique selon la syntaxe suivante :

Ecrire (Nom_variable.Nom_rubrique)

Écrire (E.Nom) (* on affichera alors le nom Tounsi*)


Écrire (E.Prénom) (* on affichera alors le prénom Mohamed *)
Écrire (E.CIN) (* on affichera alors le numéro CIN 123456 *)
Écrire (E.Age) (* on affichera alors l’age 35 *)
Affectation
a) Globale : il s’agit dans ce cas d’affecter les valeurs prises par les rubriques dans une autre
variable qui doit avoir obligatoirement le même type que Nom_variable.
On suppose que E et E1 sont de variables de type Étudiant, et dans ce cas on peut effectuer une
affectation totale:
E1 E
on aura alors,
E1= Tounsi Mohamed 123456 35
b) Partielle : l’affectation peut se faire partiellement c’est à dire rubrique par rubrique, selon la
syntaxe suivante :

Nom_variable.Nom_rubrique = Nom_variable1.Nom_rubrique
Affectation
Supposons que l’on souhaite copier un enregistrement dans une autre variable.

Sachant que E et E1 sont deux variables de type Étudiant ; on peut écrire :

E1.Nom E.Nom E1.Nom ‘Tounsi’


E1.Prénom E.Prénom Ce qui donne E1.Prénom ‘Mohamed’
E1.CIN E.CIN E1.CIN 123456
E1.Age E.Age E1.Age 35
Exercice d’application 1
Déclarer un Enregistrement Voiture ayant les informations suivantes :
Matricule (chaîne de caractères)
Marque (chaîne de caractères)
Couleur (chaîne de caractères)
Catégorie : (smart ou non smart)
1. Déclarer V de type Voiture.
2. Saisir puis afficher les informations de V.
Algorithme Voiture Répéter
Type Ecrire (‘‘Categorie’’)
Voiture=enregistrement Lire(V.Categorie)
Matricule : chaine [20] Jusqu'à ((V.Categorie =’smart’) ou
Marque : chaine [20] (V.Categorie = ‘non smart’))
Couleur : chaine [20] (*Affichage des informations de la voiture*)
Categorie: chaine [10] Ecrire (V.Matricule, V.Marque, V.couleur,
FinEnregistrement V.Categorie)
Variable Fin
V : Voiture
Début
(* Saisie des informations de la voiture V *)
Ecrire(‘‘Matricule’’)
Lire(V.Matricule)
Ecrire (‘‘Marque ’’)
Lire(V.Marque)
Ecrire(‘‘couleur’’)
Lire(V.couleur)
15
Enregistrement comportant des variables composées
( Enregistrement et Tableau)
Un Enregistrement peut contenir aussi des champs de type complexe: Tableau et Enregistrement.
Exemple: Enregistrement contenant un champs de type tableau

Constante Nmax = 5 Affichage de valeurs aux champs de cette variable :


TYPE
Ecrire(‘nom: ‘, E.nom)
Tab = Tableau [1..Nmax] de reel
Etudiant= Enregistrement Ecrire(‘prénom: ‘, E.prénom)
nom, prenom : Chaîne [20] Ecrire(‘âge: ‘, E.age)
age: entier
Pour i de 1 à 5 faire
Note: tab
FinEnregistrement Ecrire(‘note’, i ,‘est: ‘, E.note[i])
Variable Fin Pour
E :Etudiant
Remarque: L’ordre de déclaration de nouveaux types est très important!
Exercice d’application 2
Ecrire un algorithme qui permet de :
1- Saisir deux étudiants sachant que l’étudiant est caractérisé par son
nom, son prénom, son âge et un tableau de 5 notes.
2- Comparer les moyennes de deux étudiants.
Exercice d’application 2: Solution
Algorithme Algorithme (Suite)
Algorithme Etudiants Ecrire(‘nom E2: ‘) Lire(E2.nom)
Ecrire(‘prénom E2: ‘) Lire(E2.prénom)
Type Ecrire(‘âge E2: ‘) Lire(E2.âge)
Pour i de 1 à 5 faire
Tab= tableau [1..5] de réel
Ecrire(‘Note ’, i ) Lire(E2.notes[i])
Etudiant = Enregistrement Fin Pour
nom : chaine[20] Moy1 0
prénom : chaine [20] Moy2 0
Pour i de 1 à 5 faire
âge: entier Moy1 Moy1 + E1.notes[i]
notes: Tab Moy2 Moy2 + E2. notes [i]
FinEnregistrement Fin Pour
Variables Moy1 Moy1 / 5
Moy2 Moy2 / 5
E1,E2: Etudiant Si (Moy1 > Moy2) alors
Ecrire (E1.nom, ‘a la moyenne la plus elevée’)
i: entier
Sinon
Moy1, Moy2: réel Si (Moy1<Moy2) alors
Debut Ecrire (E2.nom, ‘a la moyenne la plus elevée’)
Ecrire(‘nom E1: ‘) Lire(E1.nom) Sinon
Ecrire (‘les deux etudiants ont la même moyenne)
Ecrire(‘prénom E1: ‘) Lire(E1.prénom)
Fin Si
Ecrire(‘âge E1: ‘) Lire(E1.âge)
Fin Si
Pour i de 1 à 5 faire
Ecrire(‘Note ’, i ) Lire(E1.notes[i]) Fin
Fin Pour
Enregistrement comportant des variables composées
( Enregistrement et Tableau)
Exemple: Enregistrement contenant un champs de type enregistrement
Constante Nmax = 5
TYPE
Tab = Tableau [1..Nmax] de Reel
Date = Enregistrement
Jour , Mois, Annee : entier
FinEnregistrement
Etudiant= Enregistrement
nom, prenom : Chaîne [20]
Date_naissance : Date
Note: tab
FinEnregistrement
Variable
E :Etudiant
Remarque: L’ordre de déclaration de nouveaux types est très important!
Accès aux Rubriques
Pour accéder au jour, mois et année de naissance :
▪ E.Date_naissance.Jour
Nom Prenom DateNaissane Notes

TOUNSI Mohamed 1
▪ E.Date_naissance.Mois E 10
16,5 12 18

2021
▪ E.Date_naissance.Année

Ecrire (E.Date_naissance.Annee): Afficher l’année de naissance de l’étudiant


E.
Exercice d’application 3
Dans une Banque, un client est reconnu par son :
-Nom
-Prénom
-Adresse (numéro, avenue, ville, pays, code postale, téléphone)
-Numéro de compte
-Solde
-Tableau contenant l’historique des transactions.
1- Déclarer l’enregistrement client.
2- Ecrire un algorithme permettant de saisir les informations relatives à un client
et de les afficher.
21
Solution
Constante Nmax = 100 Début
Type Ecrire(‘‘programme de gestion d’une banque’’)
Domicile= Enregistrement (*saisie de données *)
Ecrire(‘**********Information du client ******** ’)
Avenue,ville, pays : chaine [20]
Ecrire(‘‘entrer le nom du client :’’)
Numero, code_postale: entier Lire(C.nom)
Téléphone : chaine [10] Ecrire(‘‘entrer le prénom du client :’’)
Lire(C.Pr)
FinEnregistrement Ecrire(‘‘entrer le numéro du compte:’’)
Transaction=chaine[30] Lire(C.num)
Ecrire(‘‘entrer l’adresse du client :’’)
Tab = Tableau [1..Nmax] de Transaction
Lire(C.Adr.Avenue,C.Adr.ville,
Client=enregistrement
C.Adr.pays,C.Adr.Numero,C.Adr.code_postale, C.Adr.Téléphone)
nom : chaine [15]
Pr : chaine [20] Ecrire(‘‘entrer le solde du client :’’)
Adr:Domicile Lire(C.solde)
Ecrire(‘‘**********Historique transactions********’’)
Num_compte : Entier
Répéter
Solde : réel Lire (n)
Historique: Tab Jusqu’à (n>0) ET (n<=Nmax)
FinEnregistrement Pour i allant de 1 à n faire
Variable lire (C.Historique[i])
Finpour
C: Client
22
n, i: entier
Solution (suite)
Ecrire(‘‘**********Affichage information Client********’’)
Ecrire(‘‘Nom du client :’’, C.nom)
Ecrire(‘‘Prénom du client :’’, C.Pr)
Ecrire(‘‘Numéro du compte:’’, C.num)
Ecrire(‘‘ Adresse du client :’’, C.Adr.Avenue,C.Adr.ville,
C.Adr.pays, C.Adr.Numero, C.Adr.code_postale, C.Adr.Téléphone)

Ecrire(‘‘***Affichage information Client: Historique ***’’)


Pour i allant de 1 à n faire
Ecrire (C.Historique[i])
Finpour

23
PARTIE II

24
Tableau d’Enregistrements
C’est un tableau dont les cases sont des enregistrements.

Constante Nmax=100
TYPE
Nom_type 1= ENREGISTREMENT
Nom_rubrique1 : type_rubrique1
Nom_rubrique2 : type_rubrique2
………….
………….
Nom_rubriqueN : type_rubriqueN
FinEnregistrement
Nom_type 2= Tableau[1..Nmax] de Nom_type 1
VARIABLE
Nom_variable : Nom_type 2
25
Tableau d’enregistrements
Exemple: Un tableau d’au plus 100 étudiants est un tableau dont les cases sont de types Etudiant, il est déclaré comme
suit :
Constante N = 20, NMAX=100
TYPE
Tab = Tableau [1..N] de Réel Accès : Nom_Tableau[i].Nom_rubrique
Date = Enregistrement
jour , mois, annee : entier T[i].nom
FinEnregistrement
T[i].prénom
Etudiant= Enregistrement
nom, prenom : Chaîne [20] T[i].Note[j]
date_naissance : Date
T[i].date_naissance.jour
Note: Tab
FinEnregistrement T[i].date_naissance.mois
Tetud = Tableau[1..NMAX] de Etudiant
T[i].date_naissance.annee
Variable
T: TEtud
i: entier 26
Application 3
On considère que la fiche d’un étudiant est définie par les informations suivantes :
nom, prénom, age, cin, tel et adresse.
Ecrire un algorithme permettant de remplir un tableau de N étudiants, de rechercher un
étudiant de cin donnée et afficher son nom, prénom et adresse.

27
Application 3
Algorithme fiche_etudiant Début
Constante
NMAX=100 Répéter
Type Lire (n)
Jusqu'à ((n>=1) et (n ≤ NMAX))
(*Déclaration enregistrement Domicile*)
Pour i allant de 1 à n faire
Domicile= Enregistrement Lire (T[i].nom, T[i].prenom, T[i].age, T[i].tel,T[i].cin)
Avenue,ville,pays : chaine [20] Lire ( T[i]. Adresse.Avenue, T[i]. Adresse.ville, T[i]. Adresse.pays,
Numero,code_postale : entier T[i]. Adresse.Numero, T[i]. Adresse.code_postal)
FinEnregistrement Fin pour
Lire (cin)
(*Déclaration enregistrement étudiant*) i 1
Tant que ((T[i].cin <> cin) et (i<=n)) faire
Etudiant=Enregistrement i i+1
Nom, prénom : chaine [20] Fin Tant que
Age : entier Si (i<=n) alors
cin : entier Ecrire (T[i].nom, T[i].prenom, T[i]. Adresse.Avenue, T[i].
Tel : entier Adresse.ville, T[i]. Adresse.pays, T[i]. Adresse.Numero, T[i].
Adresse : Domicile Adresse.code_postal)
finEnregistrement Else
Ecrire (‘‘élément non trouvé’’)
Etud=tableau [1..NMAX ] d’étudiant Finsi
Variable
T : Etud Fin
I, n :entier 28
Notion de Générateur
Quand on affecte des valeurs aux rubriques d’un enregistrement, on dit qu’on a obtenu un
Générateur.

▪ Un générateur est mathématiquement une classe de la relation enregistrement.

▪ C’est l’ensemble de valeurs que peuvent avoir à un instant donné, les différentes
rubriques d’un enregistrement.
Notion de Générateur
▪ Si on revient à l’exemple de l’enregistrement Étudiant, les informations
suivantes :

Tounsi,Mohamed,123456,35 constituent un générateur de l’enregistrement


Étudiant.

▪ Les valeurs d’un générateur sont délimitées par deux parenthèses :

G1 = (‘Ben Mohamed’,’Mohamed’,123456,35)

▪ Avec un enregistrement, on peut représenter plusieurs générateurs; mais à un


instant donné, il ne peut contenir qu’un seul générateur.
Enregistrement de taille variable
Problématique : On souhaite gérer les informations concernant les salariés d’une entreprise
qui diffèrent d’une catégorie à une autre. En voici les informations à implémenter :
Matricule du salarié, Nom du salarié, Prénom du salarié, Date de naissance du salarié, État
civil du salarié et la catégorie.
- Si le salarié est permanent, on indique le salaire de base et le montant des indemnités.
-Si le salarié est occasionnel, on indique le coût horaire, le nombre d’heures travaillées.
- Si le salarié est marié, on indique le nom et le prénom du conjoint ainsi que le nombre
d’enfants.
- Si le salarié est célibataire, on indique s’il est en règle avec le service militaire.

Question : Proposer une structure de données appropriée à cet énoncé ?


Enregistrement de taille variable
Solution : On va déclarer un type enregistrement appelé Salarié qui comportera les rubriques suivantes :
CONSTANTE
N = 200
TYPE
Salarie = ENREGISTREMENT
Matricule : entier
Nom, Prénom : chaine[20]
Date_naissane : chaine[20]
État_civil : caractère (* Marié : M , Célibataire : C *)
Catégorie : caractère (* Permanent : P , Occasionnel : O *)
Salaire_base : réel
Indemnités : réel
Nom_conjoint, Prénom_conjoint : chaine[20]
Nombre_enfant : entier
Coût_horaire : réel
Nombre_heures : réel
Service_militaire : Booléen
FinEnregistrement

Tab_Salarie = Tableau[1..N] de Salarie


Enregistrement de taille variable
▪ Si on déclare un tableau de salariés, chaque élément du tableau est censé comporter les
informations relatives à un salarié.

▪ On remarque à première vue, que les rubriques de part et d’autre ne sont pas totalement
remplies : cela s’explique par le fait, qu’en fonction des spécificités de chaque salarié on ne
remplit que les cases permises.

▪ On est alors en présence de cases vides et ne pouvant plus être exploitées !


Enregistrement de taille variable
▪ Une telle situation n’est pas appréciable.

▪ L’idéal est que chaque générateur occupe uniquement les cases qui lui
sont allouées.

▪ Pour ce faire, il faut alors utiliser une structure qui peut varier en fonction
des spécificités de chaque générateur.

▪ Une telle structure existe et elle est appelée : Enregistrement Variable.

Un enregistrement est dit variable si lors de sa définition certaines


rubriques ne peuvent apparaître que sous condition(s).
Déclaration d’un Enregistrement de taille variable
TYPE
Nom_type = ENREGISTREMENT
Nom_rubrique1 : type_rubrique1
Nom_rubrique2 : type_rubrique2
Nom_rubrique3 : type_rubrique3
……………..
……………..
Nom_rubrique_variable : type_rubrique_variable

SELON (type_rubrique_variable) FAIRE


Val1_type_rubrique_variable :
Nom_rubrique_v1 : type_rubrique_v1
Nom_rubrique_v2 : type_rubrique_v2
Nom_rubrique_v3 : type_rubrique_v3
Val2_type_rubrique_variable :
Nom_rubrique_v1 : type_rubrique_v1
Nom_rubrique_v2 : type_rubrique_v2
Nom_rubrique_v3 : type_rubrique_v3
………
………
FINSELON
FINENREGISTREMENT
Déclaration d’un Enregistrement de taille variable
Exemple de l’enregistrement Salarié
CONSTANTE
N = 200
TYPE
Salarie = ENREGISTREMENT
Matricule : entier
Nom, Prénom : chaine[20]
Date_naissane : chaine[12]
Catégorie : caractere
État_civil : caractere
SELON (État_civil ) FAIRE
‘M’ : Nom_conjoint, Prénom_conjoint : chaine[20]
Nombre_enfant : entier
‘C’ : Service_militaire : Booléen
FINSELON
SELON (Categorie) FAIRE
‘P’ : Salaire_base : réel
Indemnités : réel
‘O’ : Coût_horaire : réel
Nombre_heures : réel
FINSELON
FINENREGISTREMENT

Tab_Salarie = Tableau[1..N] de Salarie


Déclaration d’un Enregistrement de taille variable
Représentation des deux générateurs
Avant :
G1(123,’Ali’,’Med’,’1164’,’M’,’P’,’Med’,’Alia’,1, ,500 ,250)
G2(456,’Med’,’Sobhi’,’1155’,’C’,’O’, , , , , ,3.200,70,Oui)

En utilisant, l’enregistrement variable, on aura :


G1(123,’Ali’,’Med’,’1164’, ’M’,’P’,’Med’,’Alia’,1,500,250)
G2(456,’Med’,’Sobhi’,’1155’, ’C’,’O’, l, 3.200,70,Oui)

Remarques
▪ On voit maintenant que les deux générateurs ne comportent plus de cases vides.
▪ On voit également clair que les deux générateurs G1 et G2 sont de tailles variables.
▪ Dans un enregistrement variable, on doit tout d’abord déclarer la partie fixe puis on définit la partie
variable.
▪ Attention, il ne faut pas confondre entre le SELON vu dans le chapitre Structures Conditionnelles et le
SELON vu dans ce chapitre : le premier concerne des instructions ; quant au deuxième il concerne des
variables.
Accès aux Rubriques
En prenant les deux générateurs de l’exemple, on va essayer d’accéder à chacune de leur rubrique :
G1(123,’Ali’,’Med’,’1164’,Marié,Permanent,’Med’,’Alia’,1)
G2(456,’Med’,’Sobhi’,’1155’,Célibataire,Occasionnel,3.200,70,Oui)
TYPE
Salarie = ENREGISTREMENT
Matricule : entier
Nom, Prénom : chaine[20]
Date_naissane : chaine[12]
Catégorie : caractere
État_civil : caractere
SELON (État_civil ) FAIRE
‘M’ : Nom_conjoint, Prénom_conjoint : chaine[20]
Nombre_enfant : entier
‘C’ : Service_militaire : Booléen
FINSELON
SELON (Categorie) FAIRE
‘P’ : Salaire_base : réel
Indemnités : réel
‘O’ : Coût_horaire : réel
Nombre_heures : réel
FINSELON
FINENREGISTREMENT
VARIABLE S : Salarie
Accès aux Rubriques
Pour un salarié permanent et marié, Pour un salarié occasionnel et célibataire,
on aura : on aura :
S.Matricule 123 S.Matricule 456
S.Nom ‘Ali’ S.Nom ‘Med’
S.Prénom ‘Med’ S.Prénom ‘Sobhi’
S.Date_naissane ’05-09-1987’
S.Date_naissane ’05-09-1987’
S.Etat_civil ‘M’
S.Etat_civil ‘C’
S.Catégorie ‘P’
S.Catégorie ‘O’
S.Nom_conjoint ‘Med’
S.Service_militaire Vrai
S.Prénom_conjoint ‘Alia’
S.Nombre_enfant 1 S.Coût_horaire 3.200
S.Salaire_base 500 S.Nombre_heures 70
S.Indemnités 250

Vous aimerez peut-être aussi