INF 441 - TD 0
Tirage d'une permutation aléatoire
Le but de ce TD est de vérifier que votre machine est bien configurée et que
vous êtes capable d'écrire et d'exécuter un petit programme, d'une part en
Java, d'autre part en OCaml.
0. L'exercice
L'exercice, qui se veut très simple, est le suivant :
-
Définissez une méthode (ou une fonction) identity qui, étant donné un entier n,
alloue un tableau a de n éléments entiers, l'initialise de
façon à ce qu'il contienne les entiers de 1 à n, et renvoie
ce tableau.
-
Définissez une méthode (ou une fonction) shuffle qui, étant donné un tableau d'entiers (de longueur arbitraire), en
permute les éléments de façon aléatoire. Vous utiliserez le
mélange de Fisher-Yates.
-
Définissez une méthode (ou une fonction) print qui, étant donné un tableau d'entiers (de longueur arbitraire), en
affiche le contenu sur la sortie standard.
- Combinez le tout pour écrire un programme complet qui, pour n=20, affiche sur la sortie standard
une permutation aléatoire des entiers de 1 à n.
1. En Java
En principe, vous connaissez déjà tous les éléments nécessaires. On rappelle
que l'affichage sur la sortie standard peut se faire à l'aide des méthodes
System.out.print et System.out.println. On obtient un entier
aléatoire à l'aide de la méthode int nextInt (int bound) de la classe
Random.
Ou bien, on peut employer la fonction
Math.random()
qui produit un nombre flottant compris entre 0.0 au sens large et 1.0 au sens strict.
Sous Eclipse, une fois votre programme écrit,
exécutez-le
à l'aide de la commande Run
et vérifiez que l'affichage se fait bien dans l'onglet Console.
2. En OCaml
La syntaxe des définitions de fonctions, ainsi que
les opérations élémentaires sur les tableaux, sont rappelées dans la fiche
OCaml
en trois pages. L'affichage sur la sortie standard peut se faire à
l'aide des fonctions
print_int,
print_string et print_endline. On obtient un entier
aléatoire à l'aide de la fonction Random.int du module
Random.
Si vous n'êtes pas assez familier d'OCaml pour faire cet exercice,
contentez-vous d'écrire le programme let () = print_endline "Hello world!"
et de l'exécuter, comme décrit ci-dessous.
Sous Emacs :
-
Créez un fichier td0.ml et écrivez votre programme.
-
Compilez à l'aide de la commande ocamlbuild td0.native.
Si vous le souhaitez, vous pouvez compiler sans quitter Emacs : tapez
Meta-x compile ou bien utilisez la commande Compile...
du menu Tuareg.
-
Exécutez votre programme, depuis le terminal, via la commande
./td0.native. Vérifiez que votre programme affiche bien
le résultat attendu.
Sous Eclipse avec OcaIDE:
-
Passez d'abord dans la Perspective OCaml, en cliquant sur le
bouton OCaml situé en haut à droite.
-
Puis, créez un nouveau projet (New puis OCaml
project (ocamlbuild)).
-
Créez un nouveau module (New puis Module),
nommé par exemple td0. Vous pouvez alors éditer
le fichier td0.ml.
-
Éditez les propriétés du projet (clic droit sur le projet,
puis Properties, puis Project) et indiquez td0.native dans le
champ Targets. Cliquez sur Apply puis OK.
-
Une fois votre programme écrit,
exécutez-le via un clic droit sur td0.native dans l'onglet Navigator,
suivi de Run As puis OCaml executable.
Vérifiez que l'affichage se fait bien dans l'onglet Console.