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

Scheme Discussion :

Problème avec des if


Sujet :

Scheme

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut Problème avec des if
    Je mets ici un probleme déjà posté avant mais vu qu'on ne s'y retrouve plus :

    j'ai ce code qui doit m'afficher un nombre décimal en binaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (define (base n)
        (if (= n 0)
          0
          (base (quotient (- n (/ n 2))))
          (if (= (modulo (/ n 2)) 0)
              1
              0)
          )
      )
    l'algo en français c'est :

    Si n = 0 on affiche 0 .
    Sinon , on fait quotient n 2 , et si le modulo vaut 0 on affiche 1 , sinon on affiche 0 , et on recommence ( récursivité ) .

    Qui peut traduire ça en scheme avec des if et sans change mon algo , merci .

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    voila je croix que ça y est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (define (display-as-binary n)
      (cond
        ((<= n 1) (display 1))
        ((= (modulo n 2)0) (display-as-binary (/ n 2)) (display 0) )
        (else
         (display-as-binary (/ (- n 1) 2)) (display 1))
         ))
    EDIT
    le if n'est pas indiquer ici car tu as besoin de au moins 3 branches et le if en a deux et combiner 2 if n'est pas très faccile d'ailleur pas très beau.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    nodoso c'est très gentil de me répondre mais les seules fonctions autorisées sont modulo et quotient

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    en fait j'ai emploié le modulo
    je fait 2 test
    1 esque n est plus petit ou egal a 1
    et puis le modulo
    et si aucune des condition satisfait je fait juste un appel recursive

    tu vas pas me dire que tu peut pas employer le < ou > dans ton exercice

    (define (display-as-binary n)
    (cond
    ((<= n 1) (display 1))
    ((= (modulo n 2)0) (display-as-binary (/ n 2)) (display 0) )
    (else
    (display-as-binary (/ (- n 1) 2)) (display 1))
    ))

  5. #5
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Nodoso: Ton code est incorrect:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > (display-as-binary 0)
    1
    >

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    (define (display-as-binary n)
      (cond
        ((= n 0)0)
        ((<= n 1) (display 1))
        ((= (modulo n 2)0) (display-as-binary (/ n 2)) (display 0) )
        (else
         (display-as-binary (/ (- n 1) 2)) (display 1))
         ))

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Nodoso Voir le message
    voila
    Ne fourni pas de réponse directement -_-
    Maxence tente d'apprendre. Si tu lui donnes la réponse, tu bousilles l'exercice.
    C'est sympathique de ta part de lui apporter ton aide, mais il faut l'aider à avancer sans lui donner... (enfin à part si au bout de 2 jours la réponse n'arrive toujours pas peut être )

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    et sinon qui peut répondre à mon message 1 , sans utiliser d'autres fonctions ...

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Simplement :
    Code Scheme : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (define (base n)
      (if [not (= n 0)] {begin (base (quotient n 2)) (display (modulo n 2))})
      )

    Néanmoins, je pense que Maxence devrait essayer de faire véritablement un effort, d'une part pour essayer de comprendre la syntaxe de Scheme, d'autre part pour exprimer clairement et correctement ses algorithmes avant d'écrire n'importe quoi en 10000 variantes...

    --
    Jedaï

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    mais j'ai pas le droit au begin ou au display , juste quotient et modulo ca fait 3 fois que je le répète ...

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Maxence45 Voir le message
    mais j'ai pas le droit au begin ou au display , juste quotient et modulo ca fait 3 fois que je le répète ...
    Et comment veux-tu "afficher" quoi que ce soit sans display ? Si tu n'as droit qu'à quotient et modulo, tu n'as pas droit à if ni cond non plus... A quoi as-tu droit, et que doit vraiment faire ta fonction si elle ne doit pas faire d'affichage ? Et puis fais un effort et pas juste une redistribution aléatoire des parenthèses dans tes tentatives si tu veux vraiment y arriver...

    --
    Jedaï

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    j'ai le droit aux if , aux cond , à quotient et modulo .

  13. #13
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Maxence45 Voir le message
    j'ai le droit aux if , aux cond , à quotient et modulo .
    Et que dois faire ta fonction ? Vraiment faire je veux dire, précisément, pas juste "transformer en notation binaire".

    --
    Jedaï

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Maxence45 Voir le message
    j'ai le droit aux if , aux cond , à quotient et modulo .
    Et si tu dois afficher, il va bien falloir que tu ais le droit à display
    Sinon ça ne peut pas marcher comme le fait remarquer Jedaï.
    Pour intégrer l'affichage dans le reste des commandes tu auras besoin d'un begin.
    L'autre possibilité, pour te passer du begin serait de créer une liste contenant les bits voulus. Tu pourras alors l'afficher à la fin. Mais pour cela tu auras besoin de cons (comme l'a fait remarquer GnuVince) pour créer une liste.

    Donc affichage direct ou création de liste, il va te falloir choisir -_-

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    Ma fonction c'est simple , si je tape :

    (fonction 12) , ça donne çà :

    (fonction 12)
    >1100

    j'ai parfaitement trouvé l'algo en français :

    On divise n par 2 , si le modulo vaut 0 on affiche 1 , sinon on affiche 0 , et on recommence la division ( récursion ) .

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Maxence45 Voir le message
    Ma fonction c'est simple , si je tape :

    (fonction 12) , ça donne çà :

    (fonction 12)
    >1100

    j'ai parfaitement trouvé l'algo en français :

    On divise n par 2 , si le modulo vaut 0 on affiche 1 , sinon on affiche 0 , et on recommence la division ( récursion ) .
    Donc l'affichage est en cours de route.

    pour le « sinon on affiche 0 , et on recommence la division ( récursion ) », tu vois que tu fais deux choses l'une après l'autre en séquence.
    Ceci s'obtient avec un begin si tu es dans la clause d'un if.

    Avec un cond, tu peux faire disparaitre le begin parce qu'après le test, le cond ne prend pas une expression, mais une suite d'expression (il y a un begin automatique si tu veux).

    Le begin est une instruction qui permet de faire de la programmation structurée. C'est ce qui permet de mettre deux exécutions en séquence. Dans la plupart des langages c'est « induit » lorsque tu mets des commandes l'une à la suite de l'autre entouré par des accolades. Pas en Scheme, puisque le modèle de calcul ne préconise pas les séquences. Cependant, c'est pratique.

    Donc le modèle d'un if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (if test expression-si-oui expression-si-non)
    Tu vois que si tu pouvais mettre deux expressions à la place de expression-si-oui, on ne saurait pas où commence expression-si-non.

    Le modèle d'un cond
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (cond (test1 suite-d-expressions-1)
          (test2 suite-d-expressions-2)
          ....
          (testn suite-d-expressions-n)
          (else suite-d-expression-else)
          )
    Ici, pas de problème pour mettre plusieurs expressions l'une derrière l'autre.

    Donc, le Scheme préconisant de toute façon l'usage de cond, voici la version de Jedaï sans le begin (mais c'est strictement la même chose)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (define (base n)
      (cond {[not (= n 0)] (base (quotient n 2)) (display (modulo n 2))}
            )
      )
    Comme on peut le voir ça ne change pas grand chose. On peut rajouter une clause else qui permet une jolie entête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (define (base n)
      (cond {[not (= n 0)] (base (quotient n 2)) (display (modulo n 2))}
            {else (display "conversion : ")}
            )
      )

  17. #17
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    pas de begin ou de display bon sang

  18. #18
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    et garulfo dans ton dernier code avec le cond ya aucune récursivité

  19. #19
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Maxence45 Voir le message
    et garulfo dans ton dernier code avec le cond ya aucune récursivité
    Si si j'ai mis en rouge l'appel récursif.
    Ça sert bien que je mette de la couleur -_-

  20. #20
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Tu as pas le choix d'utiliser une fonction autre que if/cond, quotient et modulo pour résoudre ton problème. Il faut soit que tu affiches au fur et à mesure avec display ou que tu accumules les valeurs dans une liste. Sinon, c'est pratiquement impossible de résoudre ton problème.

    Et comme l'a fait remarquer Jedaï, essaye de fournir un effort; tu as démarré ~12 discussions en trois jours, mais je sens pas que tu fais des progrès ou que tu essayes vraiment de comprendre.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème avec des transaction
    Par Oluha dans le forum ASP
    Réponses: 16
    Dernier message: 01/03/2005, 15h40
  2. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17
  3. Réponses: 5
    Dernier message: 19/08/2004, 11h11
  4. [STRUTS] Problème avec des ActionForm
    Par zarbydigital dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/03/2004, 13h49
  5. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26

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