Universit´e Mohamed Khider-Biskra
Facult´e des Sciences Exactes et Sciences de la Nature et de la Vie D´epartement d’informatique
2`emeann´ee LMD Algorithmique et structures de donn´ees 3
03 Juillet 2021 08:00-09:00, Amphis I,J
Examen de rattrapage
Bar`eme: 1.5 + 2.5 + 4 + 4 + 5 + 3
On souhaite dans cet exercice traiter des listes lin´eaires chain´ees de nombres entiers.
Exemple :
T ete7−→[4]7−→[−1]7−→[2]7−→[1]7−→[−3]7−→N il
1. Donner les d´eclarations permettant d’utiliser de telles listes.
2. Soit la fonctionf suivante :
Fonctionf(P :Poniteur(TMaillon)) :entier;
D´ebut
Si (P=Nil)Alors f ←0 ; Sinon
f ←Valeur(P)−f(Suivant(P)) ; Fin Si;
Fin;
Donner la valeur retourn´ee par l’appel de la fonctionf sur la liste de l’exemple ci-dessus.
3. ´Ecrire la fonction r´ecursive :
Fonction MemeSigne(L: pointeur(TMaillon)) :bool´een ;
permettant de retourner vrai si les ´el´ements de la liste L sont tous positifs ou tous n´egatifs et faux sinon.
4. ´Ecrire la proc´edure :
Proc´edure Purger(L : pointeur(TMaillon)) ;
permettant de supprimer de la liste L tous les ´el´ements n´egatifs ou nuls et ne garder que les positifs.
5. ´Ecrire la proc´edure
Proc´edure Tourner(L : pointeur(TMaillon)) ; permettant de permuter les parties gauche et droite de la liste.
T ete7−→[4]7−→[−1]7−→[2]7−→[1]7−→[−3]7−→N il
T ete7−→[1]7−→[−3]7−→[2]7−→[4]7−→[−1]7−→N il
6. Donner le tas obtenu en ins´erant dans l’ordre les cl´es suivantes :18, 25, 22, 9, 19, 4, 31, 14.
FFFBonne chance FFF
Corrig´ e type
1. D´eclarations permettant d’utiliser de telles listes. 1.5 pt
Type TMaillon =Structure Valeur :entier ;
Suivant :Pointeur(TMaillon) ; Fin ;
Var Tete :Pointeur(TMaillon ;
2. La valeur retourn´ee :f(T ete) = 4−(−1−(2−(1−(−3−0)))) = 3 2.5 pts 3. Fonction MemeSigne(L : pointeur(TMaillon)) :bool´een ; 4 pts
FonctionM emeSigne(L:Poniteur(TMaillon)) :booleen;
D´ebut
Si (L=Nil ou Suivant(P)=Nil)Alors M emeSigne←Vrai ;
Sinon
Si (Valeur(L)*Valeur(Suiavnt(L))<0) Alors M emeSigne←Faux ;
Sinon
M emeSigne←MemeSigne(Suiavnt(L)) ; Fin Si;
Fin Si;
Fin;
4. Proc´edure Purger(L : pointeur(TMaillon)) ; 4 pts
Proc´edure Inverser(L :Pointeur(TMaillon));
var N ouelleL, P, Q: Pointeur(TMaillon); D´ebut
N ouelleL←Nil ;
Tant que ((L6=N il))faire P ←L;L←Suivant(L) ; Si (Valeur(P)>0)Alors
Aff adr(P, N il) ;
Si (N ouvelleL=N il)Alors N ouevelleL←P; Sinon
Aff adr(Q, P) : Fin Si;
Q←P; Sinon
Lib´erer(P) : Fin Si;
Fin TQ;
L←N ouvelleL; Fin;
5. Proc´edure Tourner(L: pointeur(TMaillon)) ; 5 pts
Proc´edure Tourner(L:Pointeur(TMaillon));
var Last, P, Q:Pointeur(TMaillon); i, n:entier;
D´ebut
n←0 ;P ←L;Last←N il; Tant que ((P6=N il))faire
n←n+ 1 ;Last←P;P ←Suivant(P) ; Fin TQ;
i←0 ;P ←L; Q←N il; Tant que ((i < n/2))faire
i←i+ 1 ;Q←P;P ←Suivant(P) ; Fin TQ;
Si (Q6=N il)Alors Aff adr(Q, N il) : Aff adr(Last, P) : Q←Suivant(P) ; Aff adr(P, L) ; L←Q; Fin Si;
Fin;
6. Le tas obtenu en ins´erant dans l’ordre les cl´es18, 25, 22, 9, 19, 4, 31, 14. 3 pts