Du Caml pour changer

Du Caml pour changer - Divers - Programmation

Marsh Posté le 28-02-2006 à 00:55:00    

voila c'est un DM d'info dont j'aimerais parler avec vous
L'objectif du programme est de trouver les nombre qui sont palindrome dans 2 bases differentes je rapelle pour les oublieux qu'un palindrome est un nombre ou encore un mot qui se lit dans les 2 sens comme 505
base10 transforme un entier sous forme de liste en base b (genre [1;2;3] pour 123 en l'entier correspondant en base 10
basebp fait le contraire
string_of_list crée comme son nom l'indique une chaine de caractère a base d'une liste
groupe crée et teste dans la seconde base tous les palindromes "associés" à l'entier k  
recherche sert à itéter groupe jusqu à un entier donné ici 8000  
 Donc voila le code si vs avez besoin de plus d'explication pas de pb je repasse demain
Faites vos remarques, criiquez et tout et tout...

Code :
  1. let base10 (a, b)=
  2. let L = ref (vect_of_list(rev (a))) in
  3. let A = ref 0 in
  4. for i= 0 to ((vect_length(!L))-1) do
  5. A:=!A+ !L.(i) * int_of_float(float_of_int(b)**float_of_int(i));
  6. done;
  7. !A;;
  8. let string_of_list (l)=
  9. let A = ref "" in
  10. let B = ref (vect_of_list(l)) in
  11. for i = 0 to (vect_length(!B)-1) do A:= !A^string_of_int !B.(i);
  12. done;
  13. !A;;
  14. let basebp (a, b)=
  15. let Q = ref a in
  16. let A = ref [] in
  17. while !Q <> 0 do A:=[(!Q mod b)] @ !A ;  Q:= !Q quo b;
  18. done;
  19. !A;;
  20. let groupe (k, a, b)=
  21. let K1 = ref (basebp (k, a)) in
  22. let F = ref [] in
  23. if !K1 = [] then F:= [] else
  24. for i = 0 to a-1 do
  25. if rev((basebp((base10(((!K1) @ [i] @ rev (!K1)), a)), b))) = (basebp ((base10(((!K1) @ [i] @ rev (!K1)), a)), b))
  26. then F:= !F @ [(string_of_list((basebp ((base10(((!K1) @ [i] @ rev (!K1)), a)), b))) )];
  27. done;
  28. if   rev ((basebp ((base10(((!K1) @ rev (!K1)), a)), b))) = ((basebp ((base10(((!K1) @ rev (!K1)), a)), b)))
  29. then F:= !F @ [string_of_list((basebp ((base10(((!K1) @ rev (!K1)), a)), b)))];
  30. !F;;
  31. let recherche(a, b)=
  32. let R = ref [string_of_int(0)] in
  33. for i = 1 to 8000 do  R:= !R @ ((groupe (i, a, b)));
  34. done;
  35. for j = 1 to a - 1 do if (rev (basebp(j, b))) = (basebp(j, b))
  36. then R:= !R @ [string_of_list((basebp(j, b)))];
  37. done;
  38. !R;;

Reply

Marsh Posté le 28-02-2006 à 00:55:00   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed