Académique Documents
Professionnel Documents
Culture Documents
Faculté Informatique
TP Caml
Section 3 – Groupes 2 & 4
TP CaML Ligh
5. Max3 qui calcule le maximum de 3 réels de 2 façons différentes (Sans utiliser Max,
puis en utilisant Max).
let Max3 x y z = if x>y then (if x>z then x else z) else (if y>z then y else z);;
let Max3 x y z = Max(Max x y) z;;
8. SCarre qui calcule la somme des carrés de 2 entiers (en utilisant la fonction Carre).
9. ValAbs qui calcule la valeur absolue d’un entier. - Abs qui calcule la fonction :
Abs (x, y ) = | x – y | .
11. Pair qui retourne vrai si son argument est un entier pair, faux sinon.
12. Prem qui retourne vrai si son argument est un entier premier, faux sinon
let rec Fib n = if n=0 then 0 else if n=1 then 1 else Fib (n-1)+Fib (n-2) ;;
let rec PGCD2 a b= if a=b then a else if a>b then PGCD (a-b) b else PGCD a (b-a);;
8. SumSerie : la fonction qui calcule la somme des n premiers termes de la série
harmonique de la forme :
let rec SumSerie n = if n=0 then 0. else 1.0 /. float_of_int n +. SumSerie (n-1);;
TP4 : Les Listes
Ecrire en langage CAML les fonctions récursives suivantes :
1. Calcule le nombre d’éléments d’une liste (nbElm).
3. Calcule la moyenne des éléments d’une liste en utilisant les fonctions nbElm et
somElm.
7. Supprime un élément à la fin d’une liste non vide (utiliser la fonction nbElm).
let rec supp_fin x = if nbElm x=1 then [] else hd x :: supp_fin (tl x);;
9. Inverse une liste. 9. Projette l’élément n°I (I >0) d’une une liste non vide.
let rec appartient x liste = if liste=[] then false else if x=hd liste then true else appartient
x (tl liste);;
11. Prend un nombre entier et une liste d'entier et compte les occurrences de ce
nombre dans cette liste.
12. Calcule la fonction Map définie par : Map f [a1 ; a2 ; … ; an] -> [(f a1) ; (f a2) ; … ; (f
an)] (Distribue la fonction f sur les éléments de la liste).
• Appliquer la fonction Map pour élever au carrée les éléments d’une liste
d’entiers.
• Appliquer la fonction Map pour inverser les mots dans une liste de mots
let f x = x+1;;
let rec map f liste = if liste=[] then [] else f (hd liste)::map f (tl liste);;
let rec supp_occ x liste = if hd liste = x then tl liste else hd liste::supp_occ x (tl liste);;
let rec min liste = if tl liste=[] then hd liste +0
else if hd liste>=hd(tl liste) then min(tl liste)
else min(hd liste :: tl(tl liste));;
let rec tri liste = if liste=[] then [] else min liste :: tri(supp_occ(min liste) liste);;
tri [5;1;8;3;0;10];;
TP5 : EXERCICES GENERAUX
Exercice 1
Ecrire une fonction calculant le produit de deux nombres suivant la méthode de la
multiplication dite égyptienne :
• 0 si x=0
• Mult_egypt (x,y) = Mult_egypt(x/2, 2*y) si x est pair
• y + Mult_egypt(x-1, y) sinon
Exercice 2
Ecrire une fonction calculant le ppcm (plus petit commun multiple). On pourra s'aider du
pgcd (plus grand commun diviseur).
Exercice 3
1. Ecrire une fonction inv qui inverse un mot. Exemple "CAML" sera transformé en "LMAC"
2. Ecrire une fonction palind qui reconnaît les palindromes, comme "RADAR" ou
"eluparcettecrapule"
« Toutes les années divisibles par 4 sont bissextiles sauf celles qui sont divisibles par 100 et
qui ne sont pas divisibles par 400. »
Exercice 5
1. Ecrire la fonction prod qui fait le produit de x par y, sans utliser l’opérateur *.
Exercice 6
1. Ecrire une fonction récursive rest qui calcule le reste de la division entière de x par y.
2. Ecrire une fonction récursive quot qui calcule le quotient de la division entière de x par y.
Remarque : On ne pourra pas utiliser les opérations / et mod