تمارين محلولة في

mimik

  • Hero Member
  • *****
    • مشاركة: 1607
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: أيار 11, 2009, 04:41:46 مسائاً
Écrire la fonction factorielle exo1
let rec factorielle n = if n = 0 then 1 else n * factorielle(n-1);;factorielle : int -> int = factorielle 4;;- : int = 24
Exo2Définir une fonction calculant le produit de deux nombres suivant la méthode de la multiplication dite égyptienne.
let rec multiplication_egyptienne p q = if p = 0 then 0 else if (p mod 2) = 0 then multiplication_egyptienne (p/2) (2*q) else q + multiplication_egyptienne (p-1) q;;multiplication_egyptienne : int -> int -> int = multiplication_egyptienne 3 4;;- : int = 12multiplication_egyptienne 4 3;;- : int = 12
Exo3Définir une fonction calculant la puissance entière d'un entier selon le même principe que la multiplication égyptienne.
let rec puissance_egyptienne p q = if q = 0 then 1 else if q mod 2 = 0 then let r = puissance_egyptienne p (q/2) in r * r else p * puissance_egyptienne p (q-1);;puissance_egyptienne : int -> int -> int = puissance_egyptienne 4 5;;- : int = 1024puissance_egyptienne 5 4;;- : int = 625
exo2Définissez une fonction calculant le pgcd de deux nombres entiers.
let rec pgcd n m = if n > m then pgcd m n else if n = 0 then m else let p = m / n and r = m mod n in pgcd r n;;pgcd : int -> int -> int = pgcd 3 12;;- : int = 3Définir une fonction calculant le ppcm. On plet ppcm n m = (n*m)/(pgcd n m);;ppcm : int -> int -> int = ppcm 4 10;;- : int = 20
 
 
exo 6 Calculez les nombres de Catalan. On rappelle que: Catalan(0) = 1, Catalan(1) = 1, Catalan(n) = somme de Catalan(p)*Catalan(q) pour tout p+q = n-1. Voici les premiers nombres de
, 16796 Catalan: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 486
let rec somme f = function 0 -> f(0)| n -> f(n) + somme f (n-1);;somme : (int -> int) -> int -> int = let rec catalan = function 0 -> 1| 1 -> 1| n -> let f p = catalan p * catalan (n-1-p) in somme f (n-1);;catalan : int -> int =

exo 7
Calculez les coefficients du binôme par la méthode récursive simple: Cnp = Cn-1p + Cn-1p-1
let rec nombre_de_pascal n p =
  if p = 0 or p = n then 1
  else nombre_de_pascal (n-1) (p-1) + nombre_de_pascal (n-1) p;;
nombre_de_pascal : int -> int -> int =
for i = 0 to 10 do
  for j = 0 to i do
    print_int (nombre_de_pascal i j);
    print_string " "
  done;
  print_newline ()
done;;



GNX

  • Newbie
  • *
    • مشاركة: 37
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: أيار 12, 2009, 11:57:40 صباحاً
شكرا لك و جزاك الله خيرا


mimik

  • Hero Member
  • *****
    • مشاركة: 1607
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: أيار 12, 2009, 05:46:37 مسائاً
شكرا على المرور