Menu1 Menu2 Menu3 Menu4 Menu5 Menu6

On travaille ici sur les entiers (type int). Le but de cet exercice est de redéfinir les opérations connues sur les entiers. On suppose que les opérations déjà existantes sont seulement l'addition et la soustraction.

1) Redéfinissez une fonction mult a b qui rend a*b (on suppose a et b positifs).
Voyons deux moyens de faire cela. La première fonction sera impérative. On crée une référence valant 0 et on lui ajoute b fois la valeur a.
let mult a b =
let n = ref 0 in
for i = 1 to b do n:= !n + a done;
!n;;

Et une version récursive : on fait une fonction auxiliaire qui prend en arguments un résultat intermédiaire nommé resu et un indice i indiquant le nombre de fois qu'il reste à ajouter a. On commence avec resu = 0 et i = b. A chaque étape, on ajoute a à resu et on enlève 1 à i. On continue jusqu'à ce que i soit nul. Dans ce cas, on rend resu :
let mult a b =
   let rec aux i resu =
   if i = 0 then resu else aux (i-1) (a+resu)
in aux b 0;;

Remarque : l'hypothèse que b est positif est importante car sinon le programme ne se terminerait pas (par exemple dans la version impérative, on aurait une boucle pour i variant de 1 à une valeur négative, donc la boucle ne se terminera pas). L'hypothèse pour a n'est pas importante ici, mais était là pour la symétrie des deux arguments...

2) Ecrivez une fonction puissance telle que puissance a i rende ai (on suppose a et i positifs).
Solution

> Haut de la page