CorrectionDS AlgoSD Avril 2021-1

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

INSTITUT SUPERIEUR DES ETUDES

TECHNOLOGIQUES DE SFAX

DEVOIR SURVEILLE

Département : Technologies de l’Informatique Date : Avril 2021


Section : LMD1 – Semestre2 Documents : Non autorisés

Matière : ALGORITHMIQUE & PROGRAMMATION II Durée : 1H


Nb. Pages : 2 Pages
Enseignants: Mmes ABID S., ELLOUZE S., LARIBI F. et ZRIBI L. & Mrs. FRIKHA N. & BEN YOUNES M.

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.

Pour cela, il vous propose les structures de données suivantes :


Enseignant = Structure
IdE : Entier //Identifiant enseignant
NomPre : Chaîne //Nom et prénom enseignant
Spec : Car //Spécialité 'R' : Réseau, 'D' : Développement, 'E' : Embarqué
NbreP : Entier //Nombre de projets à encadrer
Svt : Enseignant //Pointeur sur l’enseignant suivant
Fin Structure

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

Fonction ChercherEnseignant (Spc : Car, TêteE : Enseignant) : Enseignant


VAR
Q, E : Enseignant
Nb : Entier
DEBUT
Nb  10 /*Nbre d’encadrements qu’un enseignant ne peut pas atteindre*/
E  TêteE
Tant Que (E <> Nil) Faire
Si (E↑.Spec = Spc) Alors
2/2
Si (E↑.NbreP < Nb) Alors
QE
Nb  E↑.NbreP
Fin Si
Fin Si
E  E↑.Svt
Fin Faire
EnseignantSécialité  Q
FIN EnseignantSécialité

Procédure ActualiserNbreProjets (E Q : Enseignant)


DEBUT
Q↑.NbreP  Q↑.NbreP + 1
FIN ActualiserNbreProjets

Procédure AfficheProjets (E id : Entier, TêteP : Projet)


DEBUT
Si (TêteP <> NiL ) Alors
Si (TêteP↑.IdeE = id) Alors
Ecrire (TêteP↑.CodeP, TêteP↑.intitulé)
Fin Si
AfficheProjets (id, TêteP↑.Svt)
Fin Si
FIN AfficheProjets

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')

/*MAJ de la liste des projets : affectation des encadrants*/


P  TêteP
Tant Que (P <> Nil) Faire
E EnseignantSpécialité (P↑. Spec, TêteE)
P↑.IdeE  E↑.IdeE
ActualiserNbreProjets(E)
P  P↑.Svt
Fin Faire

Ecrire ("Les projets encadrés par l’enseignant 45 sont : ") ;


AfficheProjets(45, TêteP)
Fin Si
FIN

4/2

Vous aimerez peut-être aussi