Correction TP 4 : Types de donn´ees abstraits s´equenciels
Licence 2 MASS semestre 2, 2007/2008
Exercice 1 : Liste d’´ etudiants
lettre(m,i) : retourne la lettre num´eroidu motm Algorithme etudiant(l: liste de mot) : liste de mot d´ebut
silisteEstVide?(l)alors retournerlisteVide() sinon
silettre(listeTete(l), ’m’) alors
retournerlisteCons(listeTete(l), etudiant(listeQueue(l))) sinon
retourneretudiant(listeQueue(l)) fin si
fin si fin
Exercice 2 : Maximums
a- Algorithme maximum(l : liste de r´eel) : r´eel d´ebut
silisteEstVide?(l)alors retourner 0
sinon
silisteEstVide?(listeTete(l))alors retourner listeTete(l)
sinon
retourner max2(listeTete(l), maximum(listeQueue(l))) fin si
fin si fin
et il faut alors d´efinir aussi l’algorithmemax2 : Algorithme max2(a, b: r´eel) : r´eel
d´ebut
sia < balors retourner b sinon
retourner a fin si
fin
b- Algorithme maximumListes(l : liste de listes de r´eel) : liste de r´eel 1
d´ebut
silisteEstVide?(l)alors retourner listeVide() sinon
retourner listeCons(maximum(listeTete(l)), maximumListes(listeQueue(l))) fin si
fin
Exercice 3 : Distribution de feuilles
Algorithme distribution(p, p1,p2 : pile de feuilles) : (pile de feuilles, pile de feuilles) d´ebut
sipileEstVide?(p)alors retourner(p1, p2) sinon
retournerdistribution(depiler(p),p2, empiler(sommet(p),p1)) fin si
fin
Exercice 4 : Couples
• coupleCons : typeEl´ement1×typeEl´ement2→couple construit un couple d’´el´ements
• premier : couple→typeEl´ement1 donne le premier ´el´ement du couple
• second : couple→typeEl´ement2 donne le second ´el´ement du couple
Les couples peuvent ˆetre utiliser pour repr´esenter par exemple les coordonn´ees de points du plan, les noms et pr´enom de personnes, etc.
Exercice 5 : Longueur d’une ligne bris´ ee
On utilise le TDA couple d´efini dans l’exercice pr´ec´edent.
Algorithme longueur(l : liste de couples de deux r´eels) : r´eel d´ebut
silisteEstVide(L)alors retourner0
sinon
retournerlongueurAvecPoint(listeTete(l), listeQueue(l)) fin si
fin
Algorithme longueurAvecPoint(point: couple de reel,l : liste de couples de deux r´eels) : r´eel d´ebut
silisteEstVide?(L)alors retourner0
sinon
2
retournerdistance(point, listeTete(l)) + longueurAvecPoint(listeTete(l), listeQueue(l)) fin si
fin
Algorithme distance(point1,point2 : couple de reels) : r´eel d´ebut
retournerp
(premier(point1)−premier(point2))2+ (second(point1)−second(point2))2 fin
Exercice 6 : File avec priorit´ e
L’algorithme pourrait ressembler `a insertion mais en fait beaucoup plus technique car enfiler ajoute `a la fin.
Algorithme ajout(c: couple,f : file de couples) : file de couples d´ebut
retournerajoutTerm(fileVide(),c,f) fin
Algorithme ajoutTerm(f term: file de couples,c : couple,f : file de couples) : file de couples d´ebut
sifileEstVide?(f)alors retournerenfiler(c,f term) sinon
sisecond(c)≤second(fileTete(f))alors
retournerajoutTerm(enfiler(fileTete(f),f term),c, defiler(f)) sinon
retournerajoutTerm(enfiler(c,f term), fileTete(f), defiler(f)) fin si
fin si fin
Exercice 7 : Polynomes
Algorithme somme(P1,P2 : liste de couple) : liste de couple d´ebut
variable : m1,m2 : couple silisteEstVide?(P1)alors
retournerP2 sinon
silisteEstVide?(P2)alors retournerP1
sinon
m1←listeTete(P1) m2←listeTete(P2)
sisecond(m1) ¡ second(m2)alors
retournerlisteCons(m2, somme(P1, listeQueue(P2))) sinon
sisecond(m1) = second(m2)alors
retournerlisteCons(coupleCons(premier(m1) + premier(m2), second(m1)), somme(listeQueue(P1), listeQueue(P2)))
3
sinon
retournerlisteCons(m1, somme(listeQueue(P1),P2)) fin si
fin si fin si fin si fin
4