You are on page 1of 6
INSTITUT SUPERIBUR DES ETUDES TECHNOLOGIQUES DE SFAX DEVOIR SURVEILLE Département: Technologies de UInformatique Date: Juin 2022 Section : LMDI - Semestre2 Documents : Non autorisés Matiére : ALGORITHMIQUE & PROGRAMMATION IT Durée 1H 30" Nb. Pages: 3 Pages Enseignants : Mmes CHAABANE S., HARIZ S., AYADILL, CHERITID., LARIBI F. et LAHIANI S. Mrs. FRIKHA N. et BEN YOUNES A. Exercice 1 (7.75 pts= 1.25 + 1.75 +2.5 +2.25) Considérons une pile d’entiers (définie par le pointeur Sommett) contenant des valeurs de 1 100 avec possibilité de redondance(répétition). Dans le but de créer une nouvelle pile (définie par le pointeur Sommet2) contenant les valeurs de la premiére, ordonnées dans ordre croissant (empilées de la plus petite a la plus grande). Nous vous proposons d'utiliser un tableau T intermédiaire, de 100 éléments, contenant le nombre d’apparitions de chaque valeur de la pile Initiale, de maniére & avoir dans la case ile nombre d’apparitions de la valeur i dans la pile. Exemple CO vst a a 5 100 1 tis ToT: [o[4 foto 1 5 5 2 2 3 4 5 6 7 100 5 5 5 100 5 3 = Lavaleur 1 apparait 3 fois dans la pile 3 1 ~ _ lavaleur 3 apparait 1 fois dans la pile 1 5 - Lavaleur 5 apparait 4 fois dans la pile 1 1 - Lavaleur 100 apparait 1 fois dans la pile 1 Sommet1, Sommet2 ‘Travail demandé : Nous vous demandons d’écrire 1. Une procédure InitialiserTab(S T : Tableau [1..100] d’Entier) permettant d’initialiser & 0 les 100 éléments du tableau T. 2. Une procédure RemplirTab(E/S Sommet1 : TPile, T : Tableau [1..100] d’Entier) permettant de mettre jour les éléments du tableau T, de maniére & avoir dans chacun le nombre d'apparitions de son indice dans la pile ; tout en utilisant les sous-algorithmes prédéfinis Dépiler(S Val : Entier ; E/S Sommet : TPile) qui permet de supprimer un élément d'une pile et faire renvoyer sa valeur et PileVide (E Sommet : TPile) : Logique qui permet de tester sila pile donnée en parametre est vide. 3. Une procédure ConstruirePile(E T : Tableau [1..100] d’Entier ; S Sommet2 : TPile) permettant de créer la deuxiéme pile et d’en empiler chaque indice i du tableau T, Tli] fois ; tout en utilisant les procédures prédéfinies Empiler(E Val : Entier ; E/S Sommet : TPile ) qui permet d’ajouter 1/6 une valeur Val donnée dans une pile et CréerPile (S Sommet : TPile) qui permet de créer une pile d’entiers vide. 4. Ualgorithme principal GérerPiles correspondant, tout en supposant que la pile initiale est déja créée et remplie par des valeurs comprises entre 1 et 100 et en considérant la structure Pile suivante : Pile = Structure info : Entier Svt : TPile Fin Structute Exereice 2 (12.25 points =3 +5 + 2/ 5+ 1.5) Dans’hépital « Hedi Chaker » les appareils de radiologie sont trés sollicités. Le service de radiologie regoit chaque jour les demandes des patients avec un degré d’urgence varié (1 : Trés urgent, 2 Urgent et 3 : Normal). Le chef de service pense alors a utiliser une structure de données ordonnée par ordre d’urgence. II vous demande alors de lui écrire les sous-algorithmes qui puissent gérer ces demandes en utilisant une liste simplement chainée, ordonnée selon le degré d’urgence. Pour les demandes ayant le méme degré d’urgence, elles seront ordonnées selon la date et I’heure de dépét. Sachant qu’une demande déposée prendra par défaut la date et 'heure du systéme et qu'elle doit atre classée la derniére parmi celles de méme ordre de priori Les structures utilisées sont donc les suivantes, suivies d’un schéma explicatif DateHeure = Structure i,m, a,h, mn : Entier //our, mois, année, heure et minute d’une date. Fin Structure Demande = Structure NumDde : Entier //Numéro d'une demande : numéro séquentiel qui sera /finitialisé & 1 et incrémenté pour chaque nouvelle demande. MatPat : Chaine [10] //Matricule du patient. DatHrDde :DateHeure ——_//Date et heure de dépdt de la demande qui prend par défaut //la date et l'heure du systame. DegUrg : Entier //1: Trés urgent, 2 : Urgent, 3 : Normal EtatDde : Car //€tat de la demande : initialisé a 'A' pour une demande en /fattente et passe 4'S' pour une demande satisfaite. Svt : TDemande //Pointeur sur la demande suivante. Fin Structure Schéma explica e o 2 eo (307 8/6/2022 140 {A ox +44 p3 8/6/2022 1445 150: }+[2p5 8/6/2072 1405 2 os ~>| 1 pt w/6/2002 14003 ol | Deere durgence La demande N'4 est de méme degré d'urgence que la demande N°3 Elle ext insérée aps car ele est déposde apres 2/6 Travail demandé : Avant de commencer et dans le but d’accélérer les traitements a effectuer, le responsable met 4 votre disposition l'algorithme principal « GérerDemandesPatients », ci-aprés présenté, et vous demande d’écrire 1. Une fonction Maximum(Téte : TDemande) : Entier qui renvoie le numéro de la demiére demande déposée. Sila liste est vide, la fonction renvoie 0. 2. Une procédure AjoutDemande(E/S Téte : TDemande) qui permet de a. Créer une nouvelle demande. b. Déterminer le numéro de la nouvelle demande (Dernier numéro accordé +1). ¢. Saisir le matricule du patient (contréle non demandé) et le degré d’urgence de la demande. d. Initialiser la date et 'heure de la demande en utilisant la procédure_prédéfinie DateSys(S DH : DateHeure) ainsi que son état. e. Insérer la demande créée dans la liste des demandes en respectant I’ordre demandé, Une procédure SatisfaireDemande(E Téte : TDemande) qui permet de changer état a 'S' de la premiére demande non encore satisfaite de degré d’urgence 1 (pour dire qu’elle vient d’étre satisfaite). Si aucune demande n’est trouvée, la procédure affiche « Pas de demandes trés urgentes ». 4. Une procédure AfficheDemandes(E Téte : TDemande, j, m, a : Entier) qui permet d’afficher les demandes non encore satisfaites d'une date donnée sous forme de 3 entiers (j, m et a) Exemple de traitement Algorithme GérerDemandesPatients TYPE ... Var Téte: TDemande Choix, j, m, a: Entier Début /*Création de la liste des patients*/ Téte € Nil /*Affichage d'un menu pour un exemple de traitement*/ Répéter Ecrire("------Menu Général--——--") Ecrire("1. Ajout d’une demande") Ecrire("2. Satisfaction d’une demande de degré d’urgence 1") Ecrire("3. Affichage des demandes d’une date donnée") Ecrire("4, Quitter") Répéter Ecrire ("Tapez votre choix : ") Lire (Choix) Jusqu’a (Choix >=1 et Choix <= 4) Selon (Choix) Faire 1: AjoutDemande(Téte) 2 : SatisfaireDemande(Téte) 3: Ecrire ("Donnez la date a consulter sous forme jj mm aaaa :") Lire (j, m, a) AfficheDemandes(Téte, j, m, a) 4: Ecrire ("Fin du traitement") Fin Selon Jusqu’a (Choix = 4) Fin 3/6 Correction Exercice1 (7.75 pts= 1.25 + 1.75 + 2.5 + 2.25) Procédure InitialiserTab (ST : Tableau [1..100] d’Entier) 1.25 pts Var i:Entier 0.25 pt Début Pour i de 1a 100 Faire 0.5 pt THEO OS pt Fin Faire Fin InitialiserTab Procédure RemplirTab (E/S Sommet! : TPile, T: Tableau [1..100]d’Entier) 1.75 pts Var Val: Entier 0.25 pt Début Tant que (Non(PileVide(Sommett))) Faire 0.5 pt Dépiler (Val, Sommet1) 0.5 pt Tlal] € TIvall +1 0.5 pt Fin Faire Fin RemplirTab Procédure ConstruirePile (E T : Tableau [1..100]d’Entier ; § Sommet2: TPile) 2.5 pts Var i, Val: Entier 0.5 pt Début CréerPile (Sommet2) 0.5 pt Pour Valde 18100 Faire 0.5 pt Pouride1aT[Val] Faire 0.5 pt Empiler (Val, Sommet2) 0.5 pt Fin Faire Fin Faire Fin ConstruirePile Algorithme GérerPile 2.25 pts Type Pile = Structure info : Entier Svt : Pile Fin Structure Var T: Tableau [1..100] d’Entier Sommet1, Sommet2 : TPile 0.75 pt Début InitialiserTab(T) 0.5 pt RemplirTab (Sommeti,T) 0.5 pt ConstruirePile (T, Sommet2) 0.5 pt Fin Correction Exercice2 (12.25 points = 3 + 5 + 2.75 + 1.5) Fonction Maximum (Téte : TDemande) : en’ Var Max: Entier P: *Demande 0.5 pt Début 4/6 Si (Téte = Nil) Alors Maximum €0 0.5 pt Sinon Max € Téte?.NumDde P€ Tate? svt 0.5 pt Tant que (P <> Nil) Faire Si (PT.NumDde > Max) Alors Max € Pt. NumDde Fin si Pe ptsvt Fin faire 1pt Maximum € Max 0.5 pt Fin si Fin Maximum Procédure AjoutDemande(E/s Téte : Var Q,S,P:TDemande 0.75 pt Début Allouer(Q) 0.5 pt Demande) Q?t.NumDde € Maximum(Téte) +1 0.5 pt Ecrire("Matricule patient :") Lire(Q?.MatPat) 0.25 pt Répéter Ecrire(« donner le degré d’urgence : « ) Lire(Q?.DegUrg) Jusqu’a (Q*. DegUrg >=1 Et Qt. DegUrg <=3) 0.5 pt DateSys(Q?.DatHrDde) 0.5 pt Q?.EtatDde €'A' 0.25 pt //Recherche de la position d’insertion 0.75 pt S€Téte Tant que (S<> Nil et S*.DegUrg <= QT.DegUrg) Faire Pes se€stsvt Fin Faire /Mnsertion Si(S=Téte) Alors 0.5 pt Q?.svt € Téte //ou bien : QT.Svt € $ TéteQ sinon 0.5 pt Ptsvt © Q atsutes Fin si Fin AjoutDemande Procédure SatisfaireDemande(E Téte : TDemande) Var P: TDemande /Jn’est pas noté : I’étudiant peut ne pas le déclarer et utilise Téte Vérif : Logique 0.25 pt Début 5/6 P € Téte Vérif € Faux 0.25 pt Tant Que (P<> Nil et PT.DegUr; Si (PT.EtatDde = 'A’) Alors PT .EtatDde ='S' Let Vérif = Faux) Faire 1.75 pts Vérif © Vrai Fin Si peptsy Faire (Vérif = Faux) Alors 0.5 Ecrire("Pas de demandes tras urgentes !!!") Fin Si SatisfaireDemande Procédure AfficheDemandes(E Téte : TDemande, j, m, a : Entier) Var P: Demande //Non noté parce que I’étudiant peut u Début P €Téte Tant que (P <> Nil) Faire 0.5 Si (PT.DatHrDde_j =j et PT.DatHrDde.m= m et P?.DatHrDde.a = a Et PT.EtatDde = Ecrire(PT.NumDde, P?.DegUrg) FinSi pt Pe ptsvt Fin faire Fin AfficheDemandes 6/6

You might also like