Univ. Lille 1 - Licence Informatique S3H 2ème année 2014-2015
Programmation
TP no2
1 compilation séparée
Question 1 Télécharger le fichier exemple_separe.tgz Cette archive contient trois fichiers.
Question 2 Extraire les trois fichiers. Lisez les. Le compilateur ocamlc permet de compiler des
morceaux de programmes. Ainsi le fichier outils_tp.ml contient la déclaration d’une fonction
et d’une procédure qui sont utilisées par le fichier prog_princ_tp.ml. Pour réaliser une simple
compilation, sans produire de programme exécutable, on utilise l’option -c du compilateur. Par
exemple si on tape :
make outils_tp.cmo
Cela va lancer l’exécution de la commande :
ocamlc -c outils_tp.ml
et cela a pour effet de produire le fichier outils_tp.cmo
Le Makefile contient les règles permettant de construire l’exécutable prog_princ_tp
Question 3 Construire le programme prog_princ_tp et testez le
Question 4 Réalisez un programme nommé autre_prog_princ.ml qui utilise le même outil mais qui
produit :
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
Question 5 Completez le Makefile afin d’automatiser la compilation de ce nouveau programme. On peut
charger un module déjà compilé dans l’interprète, de deux manières différentes :
en utilisant la directive #load "nomdumodule"
ou en précisant le nom du module lors du démarrage de l’interprète.
le nom caml d’un module est obtenu en mettant la première lettre en majuscule et en retirant
le suffixe .ml. le fichier outils_tp.ml contient donc la déclaration du module caml nommé
Outils_tp
1
les éléments définis dans le module sont alors utilisables
– soit en utilisant leur nom préfixé par le nom du module suivi d’un point par exemple
Outil_tp.image_ligne
soit en ouvrant le module. Cela permet de rendre directement disponible les éléments définis
dans le module sans avoir à préciser le nom du module.
Question 6 testez les deux méthodes.
2 la fonction cmp
Question 7 Réaliser une fonction cmp dont la spécification est la suivante :
cmp a b vaut 1 si et seulement si a > b
cmp a b vaut 0 si et seulement si a=b
cmp a b vaut -1 si et seulement si a < b
Question 8 Quel est le type de cette fonction ?
En OCaml cette fonction est déjà prédéfinie et se nomme compare
Question 9 Évaluer les expressions suivantes :
compare ’a’ ’b’;;
compare "Zoe" "arthur";;
compare infinity 5.0;;
compare 5 -1
compare (2,3) (2,4);;
compare false true;;
3 l’ordre lexicographique
L’ordre lexicographique est l’ordre généralement utilisé par les dictionnaires. Plus formellement,
si adésigne un tableau de taille met bun tableau de taille n, on dit que abdans l’ordre
lexicographique si et seulement si
appelons i0le plus grand indice, tel que pour tout 0i<i0on ait : a.(i) = b.(i)
on a i0>=mou bien (i0< n et a.(i0)b.(i0))
Question 10 En utilisant l’opérateur ( <= ) sur les éléments des tableaux, réaliser une fonction nommée
cmptab qui permet de comparer deux tableaux en utilisant l’ordre lexicographique
Question 11 Évaluer les expressions suivantes :
cmptab [| 1 ; 2 ; 3 |] [| 1; 2 ; 2 |];;
cmptab [| 1 ; 2 ; 3 |] [| 1; 2 ; 3 |];;
cmptab [| 1 ; 2 ; 3 |] [| 1; 2 |];;
cmptab [| 1; 2 ; 2 |] [| 1 ; 2 ; 3 |];;
cmptab [| 1; 2 ; 3 |] [| 1 ; 2 ; 3 |];;
cmptab [| 1; 2 |] [| 1 ; 2 ; 3 |];;
cmptab [||] [||] ;;
2
En OCaml, la relation d’ordre sur les tableaux, est l’ordre lexicographique induit par l’ordre sur
les éléments du tableau.
4 trier un tableau
Voici l’algorithme de selection du minimum dans une tranche de tableau :
Algorithme 0.1 Algorithme de sélection du minimum dans une tranche de tableau
Entrée : tun tableau de longueur n, et aet bdeux indices tels que 0ab < n.
Sortie : indice d’un élément minimal de la tranche t(a..b)
1: indice_min := a
2: pour i variant de a+ 1 àbfaire
3: si t(i)< t(indice_min)alors
4: indice_min := i
5: fin si
6: fin pour
7: renvoyer indice_min
Et voilà l’algorithme du tri par sélection du minimum :
Algorithme 0.2 Algorithme de tri par sélection du minimum
Entrée : tun tableau de longueur n.
Sortie : tun tableau trié de longueur ncontenant les mêmes éléments.
1: pour ivariant de 0 à n2faire
2: indice_min := sélectionner_min(t, i, n 1)
3: échanger t(indice_min)et t(i)
4: {À ce stade, la tranche t(0..i)est triée
et contient les i+ 1 plus petits éléments de t}
5: fin pour
6: {Le tableau test trié.}
Question 12 Implantez en Caml cet algorithme, en écrivant une procédure de type ’a array -> unit
5 Une transformation de chaîne de caractères
On va maintenant présenter une transformation de chaîne de caractères, connues sous le noms
de transformée de Burrows-Wheeler. Cette transformation possède des propriétés assez étonnantes.
Elle est utilisée dans l’algorithme de compression bzip
Soit sla chaîne à transformer et soit nsa longueur On construit d’abord un tableau de ncases
contenant les chaines obtenues en faisant tourner la chaine spar exemple :
3
hana aime l’ananas.
ana aime l’ananas.h
na aime l’ananas.ha
a aime l’ananas.han
aime l’ananas.hana
aime l’ananas.hana
ime l’ananas.hana a
me l’ananas.hana ai
e l’ananas.hana aim
l’ananas.hana aime
l’ananas.hana aime
’ananas.hana aime l
ananas.hana aime l’
nanas.hana aime l’a
anas.hana aime l’an
nas.hana aime l’ana
as.hana aime l’anan
s.hana aime l’anana
.hana aime l’ananas
Puis on trie ce tableau.
aime l’ananas.hana
l’ananas.hana aime
’ananas.hana aime l
.hana aime l’ananas
a aime l’ananas.han
aime l’ananas.hana
ana aime l’ananas.h
ananas.hana aime l’
anas.hana aime l’an
as.hana aime l’anan
e l’ananas.hana aim
hana aime l’ananas.
ime l’ananas.hana a
l’ananas.hana aime
me l’ananas.hana ai
na aime l’ananas.ha
nanas.hana aime l’a
nas.hana aime l’ana
s.hana aime l’anana
Enfin la transformée de ss’obtient en ne conservant que le dernier caractère pour chaque case.
aelsn h’nnm.a iaaaa
Réalisez une fonction nommée tbw qui associe à une chaîne sla tranformée de Burrows-Wheeler
de cette chaîne.
À suivre ...
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !