module Cdst: sig endPages engendrées avec l'outil ocamldoc
Exo. I
|
val pi : floatval cart_of_pol : float -> float -> float * float(cart_of_pol d t) renvoie les coordonnées cartésiennes
corespondant aux coordonnées polaires d'angle t et de
mesure d.Cdst.cart_of_polval spirale : unit -> unitspirale() écrit sur la sortie standard les coordonnées
cartésiennes des points d'une spirale d'Archimède donnés
par la suite de coordonnées polaire d'angle variant de 0 à
13pi/2 avaec un pas de pi/60val spirale_a : unit -> unitfor
Exo. II
|
val add_elt : 'a -> 'a list -> 'a list(add_elt e s) ajoute l'élément e à la liste s
s'il n'y figure pas déjà.add_elt
let s = (add_elt 1 []);;
let s = (add_elt 1 s);;
let s = (add_elt 2 s);;
let s = (add_elt 3 s);;
let s = (add_elt 3 s);;
let s = (add_elt 2 s);;
let s = (add_elt 1 s);;
val add_elt_a : 'a -> 'a list -> 'a listList.memval set_of_list : 'a list -> 'a listset_of_list xs renvoie l'ensemble (i.e. liste sans redondance)
des éléments de xsset_of_list
let s = (set_of_list []);;
let s = (set_of_list [1;2;3]);;
let s = (set_of_list [1;1;2;3]);;
let s = (set_of_list [1;2;3;1]);;
let s = (set_of_list [1;2;2;3]);;
let s = (set_of_list [1;2;3;2]);;
let s = (set_of_list [3;1;2;3]);;
let s = (set_of_list [1;3;2;3]);;
val set_of_list_a : 'a list -> 'a listCdst.add_elt (Quest II.1)val set_of_list_b : 'a list -> 'a listval set_of_list_c : 'a list -> 'a list List.fold_leftval union : 'a list -> 'a list -> 'a list(union s1 s2) revoie l'union des ensembles s1 et s2union
(union [] [])
(union [] [1;2;3])
(union [1;2;3] [])
(union [1;2;3] [1;2;3])
(union [1;2;3] [2;4;6])
(union [1;3;5] [2;4;6])
val union_a : 'a list -> 'a list -> 'a lists2 comme
accumaulatuerval union_b : 'a list -> 'a list -> 'a listList.fold_leftval inter : 'a list -> 'a list -> 'a list(inter s1 s2) renvoie l'intersection des ensembles s1 et s2inter
(inter [] [])
(inter [] [1;2;3])
(inter [1;2;3] [])
(inter [1;2;3] [1;2;3])
(inter [1;2;3] [2;4;6])
(inter [1;3;5] [2;4;6])
val inter_a : 'a list -> 'a list -> 'a listval inter_b : 'a list -> 'a list -> 'a listif.val inter_c : 'a list -> 'a list -> 'a listList.filtre:
les éléments de s1 inter s2 sont les élements
de s1 qui sont aussi dans s2.
Exo. III
|
type bin_seq1 = bool list
type bin_seq2 = bool array
val nb_occ_elt1 : 'a -> 'a list -> int(nb_occ_elt1 e s) renvoie le nombre d'occurrences de e dans
la suite binaire s.nb_occ_elt1
(nb_occ_elt1 1 [])
(nb_occ_elt1 1 [1])
(nb_occ_elt1 1 [1;1])
(nb_occ_elt1 1 [1;2;1])
(nb_occ_elt1 1 [2;3;4])
(nb_occ_elt1 1 [1;2;3;4])
(nb_occ_elt1 1 [2;3;4;1])
val nb_occ_elt1_a : 'a -> 'a list -> intif.val nb_occ_elt1_b : 'a -> 'a list -> intList.fold_left.val nb_occ_elt1_c : 'a -> 'a list -> intList.iter
ainsi qu'une référence locale.val nb_occ_elt2 : 'a -> 'a array -> int(nb_occ_elt2 e s) renvoie le nombre d'occurrences de e dans
la suite binaire s.val nb_occ_elt2_a : 'a -> 'a array -> intArray.iter.val alt_seq1 : 'a list -> bool(alt_seq1 s) renvoie true si et seulement si s
est une suite binaire alternée.alt_seq1
(alt_seq1 [])
(alt_seq1 [0])
(alt_seq1 [1])
(alt_seq1 [0;1])
(alt_seq1 [1;0])
(alt_seq1 [0;1;0])
(alt_seq1 [1;0;1])
(alt_seq1 [0;1;0;1])
(alt_seq1 [1;0;1;0])
(alt_seq1 [0;1;0;0])
(alt_seq1 [1;0;0;1])
Codage avec des tableaux (2)
val alt_seq2 : 'a array -> bool(alt_seq2 s) renvoie true si et seulement si s
est une suite binaire alternée.val alt_seq2_b : 'a array -> boolwhile: la fonction
retourne false dès que la suite n'est plus alternée.
Commentaire: solution préférable ici.
val nb_sub_hom1 : 'a -> 'a list -> int(nb_sub_hom1 e s ) renvoie le nombre de sous-suites e-homogènes
de s.
Algorithme: on explore (quand c'est possible) les éléments
deux par deux, on compte +1 lorsque l'on "sort" d'une
(sous)suite de e.
nb_sub_hom1
(nb_sub_hom1 1 [])
(nb_sub_hom1 1 [1])
(nb_sub_hom1 1 [1;1])
(nb_sub_hom1 1 [1;1;1])
(nb_sub_hom1 1 [1;0])
(nb_sub_hom1 1 [1;1;0])
(nb_sub_hom1 1 [1;1;1;0])
(nb_sub_hom1 1 [0;1])
(nb_sub_hom1 1 [0;1;1])
(nb_sub_hom1 1 [0;1;1;1])
(nb_sub_hom1 1 [1;0;1])
(nb_sub_hom1 1 [1;1;0;1])
(nb_sub_hom1 1 [0;1;0])
(nb_sub_hom1 1 [0;1;1;0])
(nb_sub_hom1 1 [0;1;1;0;1])
val nb_sub_hom1_a : 'a -> 'a list -> intval nb_sub_hom1_b : 'a -> 'a list -> intval nb_sub_hom1_c : 'a -> 'a list -> intif unilatère.val nb_sub_hom1_d : 'a -> 'a list -> inte ou non).val nb_sub_hom1_e : 'a -> 'a list -> intval nb_sub_hom1_f : 'a -> 'a list -> inte
et un second pour les éléments égaux à e.
Utilise des définitions (locales) mutuellement récursives.
val nb_sub_hom2 : 'a -> 'a array -> int(nb_sub_hom2 e s) renvoie le nombre de sous-suites e-homogènes
de s.val nb_sub_hom2_a : 'a -> 'a array -> intwhile.val max_sub_hom1 : 'a -> 'a list -> int(max_sub_hom1 e s) renvoie la longueur de la plus longue sous-suite
e-homogène de s.max_sub_hom1 analogue à nb_sub_hom1val max_sub_hom2 : 'a -> 'a array -> int(max_sub_hom2 e s) renvoie la longueur de la plus longue sous-suite
e-homogène de s.