co04 - LISIC

publicité
Correction TP 4 :
Types de données abstraits séquenciels
Licence 2 MASS semestre 2, 2007/2008
Exercice 1 : Liste d’étudiants
lettre( m, i ) : retourne la lettre numéro i du mot m
Algorithme etudiant(l : liste de mot) : liste de mot
début
si listeEstVide?(l) alors
retourner listeVide()
sinon
si lettre(listeTete(l), ’m’) alors
retourner listeCons(listeTete(l), etudiant(listeQueue(l)))
sinon
retourner etudiant(listeQueue(l))
fin si
fin si
fin
Exercice 2 : Maximums
a- Algorithme maximum(l : liste de réel) : réel
début
si listeEstVide?(l) alors
retourner 0
sinon
si listeEstVide?(listeTete(l)) alors
retourner listeTete(l)
sinon
retourner max2(listeTete(l), maximum(listeQueue(l)))
fin si
fin si
fin
et il faut alors définir aussi l’algorithme max2 :
Algorithme max2(a, b : réel) : réel
début
si a < b alors
retourner b
sinon
retourner a
fin si
fin
b- Algorithme maximumListes(l : liste de listes de réel) : liste de réel
1
début
si listeEstVide?(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ébut
si pileEstVide?(p) alors
retourner (p1 , p2 )
sinon
retourner distribution(depiler(p), p2 , empiler(sommet(p), p1 ))
fin si
fin
Exercice 4 : Couples
• coupleCons : typeElément1 × typeElément2 → couple
construit un couple d’éléments
• premier : couple → typeElément1
donne le premier élément du couple
• second : couple → typeElément2
donne le second élément du couple
Les couples peuvent être utiliser pour représenter par exemple les coordonnées de points du plan, les
noms et prénom de personnes, etc.
Exercice 5 : Longueur d’une ligne brisée
On utilise le TDA couple défini dans l’exercice précédent.
Algorithme longueur(l : liste de couples de deux réels) : réel
début
si listeEstVide(L) alors
retourner 0
sinon
retourner longueurAvecPoint(listeTete(l), listeQueue(l))
fin si
fin
Algorithme longueurAvecPoint(point : couple de reel, l : liste de couples de deux réels) : réel
début
si listeEstVide?(L) alors
retourner 0
sinon
2
retourner distance(point, listeTete(l)) + longueurAvecPoint(listeTete(l), listeQueue(l))
fin si
fin
Algorithme distance(point1, point2 : couple de reels) : réel
début
p
retourner (premier(point1) − premier(point2))2 + (second(point1) − second(point2))2
fin
Exercice 6 : File avec priorité
L’algorithme pourrait ressembler à insertion mais en fait beaucoup plus technique car enfiler ajoute à
la fin.
Algorithme ajout(c : couple, f : file de couples) : file de couples
début
retourner ajoutTerm(fileVide(), c, f )
fin
Algorithme ajoutTerm(f term : file de couples, c : couple, f : file de couples) : file de couples
début
si fileEstVide?(f ) alors
retourner enfiler(c, f term)
sinon
si second(c) ≤ second(fileTete(f )) alors
retourner ajoutTerm(enfiler(fileTete(f ), f term), c, defiler(f ))
sinon
retourner ajoutTerm(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ébut
variable : m1 , m2 : couple
si listeEstVide?(P1 ) alors
retourner P2
sinon
si listeEstVide?(P2 ) alors
retourner P1
sinon
m1 ← listeTete(P1 )
m2 ← listeTete(P2 )
si second(m1 ) ¡ second(m2 ) alors
retourner listeCons(m2 , somme(P1 , listeQueue(P2 )))
sinon
si second(m1 ) = second(m2 ) alors
retourner listeCons(coupleCons(premier(m1 ) + premier(m2 ), second(m1 )), somme(listeQueue(P1 ),
listeQueue(P2 )))
3
sinon
retourner listeCons(m1 , somme(listeQueue(P1 ), P2 ))
fin si
fin si
fin si
fin si
fin
4
Téléchargement