IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Debutant en Ocaml mon code boucle


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Debutant en Ocaml mon code boucle
    Bonjour j'ai quelques difficultés à faire marcher mon code:
    Je souhaite créer une liste de n éléments aléatoirement ordonnés, de chiffre compris entre 0 et n
    Mon code boucle, si quelqu'un a une piste ou quelques modifications à me proposer ?... Merci à vous !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    let alea n =
      let rec creationlist l = 
        let x= Random.int n in
        if (List.mem !x l ) 
        then  creationlist l 
        else 
          begin
            if (List.length l>n) then l
            else creationlist (!x::l) 
          end 
      in creationlist [] ;;

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 87
    Points : 172
    Points
    172
    Par défaut
    Bonsoir,

    Votre code fonctionne presque parfaitement à deux exceptions prêt :

    - Premièrement, votre condition ne doit pas être mais En effet, renvoie un entier compris entre 0 et n exclus donc avec une inégalité stricte votre code ne s'arrêtera jamais
    - Deuxièmement, la condition doit être la première condition sinon votre code vérifie (ce qui est toujours vrai quand car vous avez bien mis les n entiers entre 0 et n-1) et fait donc indéfiniment l'appel récursif.

    Au demeurant, votre code ne peut pas être compilé avec vos vu que x est un entier, pas une référence.

    Le code final ressemblerait donc à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let alea n =
      let rec creationlist l =
        let x = Random.int n in
        if List.length l >= n then l
        else if List.mem x l then creationlist l
        else creationlist (x :: l)
      in
      creationlist []
     
    let () =
      alea 10
      |> Format.eprintf "@[<h>%a@."
           Format.(pp_print_list (fun ppf i -> Format.fprintf ppf "%d" i))
    ❯ ocamlc -o alea alea.ml
    ❯ ./alea
    3687091254
    Si vous voulez un résultat différent à chaque fois, pensez à utiliser Bon courage !

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Un grand grand merci pour m'avoir éclairé !!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant] mon code est-il robuste ?
    Par Mathusalem dans le forum VB.NET
    Réponses: 4
    Dernier message: 18/07/2008, 01h22
  2. [debutant] comment transposer mon code vba excel en access
    Par eclipse012 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/02/2008, 09h23
  3. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 09h33
  4. Boucles avec mon code
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/09/2007, 17h19
  5. que pensez vous de mon code source ecrit en c++(je debute)
    Par superspike23 dans le forum Débuter
    Réponses: 6
    Dernier message: 06/10/2005, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo