TD 01 Enregistrementss

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 28

Université Benyoucef Benkhadda - Alger 1

Faculté des Sciences - Département MI

Algorithmes et structure de données


TD : Partie I : les enregistrements
1ère Année MI
Semestre 2

Présenté par : Mme TOUIL


Rappel : Les enregistrements
Rappel :

1- Définition : un enregistrement est un type de données défini par


l’utilisateur et permet de regrouper un nombre fini d’éléments (ou
champs) de types différents.

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;

- Utilisation pour une action de lecture :

En algorithmique : lire(variable.champ) ;
En C : scanf(‘’%d’’|’’ %f’’|’’ %c’’,&variable.champ);

M. TOUIL 4
Rappel : Les enregistrements
Exemple :

En algorithmique

ecrire(‘’donner le matricule de l’etudiant’’); lire(Etudiant.matricule);


ecrire(‘‘donner le nom de l’etudiant’’); lire(Etudiant.nom);

En C

printf(‘’donner le matricule de l’etudiant’’);


scanf(‘ %d’,&Etudiant.matricule);
printf(‘’donner le nom de l’etudiant’’);
scanf(‘ %c’,&Etudiant.nom);

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.

Type TEMPS = Enregistrement


H, M, S: entier ;
Fin;

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.

Procédure SommeT (E/ T1,T2 :TEMPS ; S/ T :TEMPS);


Var
X : entier ;
Début
X←T1.S+T2.S;
T.S←X MOD 60; {Le MODULO est le reste de la division}
T.M← X DIV 60; {Le DIV est le quotient de la division}
X← T.M + T1.M + T2.M;
T.M← X MOD 60;
T.H← X DIV 60+ T1.H+T2.H;
Fin;

M. TOUIL 10
Les enregistrements : Exercice 2

c- Ecrire une fonction TRANSFORM qui transforme un temps T de type TEMPS


en un entier S qui exprime ce temps en secondes.

Exemple : pour T=2 heures 10 minutes 37 secondes, S=7837 secondes.

Fonction TRANSFORM (T : TEMPS) : entier ;


Début
TRANSFORM ← T.S+60*T.M+3600*T.H;
Fin ;

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

Procedure DECOMPOS(E/ S : entier ; S/ T :TEMPS) ;


Début
T.H←S DIV 3600 ;
S← S MOD 3600 ;
T.M←S DIV 60 ;
T.S← S MOD 60 ;
Fin;

M. TOUIL 12
Les enregistrements : Exercice 2

e- Etant donnés deux temps T1 et T2 de type TEMPS, écrire un algorithme qui


calcule le temps T somme des temps T1 et T2 (T, T1 et T2 sont de type
TEMPS) en utilisant les actions TRANSFORM et DECOMPOS.

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.

Ecrire un algorithme qui permet de :


1. Saisir les informations concernant des étudiants.
2. Afficher les informations saisies et afficher le résultat concernant
chaque étudiant sachant que le résultat est soit ADM ou AJN (selon
moyenne<10 ou non)
3. Afficher la moyenne générale des étudiants

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

Vous aimerez peut-être aussi