13.07.2015 Views

ds3 2011-2012 - FIL

ds3 2011-2012 - FIL

ds3 2011-2012 - FIL

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!