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 :

Définir une fonction assez compliquée..


Sujet :

Caml

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Définir une fonction assez compliquée..
    Bonjour !
    Je souhaiterais programmer en CamL une fonction assez compliquée puisqu'elle nécessite les fonctions somme, partie entière, logarithme et puissance... Il s'agit de celle ci-jointe.
    Comme je suis débutant, je me suis vite perdu dans ces choses assez compliquées... Il serait gentil à vous de m'éclairer... Je vous remercie d'avance
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Quel dialecte : Caml-Light ou OCaml ? Si c'est OCaml, tu devrais jeter un œil aux fonctions suivantes :

    • Fonction puissance : ( ** )
    • Les fonctions d'arrondi floor et ceil
    • Le logarithme népérien log

    Tout ceci se trouve dans cette page du manuel. Pour la sommation, une boucle ou une fonction récursive fait l'affaire... Dans tous les cas, ne jamais se priver de lire le manuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let calcul n =
      let sum = ref 0. in
      for k = 1 to int_of_float (floor (ln n / ln 2)) + 1 do
        sum := ... + !sum
      done;
      !sum
    Cordialement,
    Cacophrène

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci ! Je suis sur CamL Light donc c'est plus compliqué... En Maple c'est tellement plus simple X____X

    En fait la question exacte, c'est d'écrire la fonction qui calcule le nombre de 1 dans l'écriture binaire d'un nombre entier n...
    Et j'ai pensé à cette fonction qui marche très bien mais qui me semble un peu complexe... Peut être y a t-il un autre moyen mais en tout cas je ne le connais pas...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    en OCaml ça donne çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # let f n =
        let res = ref 0 in
        for i = 0 to 30 do
          if (n land (1 lsl i)) <> 0 then incr res
        done;
        !res
      ;;
    la fonction lsl est le décalage de bit vers la gauche, donc ici on teste successivement tous les bits de l'entier, un entier OCaml faisant au minimum 31 bits.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, mais je dois à tout prix avoir ce programme en CamL Light car je suis en Informatique de Prépa et c'est ce langage là qui est au concours =S

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    fort bien, seulement les gens dans la vraie vie utilisent OCaml et non Caml Light.

    Perso je vous recommanderais d'apprendre les différences entre OCaml et Caml Light, ça vous sera utile par la suite.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Moi je veux bien mais faut dire ça au système..... Ce programme ne passe pas sur CamL Light ?

  8. #8
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Maple n'est plus « simple » que parce qu'il est prévu pour un certain type d'utilisation, alors que caml est généraliste. Par ailleurs, la conversion en Caml-Light du code OCaml donné par adnutum est assez simple...

    Cordialement,
    Cacophrène

  9. #9
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Citation Envoyé par djstarmix Voir le message
    Moi je veux bien mais faut dire ça au système..... Ce programme ne passe pas sur CamL Light ?
    Le système ? quel système ? BigBrother is watching you ? ou peut-être Linux ou Windows ?

    On t'a déjà maché le travail en faisant la partie la plus difficile, à toi de l'avaler maintenant.

    Prends cette page du manuel de Caml Light...
    http://caml.inria.fr/pub/docs/manual...ht/node14.html

    ... et cette page de OCaml...
    http://caml.inria.fr/pub/docs/manual...ervasives.html

    ... et tu regardes comment traduire les fonctions de l'un vers l'autre, tout en sachant que la syntaxe est la même.

    Si ça se trouve, tu n'auras rien à faire... ou pas !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Le code passe tel quel sous Caml Light.

Discussions similaires

  1. [Dojo] Définir une fonction de tri
    Par diegon dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 17/03/2009, 09h18
  2. définir une fonction mathématique
    Par adilsky dans le forum Général Java
    Réponses: 8
    Dernier message: 21/05/2008, 09h27
  3. définir une fonction avec C++builder 5
    Par dasou dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/03/2007, 23h10
  4. [procedures] définir une fonction
    Par Aquaphobe dans le forum DB2
    Réponses: 4
    Dernier message: 05/10/2006, 08h05
  5. Réponses: 8
    Dernier message: 20/12/2004, 15h14

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