Correction : Structures de données (Université)
Const N_Etud = 1000 ;
Const N_Ens = 100 ;
Type Date = Enregistrement
jour : entier ;
mois : entier ;
annee : entier ;
Fin ;
Type Etudiant = Enregistrement
matriculeEtud : chaine de caractere ;
nom : chaine de caractere ;
prenom : chaine de caractere ;
age : entier ;
sexe : caractere ;
villeEtud : chaine de caractere ;
filliereEtud : chaine de caractere ;
nivEtud : entier ;
Fin ;
Type Enseignant = Enregistrement
matriculeEns : chaine de caractere ;
grade : chaine de caractere ;
nom : chaine de caractere ;
prenom : chaine de caractere ;
age : entier ;
sexe : caractere ;
dateNaiss : Date ;
equipeR : chaine de caractere ;
villeEns : chaine de caractere ;
Fin ;
Type tabEtud = tableau[1..N_Etud] de Etudiant ;
Type tabEns = tableau[1..N_Ens] de Enseignant ;
Correction : Fonctions / Procédures demandées
IMPORTANT (règle d’insertion en tableau fixe) : avant tout ajout, on doit chercher une case vide en testant l’identifiant unique : matriculeEtud = '' (vide) ou matriculeEns = '' (vide). Si aucune case vide n’existe, le tableau est plein.
1) Recherche d’un étudiant par matricule : rechercheEtud
Fonction rechercheEtud(t : tabEtud, m : chaine de caractere) : entier ;
Var i : entier ;
Debut
i ← 1 ;
Tantque (i <= N_Etud et t[i].matriculeEtud <> m) faire
i ← i + 1 ;
fintantque
Si (i = N_Etud + 1) alors
rechercheEtud ← -1 ;
sinon
rechercheEtud ← i ;
finsi
Fin ;
2) Saisie de tous les étudiants : saisirEtud
Procedure saisirEtud(var t : tabEtud) ;
Var i : entier ;
Debut
Pour i de 1 a N_Etud faire
Lire(t[i].matriculeEtud) ;
Lire(t[i].nom) ;
Lire(t[i].prenom) ;
Lire(t[i].age) ;
Lire(t[i].sexe) ;
Lire(t[i].villeEtud) ;
Lire(t[i].filliereEtud) ;
Lire(t[i].nivEtud) ;
FinPour
Fin ;
3) Recherche d’un enseignant par matricule : rechercheEns
Fonction rechercheEns(t : tabEns, m : chaine de caractere) : entier ;
Var i : entier ;
Debut
i ← 1 ;
Tantque (i <= N_Ens et t[i].matriculeEns <> m) faire
i ← i + 1 ;
fintantque
Si (i = N_Ens + 1) alors
rechercheEns ← -1 ;
sinon
rechercheEns ← i ;
finsi
Fin ;
4) Tri sélection décroissant sur l’âge des enseignants : tri_Age_Ens
Procedure tri_Age_Ens(var t : tabEns) ;
Var i, j, imax : entier ;
tmp : Enseignant ;
Debut
Pour i de 1 a N_Ens - 1 faire
imax ← i ;
Pour j de i + 1 a N_Ens faire
Si (t[j].matriculeEns <> '' et t[imax].matriculeEns <> '' and t[j].age > t[imax].age) alors
imax ← j ;
finsi
FinPour
tmp ← t[i] ;
t[i] ← t[imax] ;
t[imax] ← tmp ;
FinPour
Fin ;
5) Ajout d’un étudiant : ajoutEtud (avec test case vide)
Procedure ajoutEtud(var t : tabEtud, e : Etudiant) ;
Var i : entier ;
place : entier ;
Debut
Si (rechercheEtud(t, e.matriculeEtud) <> -1) alors
Ecrire('etudiant deja present') ;
sinon
i ← 1 ;
place ← 0 ;
Tantque (i <= N_Etud et place = 0) faire
Si (t[i].matriculeEtud = '') alors
place ← i ;
finsi
i ← i + 1 ;
fintantque
Si (place = 0) alors
Ecrire('ajout impossible : tableau plein') ;
sinon
t[place] ← e ;
Ecrire('ajout reussi') ;
finsi
finsi
Fin ;
6) Compter étudiants de Dschang en Informatique : compteVilleEtud
Fonction compteVilleEtud(t : tabEtud) : entier ;
Var i, cpt : entier ;
Debut
cpt ← 0 ;
Pour i de 1 a N_Etud faire
Si (t[i].matriculeEtud <> '' et t[i].villeEtud = 'Dschang' et t[i].filliereEtud = 'Informatique') alors
cpt ← cpt + 1 ;
finsi
FinPour
compteVilleEtud ← cpt ;
Fin ;
7) Ajout d’un enseignant : ajoutEns (avec test case vide)
Procedure ajoutEns(var t : tabEns, p : Enseignant) ;
Var i : entier ;
place : entier ;
Debut
Si (rechercheEns(t, p.matriculeEns) <> -1) alors
Ecrire('enseignant deja present') ;
sinon
i ← 1 ;
place ← 0 ;
Tantque (i <= N_Ens et place = 0) faire
Si (t[i].matriculeEns = '') alors
place ← i ;
finsi
i ← i + 1 ;
fintantque
Si (place = 0) alors
Ecrire('ajout impossible : tableau plein') ;
sinon
t[place] ← p ;
Ecrire('ajout reussi') ;
finsi
finsi
Fin ;
8) Dire si un étudiant est à Dschang : posVilleEtud
Fonction posVilleEtud(t : tabEtud, m : chaine de caractere) : booleen ;
Var i : entier ;
Debut
i ← rechercheEtud(t, m) ;
Si (i = -1) alors
posVilleEtud ← FAUX ;
sinon
Si (t[i].villeEtud = 'Dschang') alors
posVilleEtud ← VRAI ;
sinon
posVilleEtud ← FAUX ;
finsi
finsi
Fin ;
Correction : Sauvegarde (fichiers)
NB : On donne ici une écriture algorithmique générale. (Disque dur / disquette = supports de stockage, donc fichiers différents.)
9) sauvEtud : sauvegarder les étudiants (disque dur) + enseignants (disquette)
Type fichEtud = fichier de Etudiant ;
Type fichEns = fichier de Enseignant ;
Procedure sauvEtud(fE : fichEtud, fP : fichEns, te : tabEtud, tp : tabEns) ;
Var i : entier ;
Debut
Ouvrir(fE) ;
Pour i de 1 a N_Etud faire
Si (te[i].matriculeEtud <> '') alors
ecrire(fE, te[i]) ;
finsi
FinPour
fermer(fE) ;
Ouvrir(fP) ;
Pour i de 1 a N_Ens faire
Si (tp[i].matriculeEns <> '') alors
ecrire(fP, tp[i]) ;
finsi
FinPour
fermer(fP) ;
Fin ;
10) sauvEns : sauvegarder les enseignants (disquette)
Procedure sauvEns(fP : fichEns, tp : tabEns) ;
Var i : entier ;
Debut
Ouvrir(fP) ;
Pour i de 1 a N_Ens faire
Si (tp[i].matriculeEns <> '') alors
ecrire(fP, tp[i]) ;
finsi
FinPour
fermer(fP) ;
Fin ;
Par Joel_Yk | Contact : +237652027193