CorrectionDS AlgoSD Avril 2021-1
CorrectionDS AlgoSD Avril 2021-1
CorrectionDS AlgoSD Avril 2021-1
TECHNOLOGIQUES DE SFAX
DEVOIR SURVEILLE
Enoncé
Le chef du département technologies de l’informatique de l’ISET de Sfax vous fait appel, en tant
qu’étudiants de la 1ère année, pour lui écrire un algorithme permettant de répartir les projets de
fin d’études sur les différents enseignants encadrants de son département.
Le principe de répartition consiste à parcourir la liste des projets, et pour chacun d’eux, on doit :
- Chercher l’enseignant, de même spécialité que celui du projet, ayant le nombre minimal de
projets à encadrer.
- Lui affecter l’enseignant trouvé en lui attribuant son identifiant comme enseignant encadrant.
- Actualiser le nombre de projets à encadrer pour l’enseignant en question en l’incrémentant
de 1.
NB : Le département contient suffisamment d’enseignants de toutes les spécialités et chaque
enseignant ne peut dans aucun cas atteindre 10 projets à encadrer.
Projet = Structure
CodeP : Entier //Code d’un projet : Numéro séquentiel qui commence à 1 (1, 2, 3, …).
Intitulé : Chaîne //Intitulé d’un projet
Spec : chaîne //Spécialité 'R' : Réseau, 'D' : Développement, 'E' : Embarqué
IdE : Entier //Identifiant de l’enseignant encadrant : initialisé à zéro pour un projet sans
encadrant
Svt : Projet //Pointeur sur le projet suivant
Fin Structure
Travail à Faire
On suppose que la liste des encadrants est déjà créée et remplie par les informations des
enseignants du département avec un nombre de projets à encadrer (NbreP) égal à zéro
initialement pour tous les encadrants.
1/2
On vous demande d’écrire :
1- Une procédure AjoutProjet (E P : Projet ; E/S TêteP : Projet) permettant d’ajouter un
nouveau projet en queue de la liste des projets.
2- Une fonction ChercherEnseignant (Spc : Car, TêteE : Enseignant) : Enseignant permettant
de renvoyer l’adresse du premier enseignant trouvé dans la liste, ayant le nombre
d’encadrements minimal pour une spécialité donnée.
3- Une procédure ActualiserNbreProjets (E Q : Enseignant) permettant d’incrémenter de 1 le
nombre de projets encadrés pour un enseignant donné, sachant son adresse dans la liste.
4- Une procédure récursive AfficheProjets (E id : Entier, TêteP : Projet) permettant d’afficher
pour un enseignant donné, sachant son identifiant, la liste des projets qu’il a à encadrer (code
et intitulé).
5- L’algorithme principal AffectationEncadrement correspondant qui permet de :
- Créer la liste des projets.
- Ajouter autant de projets que l’utilisateur le désire sans aucun encadrant.
- Mettre à jours la liste des projets, en affectant pour chacun un encadrant (il s’agit du
premier enseignant trouvé de la liste, ayant un nombre d’encadrements minimal pour
la spécialité du projet).
- Afficher pour l’enseignant, ayant l’identifiant 45, la liste des projets qu’il a à encadrer.
Correction
Procédure AjoutProjet (E P : Projet ; E/S TêteP : Projet)
VAR
Q : Projet
DEBUT
Si (TêteP = NiL) Alors
TêteP P
Sinon
Q TêteP
Tant Que(Q↑.Svt <> Nil) Faire
Q Q↑.Svt
Fin Faire
Q↑.Svt P
Fin Si
FIN AjoutProjet
ALGORITHME AffectationEncadrement
TYPE
Enseignant = Structure
IdE : Entier
NomPre : Chaîne
Spec : Car
NbreP : Entier
Svt : Enseignant
Fin Structure
Projet = Structure
CodeP : Entier
Intitulé : Chaîne
Spec : chaîne
IdE : Entier
Svt : Projet
Fin StructureVAR
VAR
TêteP, P : ↑Projet
TêteE, E : ↑Enseignant
Rep : Car
3/2
CP : Entier
DEBUT
TêteV Nil
CP 0
Répéter
Répéter
Ecrire ("Ajout de Projet O/N ?")
Lire (Rep)
Jusqu’à (Majus(Rep) = 'O' Ou Majus(Rep) = 'N')
Si (Majus(Rep) = 'O') Alors
Allouer(P)
CP CP + 1
P↑. CodeP CP
Ecrire ("Donner son intitulé : ")
Lire (P↑. intitulé)
Répéter
Ecrire ("Spécialité projet R/D/E : ")
Lire (P↑. Spec)
Jusqu’à (majus(P↑. Spec) = 'R' Ou majus(P↑. Spec) = 'D' Ou majus(P↑. Spec) = 'E')
P↑.IdeE 0
P↑.Svt Nil
AjoutProjet (P, TêteP) /*Appel de la procédure AjouProjet*/
Jusqu’à (Majus(Rep) = 'N')
4/2