TD 01 Enregistrementss
TD 01 Enregistrementss
TD 01 Enregistrementss
2- Déclaration :
Type nom_enreg= enregistrement
champ_1 : type_1; c’est la déclaration du type de
--- --- l’enregistrement
champ_n: type_n;
fin;
VAR identificateur_obj : nom_enreg; déclaration des objets
utilisant ce type,
M. TOUIL 2
Rappel : Les enregistrements
3- Utilisation :
- Utilisation pour une action d’affectation : L'affectation de valeurs aux
différents champs d'une variable de type enregistrement se fait par une
opération de type.
En algorithmique : variable.champ ← valeur ;
En C : variable.champ = valeur ;
Exemple :
1- déclaration en algorithme : en C :
Type Fiche = enregistrement struct Fiche{
matricule : Entier; int matricule ;
nom, prénom : Chaîne ; char nom[20],prenom[20] ;
sexe : Caractère; char sexe ;
moyenne : Réel float moyenne;
Fin; };
Etudiant: Fiche; Fiche Etudiant;
enregistrement pour une fiche d’un étudiant
M. TOUIL 3
Rappel : Les enregistrements
Exemple : 2- affectation des valeurs à la variable Etudiant
En algorithme : En C :
Etudiant.matricule ← 152022232; Etudiant.matricule = 152022232;
Etudiant.nom ← ’’BENBERNA’’; Etudiant.nom = ’’BENBERNA’’;
Etudiant.prenom ← ’’HICHEM’’; Etudiant.prenom = ’’HICHEM’’;
Etudiant.sexe ← ’’M’’; Etudiant.sexe = ’’M’’;
Etudiant.moyenne ← 12,50; Etudiant.moyenne = 12,50;
En algorithmique : lire(variable.champ) ;
En C : scanf(‘’%d’’|’’ %f’’|’’ %c’’,&variable.champ);
M. TOUIL 4
Rappel : Les enregistrements
Exemple :
En algorithmique
En C
M. TOUIL 5
Rappel : Les enregistrements
- Utilisation pour une action d’écriture:
En algorithmique : ecrire(variable.champ);
En C : printf (‘’%f|%d |%c’’,variable.champ);
Exemple :
En algorithmique
ecrire(‘’ le matricule de l’etudiant ’’); ecrire(Etudiant.nom);
ecrire(‘‘ est : ’’); ecrire(Etudiant.matricule);
En C
printf(‘’le matricule de l’etudiant %c est : %d’’,Etudiant.nom,Etudiant.matricule);
M. TOUIL 6
Rappel : Les enregistrements
- Vecteur d'enregistrements :
Un tableau ne peut grouper ou contenir que des éléments de même type,
et puisque les éléments d'un enregistrement sont de même type qui est
celui de l'enregistrement, donc on peut utiliser un tableau ou un vecteur
d'enregistrements.
Exemple :
1- déclaration en algorithme : en C :
Type Fiche = enregistrement struct Fiche {
matricule : Entier; int matricule ;
nom, prénom : Chaîne ; char nom[20],prenom[20] ;
sexe : Caractère; char sexe ;
moyenne : Réel float moyenne;
Fin; } ;
Etudiant: tableau[1..100] de Fiche; Fiche Etudiant[100];
M. TOUIL 7
Rappel : Les enregistrements
Exemple :
Type Fiche = enregistrement
matricule : Entier;
nom, prénom : Chaîne ;
sexe : Caractère;
moyenne : Réel
Fin;
Etudiant: tableau[1..100] de Fiche;
M. TOUIL 8
Les enregistrements : Exercice 2
a- Définir un type TEMPS qui contient les champs heure, minute, seconde.
M. TOUIL 9
Les enregistrements : Exercice 2
b- Ecrire une action paramétrée qui réalise la somme T de deux durées T1
et T2 de type temps.
M. TOUIL 10
Les enregistrements : Exercice 2
M. TOUIL 11
Les enregistrements : Exercice 2
d- Ecrire une procédure DECOMPOS qui décompose un temps S exprimé en
secondes en un temps T de type TEMPS.
Exemple : pour S=7837 secondes, T=2 heures 10 minutes 37 secondes
M. TOUIL 12
Les enregistrements : Exercice 2
M. TOUIL 13
Les enregistrements : Exercice 2
Algorithme CalculTemps;
{Type TEMPS = Enregistrement
H, M, S: entier ;
Fin
Var
T1,T2, T :TEMPS ; S : entier ;
Début
Ecrire ("Donner le Temps T1 : H M S") ;
Lire(T1.H) ; Lire (T1.M) ;Lire (T1.S) ;
Ecrire ("Donner le Temps T2 : H M S") ;
Lire (T2.M) ; Lire(T2.H) ;Lire (T2.S) ;
S← TRANSFORM(T1) + TRANSFORM(T2); {transformer T1 et T2 en secondes}
DECOMPOS(S, T); {Décomposer S en TEMPS T}
Ecrire ("La somme de T1 et T2 donne : ",T.H, " : ",T.M, " : ",T.S);
Fin.
M. TOUIL 14
Les enregistrements : Exercice 1
Ecrire un programme qui permet de gérer un ensemble d'étudiants (<=
100). Chaque étudiant est décrit par son identifiant, son nom, son
prénom, son âge et sa moyenne.
M. TOUIL 15
Les enregistrements : Exercice 1
Algorithme ETUDI
{Définition du type étudiant}
Type Etudiant = Enregistrement
Nom : chaine de caractères [50] ;
Prénom : chaine de caractères [50] ;
Age, Id : entier ;
Moyenne : réel ;
Fin
Var
Etud : tableau [100] de Etudiant ;
i, n : entier ;
SomMoy : réel ;
Début
.
.
M. TOUIL 16
Les enregistrements : Exercice 1
Début
Répéter
Ecrire ("Donnez le nombre total des Etudiant, n=") ;
Lire (n) ;
Jusqu'à (n<=100) ET (n>0);
SomMoy ←0 ;
{Saisir les informations concernant des étudiants}
Pour (i←1 à n)
Faire
Etud[i].Id←i ; {l’identifiant de l’étudiant est un numéro séquentiel}
{ou bien Ecrire ("Donnez l’identifiant de l’étudiant numéro: ", i) ; Lire(Etud[i].Id);}
Ecrire ("Donnez le Nom de l’étudiant numéro: ", i) ;
Lire (Etud[i].Nom) ;
Ecrire ("Donnez le Prénom de l’étudiant numéro: ", i) ;
Lire (Etud[i].Prénom) ;
Répéter
Ecrire ("Donnez l’âge de l’étudiant numéro: ", i, "Age entre 16 et 70") ;
Lire (Etud[i].Age) ;
Jusqu'à (Etud[i].Age <=70) ET (Etud[i].Age >=16);
M. TOUIL 17
Les enregistrements : Exercice 1
Répéter
Ecrire ("Donnez la moyenne de l’étudiant numéro: ", i) ;
Lire (Etud[i]. Moyenne) ;
Jusqu'à (Etud[i]. Moyenne >=0) ET (Etud[i]. Moyenne <=20);
{calcule de la moyenne de la section}
SomMoy ← SomMoy + Etud[i].Moyenne ;
Fait ;
{Afficher la moyenne générale des étudiants}
Ecrire ("La moyenne générale des étudiants ", SomMoy/n) ;
{Afficher les informations saisies et afficher le résultat concernant chaque étudiant}
Pour (i←1 à n )
Faire
Ecrire ("Les informations concernant l’étudiant numéro: ", i);
Ecrire (Etud[i].Nom, ’’ ‘’,Etud[i].Prénom,’’ ‘’,Etud[i].Age,’’ ans ‘’, Etud[i]. Moyenne) ;
Si (Etud[i]. Moyenne>=10)
Alors Ecrire (‘’ ADM") ;Sinon Ecrire (" AJN") ;
FinSi ;
Fait ;
Fin
M. TOUIL 18
Les enregistrements : Exercice 3
1- Soit un enregistrement E défini par deux informations :
• T un tableau d’entiers pouvant contenir au maximum 100 éléments;
• N le nombre d’éléments du tableau T
2- Soit une chaîne de caractères M, écrire une action paramétrée qui
retourne un enregistrement de type E contenant toutes les positions de la
chaîne ‘ab‘ dans la chaîne M.
{Définition du type E}
Type E = Enregistrement
T : tableau [100] entier ; {les positions de la chaine ab}
N: entier ; {nombre de positions de la chaine ab}
Fin
M. TOUIL 19
Les enregistrements : Exercice 3
Procedure ABPosition (E/ M : chaine [256], Lc : entier ; S/ P : E) ;
Var
I, J : entier ;
Début
I←1 ;
J←1 ;
P.N←0 ;
Tant que (I< =Lc)
Faire Si (M[I]=’a’ ET M[I+1]=’b’)
Alors P.T[J] ←I ; P.N← P.N+1 ; J←J+1 ; I←I+2 ;
Sinon I←I+1 ;
Fsi ;
Fait ;
Fin ;
M. TOUIL 20
Les enregistrements : Exercice 3
Algorithme Exo3;
Type E = Enregistrement
T : tableau [100] entier ; {les positions de la chaine ab}
N: entier ; {nombre de positions de la chaine ab}
Fin;
Var
Pos: E; Longchaine: entier; M: chaine[256];
Debut
Ecrire (‘donner la chaine à tester :’); Lire(M);
I←1; Longchaine ← 0;
Tant que M[I]<>’\0’
Faire Longchaine ← Longchaine +1;
I ← I+1;
Fait;
ABPosition(M, Longchaine, Pos);
pour (I ←1 à Pos.N
Faire ecrire ( Pos.T[I],’’ ‘’);
Fait;
Fin.
M. TOUIL 21
Les enregistrements : Exercice 4
Considérons les types d’enregistrements suivants :
Type Date = Enregistrement
Jour, mois, année : entier ;
Fin;
Adresse = Enregistrement
Numéro : entier ;
Rue : chaine [50] ;
Ville , Wilaya : chaine [20] ;
Fin;
Enseignant = Enregistrement
Nom, prenom : chaine [20] ;
Date_naiss : date ;
Residence : Adresse ;
Grade : chaine [10] ;
Année_de_recrutement: entier ;
Fin;
M. TOUIL 22
Les enregistrements : Exercice 4
Ecrire un algorithme permettant de :
a. Remplir un vecteur T de N enseignants (N<=100).
b. Afficher à partir de T les adresses des enseignants nés avant une
année de naissance donnée.
c. Afficher les noms et les prénoms des enseignants résidant de la
ville de ‘Zeralda‘ de la wilaya d’‘Alger‘.
d. Editer le nombre d’enseignants par année de recrutement. (Année
du premier recrutement est 2015).
M. TOUIL 23
Les enregistrements : Exercice 4
Algorithme Exo4 ;
Type Date = Enregistrement
Jour, mois, année : entier ;
Fin;
Type Adresse = Enregistrement
Numéro : entier ;
Rue : chaine [50] ;
Ville , Wilaya : chaine de caractères [20] ;
Fin;
Type Enseignant = Enregistrement
Nom, Prénom : chaine de caractères [20] ;
Date_naiss : Date;
Residence : Adresse;
Grade: chaine de caractères [10] ;
Année_de_recrutement: entier ;
Fin;
Var
T : Tableau [100] d’Enseignant;
M. TOUIL 24
Les enregistrements : Exercice 4
M. TOUIL 25
Les enregistrements : Exercice 4
Var
T : Tableau [100] d’Enseignant;
I, N, Ann, cpt : entier ;
Début
Repeter
Ecrire ("Donner le nombre d’enseignant N") ;Lire(N) ;
Jusqu’à (N>0) ET (N≤100);
{Lecture des informations propres aux enseignants}
Pour I←1 à N pas 1
Faire
Ecrire ("Donnez les informations de l’enseignant numéro: ", I , " : ") ;
Ecrire(‘’Nom :’’);Lire (T[I]. Nom) ; Ecrire ("Prénom : ") ; Lire (T[I]. Prénom) ;
Ecrire ("Date de naissance : ") ;
Lire (T[I].Date_naiss.Jour,T[I].Date_naiss.mois,T[I].Date_naiss.année) ;
Ecrire ("Adresse : ");
Lire (T[I].Rsidence.Numéro, T[I].Residence.Rue, T[I].Residence.Ville, T[I].Residence.Wilaya) ;
Ecrire ("Grade : "); Lire (T[I]. Grade) ;
Ecrire ("Année de recrutement : "); Lire (T[I]. Année_de_recrutement) ;
Fait ;
M. TOUIL 26
Les enregistrements : Exercice 4
{Affichage des adresses des enseignants nés avant une année Ann donnée}
Ecrire ("Donner une Année") ;
Lire(Ann) ;
Pour I←1 à N pas 1
Faire
Si (T[I]. Date_naiss.année < Ann)
Alors
Ecrire ("l’enseignant", T[I]. Nom, " ", T[I]. Prénom, "dont l’adresse est " ,
T[I].Residence.Numéro, " ", T[I]. Residence. Rue, " ", T[I]. Residence. Ville,
" ", T[I]. Residence. Wilaya, " est né avant l’année : ", Ann) ;
FinSi;
Fait ;
{les noms et les prénoms des enseignants résidant de la ville de Zeralda de la wilaya d’Alger}
Pour (I←1 à N)
Faire
Si ( (T[I].Residence.Ville="Zeralda") ET (T[I].Residence.Wilaya="Alger") )
Alors Ecrire ("l’enseignant", T[I].Nom, " ", T[I].Prénom, "réside dans la ville de
Zeralda – wilaya d’Alger ") ;
FinSi;
Fait;
M. TOUIL 27
Les enregistrements : Exercice 4
{ Editer le nombre d’enseignants par année de recrutement. (Année du premier recrutement
est 2015).}
Pour (Ann ←2015 à 2020 )
Faire
cpt←0 ;
Pour (I←1 à N)
Faire
Si (T[I]. Année_de_recrutement =Ann)
Alors cpt←cpt +1 ;
FinSi;
Fait ;
Ecrire ("Le nombre des enseignants recrutés en : ", Ann, " est de : ", cpt);
Fait ;
Fin.
M. TOUIL 28