Série 2 - Acad - A - Correction
Série 2 - Acad - A - Correction
Série 2 - Acad - A - Correction
ACAD A 2021/2022
La méthode: Comparer les deux éléments des têtes de liste et placer la tête T sur la plus
petite valeur.
Parcourir les éléments restants dans T1 et T2 et les comparer deux à deux:
Si l’élément de la liste T1 est plus petit, on l’enchaine avec les éléments qui sont déjà dans T et on
avance dans T1.
Si l’élément de la liste T2 est plus petit, on l’enchaine avec les éléments qui sont déjà dans T et
avance dans T2.
A la fin, il restera des éléments dans T1 ou dans T2, il faudra faire un seul chainage
pour les ajouter à la liste T
Fonction FusionTriée(E/ T1, T2:
Liste ): Liste // parcourir les deux listes en même temps et comparer les
Var éléments deux à deux
T, p1, p2, p, q : Liste; // p1 pour Tant que ( p1 <> nil et p2 <> nil)
parcourir T1 et p2 pour parcourir T2 faire
Debut// q sera toujours sur le dernier si (cont(p1.info )< cont(p2.info))
élément ajouté à la liste T alors cont(q.svt)p1; q p1; p1cont(p1.svt);
// on avance dans T1
si (T1 = nil) alors TT2;
sinon cont(q.svt)p2; q p2; p2cont(p2.svt);
sinon si (T2 = nil) alors TT1; // on avance dans T2
sinon fsi;
// placer l’élément de tête fait;
si (cont(T1.info) < cont(T2).info) // Il reste des éléments dans l’une des listes T1 ou T2
alors TT1; p1cont(T1).svt; si( p1 <> nil)// éléments restants dans T1
alors cont(q.svt)p1;
sinon TT2; p2cont(T2).svt;
sinon cont(q.svt)p2; // éléments restants dans T2
Fsi Fsi
qT; Fsi;
Retourner (T);
Fin;
4. Ecrire une action paramétrée qui éclate une liste T (non ordonnée)
de réels en deux listes T1 et T2 triées par ordre croissant de telle sorte
que T1 contienne les valeurs >= X et T2 contienne les valeurs <X pour
une valeur X donnée.
Méthode : on écrit une procédure ajout pour ajouter un élément déjà crée en utilisant son adresse
puis une autre procédure éclate pour parcourir T, on vérifie la valeur, si elle est >=X on appelle la
procédure ajout pour l’inserer dans T1 sinon on l’insere dans la liste T2 avec la procédure ajout
Procédure Ajout (E/S tete: Liste, E/ p:Liste)
Var
p, q, r : Liste;
Debut
// si la liste est vide
si (tete= nil)
alors tetep;
sinon
si cont(p.info )< cont(tete.info) // insertion en tête
alors cont(p.svt)tete; tetep;
sinon // parcourir la liste pour trouver la position d’insertion
q tete;
Tant que (q<>nil et cont(q.info) < cont(p.info)
faire r q ; q cont(q.svt)
fait
// r permet de sauvegarder l’adresse de l’élément précédent
// à la sortie de la boucle, p sera inséré entre r et q
Cont(r.svt)p ; cont(p.svt)q ;
Fin;
Procédure Eclate (E/S T, T1,T2: liste, E/X: entier)
Var
p, q : Liste;
Debut// initialiser T1 et T2 à nil
T1 nil; T2 nil;
// parcourir la liste T
p T;
Tant que (p<>nil) faire
q cont(p.svt); // pour continuer le parcoursavec l’élément suivant
Cont(p.svt)nil;// détacher l’élément courant de liste T
si (cont(p.info) >= X)
Alors Ajout (T1, p); // ajouter l’élément dans T1
Sinon Ajout (T2, p); // ajouter l’élément dans T2
fsi;
pq; // on sera sur l’élément suivant de la liste T
fait;
Tnil;
Fin;
Exercice 5
1. Ecrire une fonction BINAIRE qui décompose un nombre entier
positif x en binaire, dans une liste chaînée bidirectionnelle.
Exemple :
X=11
Déclaration