ds3 2011-2012 - FIL
ds3 2011-2012 - FIL
ds3 2011-2012 - FIL
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Programmation devoir Surveillé n o 3 année universitaire <strong>2011</strong>-<strong>2012</strong>Durée 2 heures documents et calculatrices interdites7 mars <strong>2012</strong>Prenez le temps de lire ce sujet. Les questions sont indépendantes pour la plupart.L'énoncé est noté sur 20 points.Toutes vos réponses doivent être justiées.1 sous tableaux [13 points]On souhaite réaliser un programme de gestion de sous-tableau. On appelle ici, soustableaula donnée d'un tableau t, d'un coecient entier a et d'un coecient entier b. Unsous-tableau permet d'accéder aux cases de t dont l'indice est de la forme a ∗ k + b.On dénit le type paramétré suivant :type ’a sous_tableau= { t : ’a array;a : int;b : int}question 1. [1 point] Une fois qu'une valeur de type ’a sous_tableau est créé estil possible de changer la taille du tableau contenu dans le champ t ?On souhaite qu'il soit possible de changer le contenu du champ a et celui du champ bquestion 2. [1 point] Comment faire ?Dans la suite, on suppose que le type sous-tableau a ete deni pour qu'il soit possiblede changer le contenu du champ a et celui du champ b.let en_tableau st =let dernier = (Array.length st.t) -1 inlet indice_final = (dernier - st.b) / st.a inlet res = Array.make (max indice_final 0) st.t.(0) infor i =0 to indice_final dores.(i)int->’a. Lorsqu'on essaie d'accéder à un indice hors du sous tableauelle doit déclencher la même exception que celle produite lors d'un accès à un indicenon valide dans un tableau.1
question 6. [1 point] Ecrire la fonction getDe la même manière, la procédure set permet de xer la valeur d'une case d'unsous-tableau.let set st i x =st.t.(st.a*i+st.b)
Algorithme 3 Algorithme de tri shellEntrée : t un tableau de longueur n.Sortie : t un tableau trié de longueur n contenant les mêmes éléments.1: pas := plus grand élément de la suite récurrente dénie par u 0 = 1 et u k+1 = 3u k + 1inférieur à n/32: st := maket3: tant que pas ≥ 1 faire4: st.a := pas5: pour i variant de 0 à pas − 1 faire6: st.b := i7: trier par insertion le sous-tableau st8: n pour9: pas := (pas − 1)/310: n tant que2 Sur les arbres binaires [1h] [7 points]Dans cet exercice, on utilise les primitives sur les arbres binaires vues en cours etdénies dans un module Arbres. On suppose de plus que la directive open Arbres a étéfaite et qu'il est donc inutile de pleinement qualier les noms de ces opérations primitives.Enn, on suppose que les éléments de type ’a qui étiquettent les n÷uds des arbres sonttotalement ordonnés et que la fonctionval compare 'a -> 'a -> intpermet de comparer deux tels éléments en renvoyant la valeur -1 si le premier est pluspetit que le second, 1 s'il est plus grand et 0 si les deux sont égaux.On rappelle que l'interface est :type ’a arbreexception Arbre_videval arbre_vide : ’a arbreval creation : ’a -> ’a arbre -> ’a arbre -> ’a arbreval est_arbre_vide : ’a arbre -> boolval valeur : ’a arbre -> ’aval fils_gauche : ’a arbre -> ’a arbreval fils_droit : ’a arbre -> ’a arbre42605 8Un arbre binairequestion 12. [1 point] Déclarez une variable nommé a dont la valeur est l'arbre dessiné.question 13. [2 points] Que donne cet algorithme lorsqu'on l'applique à l'arbre a ?3
Algorithme 4 ParcoursEntrée : a un arbre dont les valeurs des noeuds sont des entiersSortie : achage des valeurs1: créer une pile p initialement vide2: empiler l'arbre a3: tant que la pile p n'est pas vide faire4: depiler l'arbre x de la pile p5: si x n'est pas l'arbre vide alors6: acher la valeur de x7: empiler dans la pile p le ls gauche de x8: empiler dans la pile p le ls droit de x9: n si10: n tant quequestion 14. [1 point] En utilisant le module prédéni, Stack implantez l'algorithmeprécédentquestion 15. [2 points] Si on remplace la pile par une le et respectivement empilerpar enler et dépiler par déler. Que donne cet algorithme appliqué à l'arbre a.question 16. [1 point] Sachant que le module prédéni Queue propose une procédurepop qui permet de déler, et une procédure push qui permet d'enler, quelles modicationsfaut-il faire au code caml ?4