GM3 Nathalie Chaignaud
Algorithmes et Structures de Données Mardi 29 Novembre 2011
Durée 2H – Cours et TD NON autorisés 1. Pile (3 pts)
Soient les fonctions définies comme suit pour x entier :
€
A(x) = 1 si x = 0 ou x = 1 B( x + 2) si x > 1
⎧ ⎨
⎩
B( x) = A(x − 3) + 4
1.1. Ecrire les fonctions A et B en pseudo langage.
1.2. Simuler la pile sur l’appel écrire(A(6)){@0} dans le programme principal.
2. Fractale (5 pts)
On souhaite dessiner un arbre de la forme suivante (ici de niveau n=4).
Pour cela, nous montrons les différentes étapes (pour n=1, n=2 et n=3, h est divisée par 2 à chaque étape) :
Comme outil de dessin, nous avons une procédure trace-T(E t,x,y,dir:entier) qui trace un « T » de taille t (en pixels) dont la verticale est égale à l’horizontale, à partir du point de coordonnées (x,y) et dans la direction dir (= 1 si l’arbre est dirigé vers le haut et = -1 si vers le bas). On considère que l’origine des coordonnées est en haut à gauche de l’écran.
Ecrire en pseudo-langage la procédure récursive dessine-arbre(E h,n,x,y,d:entier) qui permet de dessiner un arbre de hauteur h et de niveau n à partir du point de coordonnées (x,y) et dans la direction d.
Dans notre exemple, l’appel se fera avec dessine-arbre(40,4,500,500,1).
3. Fusion de 2 tableaux triés (5 pts)
Soient deux tableaux d’entiers triés. On souhaite fusionner ces deux tableaux en un seul trié.
3.1. Expliquer en français le principe de cette fusion. Si les deux tableaux ont des valeurs communes, ces valeurs sont répétées dans le nouveau tableau. Donner un exemple approprié.
3.2. Ecrire en pseudo-langage la fonction qui réalise cette fusion.
4. Fichier texte (7 pts)
Soit un fichier texte intitulé NOMBRES.TXT qui contient une liste de nombres entiers (chaque nombre est suivi par un retour à la ligne).
4.1. Ecrire une procédure en pseudo-langage qui affiche les nombres du fichier, leur somme et leur moyenne.
4.2. On veut écrire une procédure qui affiche la médiane des nombres du fichier (qu’on définit comme la plus petite valeur m du fichier telle que le nombre de valeurs du fichier supérieures ou égales à m est égal au nombre de valeurs inférieures ou égales à m). Expliquer en français le principe de cette procédure, puis écrire cette procédure en pseudo- langage. Ecrire tous les modules nécessaires (même ceux vus en cours ou en TD).