exercices en langage caml

ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: حزيران 10, 2009, 05:00:55 مسائاً
مجموعة من التمارين في caml
لجامعة إيسطو بوهران
مع الحل
لا أرجو منكم سوا كلمة شكر والدعاء لي بالتوفيق
attachments_2009_06_09.zip - 0.03MB]exercices couriger en langage caml


mimik

  • Hero Member
  • *****
    • مشاركة: 1607
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: حزيران 10, 2009, 05:33:22 مسائاً
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .


salwa5

  • Sr. Member
  • ****
    • مشاركة: 400
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: حزيران 10, 2009, 05:44:56 مسائاً
بارك لله فيك و جزاك لله خيرا
و جعلها في ميزان حسناتك و ادخلك الجنة


becho

  • Jr. Member
  • **
    • مشاركة: 52
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: حزيران 10, 2009, 10:34:49 مسائاً
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية
عل هذا العمل واصل
لكن الرابط لا يعمل عندي
ارجو اصلاح الرابط


mimik

  • Hero Member
  • *****
    • مشاركة: 1607
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: حزيران 11, 2009, 10:50:58 صباحاً
الموضوع جيد لكن لم استطع الدخول


ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: حزيران 11, 2009, 02:16:16 مسائاً
أختي ميميك
الرابط شغال مئة بالمئة
لا أدري ربما المشكلة من عندك


ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #6 في: حزيران 11, 2009, 02:35:55 مسائاً
[mark=#FFFF00]
هاهو رابط آخر
[/mark]

 
http://rapidshare.com/files/243380822/attachments_2009_06_09.zip.html


becho

  • Jr. Member
  • **
    • مشاركة: 52
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: حزيران 11, 2009, 05:49:16 مسائاً
السلام عليكم ورحمة الله وبركاته
اولا مشكورة على العمل المميز واصلي
اختي الكريمة انا لم اقل لكي لا يعمل لكن لا يعمل معي فقط  
لوتسمحي غيري الثاني ايضا لايعمل معي
مشكوووووور .


ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #8 في: حزيران 11, 2009, 06:05:40 مسائاً
الملف عبارة عن مرفق
إن لم تنجح هادي تاني
خبرني تبقالي نديرلك نسخ كامل وصايي
دعواتكم


becho

  • Jr. Member
  • **
    • مشاركة: 52
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #9 في: حزيران 11, 2009, 07:14:08 مسائاً
السلام عليكم ورحمة الله وبركاته
اولا مشكووورة الجهد
والله اختي الكرمة مازال لايعمل معي


ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #10 في: حزيران 11, 2009, 07:38:47 مسائاً
هههههههههههه يعني المشكل فيك مش عندي
أكي لعيونك هاك التمارين

 
TP N° 02 CAML (Solution)

 
اقتباس

اقتباس

 
 
 

Exercice 00 : Donner les types des expressions suivantes :
 
 

Session 1 :
 
let a = 2 * 3 +1 ;;
Sol : int = 7
let a2 = a * a ;;
Sol : int = 49
a2 = 10 ;;
Sol : bool = false

 
 

Session 2 :
 
let a = 5 ;;
Sol : int = 5
let a = 12 in 2 * a +1 ;;
Sol : int = 25
let a2 = 2 * a ;;
Sol : int = 10
let a = 10 ;;
Sol : int = 10
a2 = a ;;
Sol : bool = true

 
 

Session 3 :
 
let a = 1 and b = 2 in a * b ;;
Sol : int = 2

 
 

Session 4 :
 
let a = 1 in let a = 2 and b = a in a + b ;;
Sol : int = 3

 
 

Session 5 :
 
let n = ’c’ in let n = 43 in char_of_int n ;;
Sol : char = ‘+’

 
 

Session 6 :
 
let m = "merci" and b = "beaucoup";;
Sol : m : string = "merci"
b : string = "beaucoup"
m;;
Sol : string = "merci"
m^b ;;
Sol : string = "mercibeaucoup"
m ^ " " ^ b ;;
Sol : string = "merci beaucoup"
m ^ " " ^ m ^ " " ^ m ;;
Sol : string = "merci merci merci"

 

Exercice 01 : Ecrire une fonction qui calcul la somme de 2 entiers.
Sol : let somme x y = x + y ;;

 

Exercice 02 : Ecrire une fonction qui incrémente de 1 un entier en utilisant la fonction somme précédente.
Sol : let incr x = somme 1 x ;;

 

Exercice 03 : Ecrire une fonction qui calcul le carré de x.
Sol : let carre x = x * x ;;

 

Exercice 04 : Ecrire une fonction qui calcul le cub de x.
Sol 1 : let cub x = x * x * x ;;
Sol 2 : (en utilisant la fonction carre précédente)
let cub x = carre x * x ;;

 
 

Exercice 05 : Ecrire une fonction qui converti une valeur x donnée en DA en son équivalent euro.
Rajouter let salaire = 20000 ;;
Qu’obtient-on pour euro salaire ?
Sol : let euro x = x /. 93.14 ;;
let salaire = 20000. ;; salaire : float = 20000.0
euro salaire ;; float = 214.730513206

 

Exercice 06 : Ecrire une fonction qui calcul l’énergie cinétique en physique EC :
m v = ½ m v².
Sol 1 : let cinetique m v = 0.5 *. m *. v *. v ;;

 

Exercice 08 : Ecrire une fonction qui calcul la valeur absolue d’un nombre x sachant que
|x| = x si x > 0 et –x sinon.
Sol 1 : let abs x = if x>=0 then x else -x ;;

 
 


 
 


TP N° 3 : CAML ( solutions )

اقتباس

 

Exercice 1 : Ecrire une fonction qui indique si un entier est pair ou pas.
Sol 1 : let pair x = (x mod 2) = 0 ;;
pair 8 ;; bool = true
pair 11 ;; bool = false
Sol 2 : let pair x = if x mod 2 = 0 then
print_string (string_of_int x ^" "^ "est un entier pair")
else print_string (string_of_int x ^" "^ "est un entier impair");;
pair 8 ;; 8 est un entier pair
pair 11 ;; 11 est un entier impair

Exercice 2 : Ecrire une fonction qui indique si p divise n ou pas.
Sol 1 : let divise p n = ((n / p)* p = n) ;;
divise 4 12 ;; bool = true
divise 4 7;; bool = false
Sol 2 : let divise p n = if n mod p =0 then "p divise n"
else "p ne divise pas n" ;;
divise 4 12 ;; string = "p divise n"
divise 4 7;; string = "p ne divise pas n"

Exercice 3 : Ecrire une fonction qui calcul le maximum entre 2 nombres.
Sol : let max n p = if n > p then n else p ;;
max 8 25 ;; int = 25

Exercice 4 : Ecrire une fonction qui calcul le nombre de jour d’un mois m.
Sol 1 :
let njour y m = match m with
| 1| 3| 5| 7| 8| 10| 12 -> 31
| 2 -> if (y mod 4 = 0) then 29 else 28
| 4| 6| 9| 11 -> 30;;
njour 2000 6;; int = 30
njour 2000 2;; int = 29
njour 2003 2;; int = 28
Sol 2 : let njour y m = match m with
|"janvier"|"mars"|"mai"|"juillet"|"aout"|"octobre"|"decembre" ->31
|"février" -> if (y mod 4 =0) then 29 else 28
|"avril"|"juin"|"septembre"|"novembre" ->30 ;;
njour 2000 6;; int = 30
njour 2000 2;; int = 29
njour 2003 2;; int = 28

Sol 3 : let njour m = match m with
| 2 -> 28
| 4| 6| 9| 11 -> 30
| _ -> 31 ;;
njour 6;; int = 30
njour 2;; int = 28

Exercice 05 :
Indique si l’argument est une lettre ou pas.
Solution :
1) let lettre_ou_non x = match x with
|`a`..`z`|`A`..`Z`-> "lettre"
|_-> "autre";;
2) let estletrre = function
|`a`..`z` | `A`..`Z`-> true
|_ -> false ;;

Exercice 5 : Ecrire une fonction qui indique si l'argument est une lettre ou pas.
Sol 1 : let lettre_ou_non x = match x with
|`a`..`z`|`A`..`Z`-> "lettre"
|_-> "autre";;

Sol 2 : let lettre_ou_non = function
| 'a' .. 'z' | 'A' .. 'Z' -> true
| _ -> false;;

Exercice 6 : Ecrire une fonction qui calcul le nombre minimum de pièces contenues dans une somme donnée en utilisant seulement des pièces de 10, 5 et de 1 DA.
Exemple pour une somme de 87 Da on aurait 11 pièces ( 8 de 10 DA; 1 de 5 DA et 2 de 1 DA).
Sol 1 : let pieces x = (x/10) + (x mod 10)/5 + (x mod 10) mod 5;;
pieces 87 ;; int = 11

Sol 2 : let pieces = function x ->
( x / 10) + let r = x mod 10 in (r / 5) + (r mod 5) ;;

pieces 87 ;; int = 11

Exercice 7 : Ecrire une fonction qui calcul la moyenne de deux nombres x et y (version en entier et en float. Faite la différence)
Sol : pour float : let moy x y = (x +. y) /. 2. ;;
pour entier : let moy x y = (x + y) / 2 ;;
rajouter : let g = moy 2 ;; g : int -> int =
Quel est le résultat de : g 6 ;; int 4

Exercice 8 : Ecrire une fonction qui calcul le produit de 2 nombres x et y.
Sol : let f x y = x * y ;;
Rajouter g = f 2;;
Qu'obtient-on? Uncaught exception: Invalid_argument "equal: functional value"
Rajouter g 6;; int = 12

Exercice 9 : Ecrire une fonction qui calcul l'expression 2x +7.
Sol : let f x = 2 * x + 7 ;;
f 5;; int 17
Rajouter g = function x -> (f x) + (f ( 2 * x)) - x ;;
Qu'obtient-on?
Rajouter g 2;; int = 24

 
 
Exercice 10 : Soit x = 3, ecrire une fonction qui a y associe y + x (translation de x)
Sol : let f y = y +x ;;
f 2;; int =5
Rajouter: let x = 0;;
Rappeler f pour y = 2.
f 2 ;; int = 5 on obtient toujours 5.
Conclusion : Dans l'évaluation d'une fonction, s'il existe des paramètres, ils ne sont pas réévaluer a chaque fois (leur valeur est prise une fois pour toutes). Donc s'ils changent, pour la fonction comme si rien ne sait passer.





ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #11 في: حزيران 11, 2009, 07:43:29 مسائاً
TP N° 4 : CAML (solutions)
اقتباس

 
 
 
 
Exercice 01 :
· Ecrire une fonction qui calcul le produit scalaire pour u1,u2, v1, v2 en sachant qu'il est égal à u1*v1 + u2*v2.
Sol : let ProduitScalaire (u1, u2, v1, v2 )= u1 *. v1 +. u2 *. v2;;
ProduitScalaire (1.0, 2.0, 5.5, 4.5);; On obtient float =14.5
· Ecrire une fonction (booléenne) qui renseigne si deux vecteurs sont orthogonaux ou pas.
Sol : let orthogonal (u1, u2, v1, v2) = (ProduitScalaire (u1, u2, v1, v2) = 0.);;
orthogonal (1.5, 2.0, 2.0, -1.5);; On obtient bool = true
· Ecrire une fonction qui calcul la norme d'un vecteur.
Sol : let norme (u1, u2) = sqrt (ProduitScalaire (u1, u2, v1, v2));;
norme (1.0, 2.0) ;; On obtient float = 2.236067

Exercice 02 :
· Ecrire une fonction qui calcul le maximum et le minimum de deux nombres entiers.
Sol : let max2 (x, y) = if x >= y then x else y;;
let min2 (x, y) = if x < y then x else y;;
· Ecrire une fonction qui ordonne deux entiers.
Sol : let ordre2 (x, y) = min2(x,y), max2 (x, y);;
· Ecrire une fonction qui calcul le maximum et le minimum de quatre nombres entiers.
Sol : let max4 (w, x, y, z) = max2 (max2(w, x), max2(y, z));;
L et min4 (w, x, y, z) = min2 (min2(w, x), min2(y, z));;
· Ecrire une fonction qui ordonne quatre entiers.
Sol : let ordre4 (w, x, y, z) = let ma = max4 (w, x, y, z) and mi = min4 (w, x, y, z)
and a = min2 (max2(w, x), max2(y, z))
and b = max2 (min2(w, x), min2(y, z))
in (mi, min2(a,b), max2 (a, b), ma);;
· Sans utiliser les précédentes fonctions écrire la fonction max3 qui calcul la maximum de trois entiers.
Sol 1 : let max3 (x, y, z) = if x >= y then if x >= z then x else z
else if y>= z then y else z;;

Sol 2 : let max3 (x, y, z) = if x >= y && x >= z then x
else if y>= z && y >= z then y
else z;;

La Récursivité :

Exercice 03 :
Ecrire une fonction qui calcul la multiplication de deux entiers par additions successives utilisant la formule récurrente a * b = a + (b-1) *a
Sol : let rec fois (a, b) = if b = 0 then 0 else a + fois(a, b-1);;
fois (5, 7);; donne int = 35

Exercice 04 :
Ecrire une fonction qui calcul la distance entre deux points d'une droite avec la prise en compte que si le premier est situé avant le second. Sinon on se ramène au cas normal c-a-d en inversant les deux entiers.
Sol : let rec distance a b = if a < b then b-a else distance b a;;

Exercice 05 :
Ecrire une fonction qui calcul le factoriel d'un nombre entier.
Sol : let rec fact n = if n = 1 then 1 else n* fact (n - 1);;
fact 3;; donne int = 6

Exercice 06 :
Ecrire une fonction qui calcul la puissance d'un nombre entier.
Sol : let rec puiss x n = if n = 0 then 1 else x * puiss x (n - 1);;
puiss 3 2;; donne int = 9

Exercice 07 :
Ecrire une fonction qui calcul le Nième terme de la suite de FIBONACCI donnée par la formule : U(0) = U(1) = 1 et U(N) = U(N-1) + U(N-2) pour tout N >=2.
Sol : let rec fibo n = if n = 0 or n = 1 then 1 else fibo (n-1) + fibo (n- 2) ;;

 
Exercice 08 : Méthode de Newton pour l'équation x2 - a = 0.
Sol : let rec racine a n = if n = 1 then 1. else
x = (racine a (n-1)) in ((( x *. x) -. a) /. (2. *. x));;
racine 2. 50;; donne float 1.4142135....


TP N° 5 CAML (SOLUTIONS)
اقتباس

 
D’autres fonctions à écrire ! !
Q 1 : Reprendre la fonction carre du cours, et l’utiliser pour définir la fonction polynôme :
P(X) = X2 + 2X + 1. Calculer P(1) et P(2).
Sol :
let carre(x) = x * x;;
let p(x) = carre(x) + 2 * x + 1;; (* p : int -> int = fun *)
p(1);; (* - : int = 4 *)
p(2);; (* - : int = 9 *)

Q 2 : Écrire la fonction définie par: f(x) = x/2 si x est pair 3x + 1 si x est impair
Sol : let f(x) = if x mod 2 = 0 then x/2 else 3*x+1;; (* f : int -> int = *)

Les COUPLES ET n-UPLETS :

Q 3 : On représente des nombres complexes comme des couples de réels (re,im).
Définir des fonctions conj(z) (conjugué de z) et mul(z1,z2) (produit de z1 et z2).
Écrire une fonction qui calcule |z|2 pour tout z.
Sol : let conj(re,im) = (re,-.im);; (* conj : 'a * float -> 'a * float = *)

let mult((ra,ia),(rb,ib)) = (ra *. rb -. ia *. ib),(ra *. ib +. rb *. ia);;
(* mult : (float * float) * (float * float) -> float * float =

let modu2(z) = let (r,i) = mult(z,conj(z)) in r;; (* modu2 : float * float -> float = *)
modu2 (0.,1.);; (* - : float = 1.0 *)
modu2 (1.,1.);; (* - : float = 2.0 *)

GESTION DES POLYNOMES :
Exercice : On désire faire la gestion de polynômes monômes à l’aide de tableaux.
On suppose pour cela que les monômes des polynômes sont tous positifs ou nuls.
(Pas de monômes de degré négatifs).
Questions :

1 - Ecrire une fonction imprime_Monome qui permet d’afficher un monôme (c-a-d son coeff et son degré) de la façon suivante coeff ^ X degré.
Pour une meilleur présentation on n’affichera pas :
- Le monôme si le coeff est nul
- Le coeff s’il est de 1.
- coeff X^ 0 mais seulement son coeff (si degré = 0)
Sol :
let imprime_monome coeff degre =
if degre = 0 then print_int coeff
else if coeff <> 0 then
begin print_string « + » ; if coeff <> 1 then print_int coeff ;
print_string « x » ;
if degre <> 1 then begin print_string « ^ » ;
print_int degre ;
end
end ;;
Exemple :
imprime_monome 3 4;; donnera : + 3 x ^ 4- : unit = ()

2 – Ecrire une fonction imprime_polynome qui permet d’afficher un polynôme.
(Il suffit de faire appel à la fonction imprime_Monome pour tous les monômes du polynôme à afficher).
Exemple Pour le polynôme P(X) = X2 + 2X + 3 on verrait : 3 + 2 X + X ^2
Sol :
let imprime_poly p = for i = 0 to vect_length p – 1 do imprime_monome p.(i) i done ;;
Pour l’exemple: let p=[|3; 2; 1|];;
imprime_poly p;;
Ont aura 3 + 2 x + x^2- : unit = ()

 
Les références :

Exercice 1 : Ecrivez un programme qui crée une boite nommée b contenant 10, puis qui augmente le contenu de cette boite de 5, et qui pour terminer affiche le contenu de la boite (qui sera 15).
Sol : let b = ref 10 in b := !b + 5; print_int !b;;
Ont aura: 15- : unit = ()

Exercice 2 : Ecrivez un programme qui demande un entier n à l'utilisateur, et qui lui demande ensuite n fois un entier, pour afficher à la fin la somme de ces n entiers.
Sol : let n = read_int() in
let total = ref 0 in for i = 1 to n do let entier = read_int() in total := !total + entier;
done;
print_int !total;;
Exemple:
4 la valeur de n
3
2 les valeurs de la variable entier
7
4
16- : unit = () le résultat (valeur de total)

Exercice 3 : Modifier le code précédent pour écrire un programme qui calcule la somme des entiers de 1 à n, où n est donné par l'utilisateur.
Sol : La modification à faire, c'est de remplacer le read_int() par la valeur du compteur i. On peut alors remplacer entier par i dans l'affectation.
let n = read_int() in let total = ref 0 in for i = 1 to n do total := !total + i; done;
print_int !total;;
Exemple:
5 la valeur de n
15- : unit = () le résultat (valeur de total)

Exercice 4 : Modifier encore le code précédent pour écrire un programme qui calcule la somme des racines des nombres entiers de 1 à n, où n est donné par l'utilisateur. Vérifiez que pour n = 100, le résultat de votre programme soit bien 671.462947103.
Sol : Cette fois si, il faut utiliser une boite contenant des réelles. Le contenu initial est alors 0. (le zéro des réels). Pour prendre la racine de la valeur du compteur, il faut d'abord le convertir en un réel, avec float_of_int on le rappelle. Il ne faut pas oublier de mettre un print_float à la fin pour afficher le total.
let n = read_int() in let total = ref 0. in for i = 1 to n do let ajout = sqrt (float_of_int i) in total := !total +. ajout;
done;
print_float !total;;
Exemple:
100 la valeur de n
671.462947103 - : unit = () le résultat (valeur de total)

Exercice 5 : Ecrivez un programme qui demande à l'utilisateur un entier n, puis qui lui demande n entiers, et affiche alors le nombre d'entiers fournis qui étaient supérieurs ou égaux à 5.
Sol : On utilise une boite nommée quantite qui retient le nombre d'entiers supérieurs à 5 qui ont déjà été fournis. A chaque fois que l'utilisateur donne un entier, on test s'il est supérieur à 5, et dans ce cas, on remplace augmente le contenu de quantité de 1.
Sol : let n = read_int() in let quantite = ref 0 in for i = 1 to n do let valeur = read_int() in
if (valeur >= 5)
then quantite := !quantite + 1;
done;
print_int !quantite;;
Exemple:
4 la valeur de n
7
8
2 Les valeurs de la variable valeur
3
2- : unit = () le résultat (valeur de la variable quantite)

 


ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #12 في: حزيران 11, 2009, 07:45:05 مسائاً
tp n° 6 caml (solutions)

اقتباس

les listes :

exercice 1 :  Ecrire une fonction qui permet de  compter  le  nombre d’éléments dans une liste.
sol  :    Let  rec longueur l =  match  l  with
| []  ->  0
| (a :: L_suite)  ->  1  +  (longeur  l_suite) ;;
exemple :
longueur [1 ;5 ;7 ;1 ;0] ;;     donnera :     - : Int = 5

exercice 2 :  Ecrire une fonction qui permet de  calculer  la somme  des éléments dans une liste.
sol 1 : Let  rec   somme  =  function
| []  ->  0
| (r ::q)  ->   r +  somme   q ;;
sol 2 : Let  rec   somme l =  match l with
| []  ->  0
| (r ::q)  ->   r +  somme   q ;;
sol 3 : Let  rec   somme l =        if  l = []  then  0  
else (lhd l) + (somme (tl l));;

exemple :
somme [1 ;5 ;7 ;1 ;0] ;; donnera :     - : Int = 14

exercice 3 :  Ecrire une fonction qui permet de  tester  la  présence d’un élément dans une liste.
sol :     Let  rec   existe    element  l =  match l with
| []   ->  false
| (t ::q)   when   t = element  ->  true
| (t ::q) ->   existe    element  q ;;

pour   existe   1  [5 ; 4 ; 3 ; 2 ; 1 ; 2 ; 2 ; 3 ; 4 ; 5] ;;                  retourne : Bool =  true
pour   existe   6  [5 ; 4 ; 3 ; 2 ; 1 ; 2 ; 2 ; 3 ; 4 ; 5] ;;                  retourne : Bool =  false



exercice 4 :  Ecrire une fonction qui permet de  compter  le  nombre d’occurrence d’un nombre dans une liste.
sol  1 :             Let  rec   compter   n  ln  =
if   ln  = []   then  0
                                   else      if  hd  ln = n  then 1 +  compter  n (tl  ln)
                                                           else  compter  n  (tl  ln) ;;

sol  2 : Avec filtrage :
let   rec   compter  n l = match l with
| [] ->  0
| h : :l ->  let   resultat  = compter n l in
          if h = n  then   1 + resultat  else  resultat ; ;

pour   compter 1  [1 ; 2 ; 3 ; 44 ;  1 ; 5 ; 6 ;  34 ; 56 ; 82 ; 1 ; 0];;                     on aurait  int = 3

exercice 5 :  Ecrire une fonction qui permet de  multiplier par x tous les éléments d’une liste l.
sol :
let rec   mult  x  l = match  l   with
| [] ->   []
|y :: Reste  ->  (x*y) :: (mult  x  reste) ;;

pour  mult 2 [1 ; 2 ; 3 ; 44 ;  1 ; 5 ; 6 ;  34 ; 56 ; 82 ; 1 ; 0];;    
on aurait  - : Int list = [2; 4; 6; 88; 2; 10; 12; 68; 112; 164; 2; 0]

exercice 6 :  Ecrire une fonction qui réalise  la concaténation de deux listes.
sol 1  :             Let  concat  l m =   l  @  m ;;
sol  2 :             Let rec concat l  m =  match l  with  
| []  ->  m
| x ::reste  ->    x :: (concat  reste  m) ;;

pour concat  [1 ; 2 ; 3 ; 44 ] [ 5 ; 6 ;  34 ; 56 ; 82 ; 1 ; 0];;        
on aurait - : Int list = [1; 2; 3; 44; 5; 6; 34; 56; 82; 1; 0]





exercice 7 :  Ecrire une fonction qui réalise  la fusion de deux listes  supposées déjà triées.
sol  :   Let  rec  fusion l1   l2 =  match  (l1, l2 )   with
| ([], [])  ->  []
| (_, [])  ->   l1
| ([], _)   ->  l2
| (x :: Reste1,  y :: Reste2) ->    if  x <= y   then    x :: (fusion  reste1   l2)
  else    y :: (fusion  l1 reste2) ;;

pour  fusion  [1 ; 5 ; 6 ; 44 ] [ 2; 5 ; 6 ;  34 ; 56 ; 82];;  
on aurait : - : Int list = [1; 2; 5; 5; 6; 6; 34; 44; 56; 82]

pour fusion  ["chat" ; "chien" ; "ours" ] ["miel";"os" ;"souris"];;  
on aurait : - : String list = ["chat"; "chien"; "miel"; "os"; "ours"; "souris"]

exercice 8 :  Ecrire une fonction qui recherche un élément indice i dans une liste.
sol 1  :    Let rec cherche l i =
if  (l = []) then  failwith  "rang incorrect"
else  if i = 1 then  hd  l
else  cherche  (tl l)  (i-1);;
sol 2  :    Let rec cherche l i = match l with
|[]-> failwith  "rang incorrect"
|(x::r) -> if i= 1 then x  else  cherche r (i-1);;

pour cherche [1; 2; 5; 6; 34; 44; 56; 82] 4;;
on aurait : Int = 6



[/left]


ميس31

  • Hero Member
  • *****
    • مشاركة: 1513
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #13 في: حزيران 11, 2009, 07:47:23 مسائاً
هذا أقصى ما أستطيع فعله
ارجو أن تستفيد
[/color][/size][/color][/color][/size]


becho

  • Jr. Member
  • **
    • مشاركة: 52
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #14 في: حزيران 11, 2009, 08:40:50 مسائاً
السلام عليكم ورحمة الله وبركاته
الله ينجحك اختي الكريمة
الله يحفظك ويعطيك ماتتمنين