Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

Programmation d'une suite de Syraccuse

Posté par
Floojuu
28-01-09 à 14:44

Bonjour, j'ai une suite de Syraccuse à programmer en CAML.
Malheureusement je ne la réussit pas et je ne comprends pas pourquoi ça ne marche pas, quelqu'un peut-il m'aider?

Je dois programmer la suite de Syraccuse pour une certain n (si n est pair on divise par 2 s'il est impaire on multiplie par 3 et on rajoute 1)
et trouver au bout de combien de rang j'ai le premier 1

Je vous écris mon programme:

let coll n =
let s = ref n; let p = ref 0 in
  while !s<>1 do
    if (n mod 2=0) then s:=!s/2 p:=!p+1 else s=!s*3+1
  done;
!p
;;

Merci d'avance!

édit Océane : forum modifié

Posté par
Floojuu
Mince 28-01-09 à 14:58

je m'aperçois qu'à la fin j'ai oublié une partie

let coll n =
let s = ref n; let p = ref 0 in
  while !s<>1 do
    if (n mod 2=0) then s:=!s/2 p:=!p+1 else s:=!s*3+1 p:=!p+1
  done;
!p
;;


Puis-je mettre des and?

let coll n =
let s = ref n and let p = ref 0 in
  while !s<>1 do
    if (n mod 2=0) then s:=!s/2 and p:=!p+1 else s:=!s*3+1 and p:=!p+1
  done;
!p
;;

Posté par
Ksilver
re : Programmation d'une suite de Syraccuse 28-01-09 à 17:04

Salut !

" if (n mod 2=0)" <<< le problème est là, c'est pas n qu'il faut tester mais !s...

apres j'ai pas fait de caml depuis longtemps mais je suis pas tres sur que le teste d'égalité soit "=" est pas quelque chose comme "==" (y a bcp de language pour lesquel le teste d'égalité est ==, le symbole = étant réservé à l'assignation...)

Si ca marche toujour pas, dit ce que le logiciel répond précisement, parceque j'ai pas caml sous la main pour essayer...

Posté par
Ksilver
re : Programmation d'une suite de Syraccuse 28-01-09 à 17:05

pour ce qui est des "and" : non surement pas. si on en met c'est entre des condition dans un teste, pas entre des instructions.

sinon caml à toujour été assez chiant, donc dans le doute rajoute des paranthèses :p

Posté par
toonette88
re : Programmation d'une suite de Syraccuse 28-01-09 à 19:24

petit problème aussi sur la suite de syracuse
longueur syracuse n=
let s= ref 0 in
while n<1 do s+1
if (n mod 2 == 0) then n/2
else n*3+1
done;
!s
;;

je comprend pas ce qui ne convient pas

Posté par
Floojuu
^^ 28-01-09 à 21:04

Merci, j'ai trouvé mes erreurs!!!
non c'est bien un égal et pas deux

Posté par
galois
Programmation d'une suite de Syracuse 29-01-09 à 16:38



  Bonjour,
  
  Voici un programme CAML qui répond à votre recherche.

let rec inserer s nb = match s with
  | []->[nb]
  | a::suite -> a::inserer suite nb;;

let rec nbsyracuse nb =
    if (nb mod 2 = 0) then nb/2 else nb*3+1;;

let suitesyracuse nb =
     let nb1=ref(nb) and s=ref([nb]) in
     while !nb1<>1 do
       nb1:=nbsyracuse !nb1;
       s:=inserer !s !nb1;
       nb1:=!nb1
       done;
      !s;;

  Si vous avez besoin d'autres renseignements sur ce sujet, vous pouvez m'envoyer un message.

   Amicalement.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !