Université Pierre Marie Curie
Maîtrise d'informatique ---
AlgoProg
Mise à niveau Objective Caml
T.M.E 2
E. Chailloux P. Manoury
2-3 Oct. 2002
1 Triangle de Pascal
|
1 |
1 |
1 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
4 |
6 |
4 |
1 |
1 |
5 |
10 |
10 |
5 |
1 |
1 |
6 |
15 |
20 |
15 |
6 |
1 |
1 |
... |
|
On a, T(i,j) = T(i-1,j-1) + T(i-1,j) si l'indice de ligne i > 0 et
l'indice de colonne 0 < j £ i.
Questions
-
définir une fonction print_triangle qui affiche le
triangle de Pascal contenu dans une matrice carrée. On n'affiche que la
partie pertinente de la matrice.
- définir une fonction make_triangle telle que
make_triangle n crée une matrice (carrée) contenant les valeurs
d'un triangle de Pascal de hauteur n+1.
- si le coeur vous en dit, améliorez ces deux
fonctions de façon à ce qu'elle ne créent et n'utilisent que
l'espace mémoire nécessaire : un tableau de tableaux de taille croissante.
2 Chaînes et chiffres
Reprendre l'exercice ``Chiffres'' du TP précédent en utilisant des
chaînes de caractères plutôt que des listes.
3 Saisie contrôlée
Question
-
définir une fonction read_bound_int telle que
read_bound_int n lit sur l'entrée standard et retourne un
entier compris strictement entre 0 et n. Lorsque la saisie
n'est pas correcte, on redemande une entrée.
- on se donne le type
type play_or_quit = Quit | Play of int ;;
Définir une fonction read_bound_int_or_q telle que
read_bound_int_or_q n retourne ou bien Play i
lorsque i est une valeur entière lue sur l'entrée standard
comprise entre 0 et n ; ou bien Quit lorsque
l'utilisateur a abandonné la saisie en tapant le caractère
q.
4 Un ``chifoumi''
Jeu à deux joueurs : à chaque tour, chacun des joueur propose
simultamément un chiffre compris entre 0 et 5. Le score est
calculé de la façon suivante : 0 gagne sur 5, sinon le plus
grand chifrre gagne sur le plus petit ; en cas d'egalité, aucun
joueur ne marque.
Question
-
définir une fonction chifoumi_compare telle que
chifoumi_compare n1 n2 retourne -1 si n1
gagne sur n2, 0 si n1 est égal à
n2 et 1 sinon.
- définir la fonction chifoumi_game permettant à un
humain de jouer au chifoumi contre la machine.
-
on pourra utiliser les fonctions de saisie de l'exercice
préc'edent;
- on pourra donner à la machine une stratégie stupide ; tirer
un nombre au hasard (voir module Random).
5 Graphes abstraits
Soit la signature suivante :
(* ========================================================================== *)
(* == Abstract data type for graphs: signature == *)
(* ========================================================================== *)
type t
(* `create()' creates a new empty graph *)
val create: unit -> t
(* `add_node g n' adds the node `n' tout the graph `g'.
Does nothing if `n' is already a node of `g' *)
val add_node: t -> Node.t -> t
(* `add_edge g n1 n2' adds the edge `(n1,n2)' to the graph `g'
raise exception `Not_found' when `n1' or `n2' are not nodes of `g' *)
val add_edge: t -> Node.t -> Node.t -> t
(* `nodes_of g' give the list of nodes of graph `g' *)
val nodes_of: t -> Node.t list
(* `adj_of g n' returns the list of adjacents to `n' in `g'.
raises `Not_found' when `n' is not a node in `g'. *)
val adj_of: t -> Node.t -> Node.t list
(* `has_adj g n1 n2' returns `true' iff `g' contains an edge from `n1' to `n2'*)
val has_edge: t -> Node.t -> Node.t -> bool
(* `eq g1 g2' returns true iff the two graphs are equals (ie. same set of nodes
and, for each node, same set of adjacents) *)
val eq: t -> t -> bool
(* `print g' prints to terminal a representation of the content of the `g' *)
val print: t -> unit
Questions
-
donner une implantation de la signature ci-dessus
- définir, en utilisant les fonctions du module défini ci-dessus,
une fonction qui calcule la clôture réflexive d'un graphe.
- compilez une petite application qui utilise ce module et
cette fonction.
This document was translated from LATEX by
HEVEA.