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 :

[How to Design Programs] Ex. 5.1.3


Sujet :

Scheme

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

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [How to Design Programs] Ex. 5.1.3
    Bonjour à tous,

    Voilà je me suis lancé dans la programmation fonctionnel avec scheme avec le livre "How to Design Programs" (gratuit sur http://www.htdp.org), mais malheureusement je bloque sur l'exercice 5.1.3 (http://www.htdp.org/2003-09-26/Book/...lum-Z-H-8.html).

    Pour l'exercice 5.1.2, j'ai trouvé la réponse suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (define (check-guess guess target)
      (cond
        [(> guess target) 'TooLarge]
        [(= guess target) 'Perfect]
        [(< guess target) 'TooSmall]))
    Par contre pour le 5.1.3, je ne vois pas du tout comment faire.

    On demande de créer une fonction qui prend 4 nombres (les 3 chiffres que l'on doit deviner, ainsi que le target, qui est la réponse), par contre, je ne vois pas comment "additionner" les 3 chiffres pour obtenir un nombre, et ainsi le comparer avec target.

    Je ne sais pas si j'ai été assez clair, mais votre aide serait la bienvenue! Merci d'avance.

  2. #2
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut ben pour additionner et comparer tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (if (< (+ nb1 nb2 nb3) target) then_code else_code )
    La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
    Donald E. Knuth

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

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'avais déjà essayé cette solution. Le souci, c'est que ça va additionner les nombres, or ce qu'on veut (enfin je crois) c'est prendre chaque nombre à part, les concaténer, puis vérifier avec le target le résultat.

  4. #4
    Membre confirmé Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Points : 477
    Points
    477
    Par défaut j'ai pas lu l'énoncé du problème
    mais ca veut dire quoi concaténer des nombres?
    La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
    Donald E. Knuth

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

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon c'est qu'une hypothèse hein, j'ai toujours pas trouvé la solution.

    Par exemple, on donne à la fonction devine les arguments suivant : 1 2 3, le programme se charge de lier les nombres 1 2 et 3, ce qui donne 123, et c'est ce nombre qui va être comparer à target pour savoir si c'est la bonne réponse ou pas.

    Le problème, c'est que cette exercice ne devrait recourir à priori qu'aux notions abordées précedemmet à ce chapitre dans le livre htdp, et ces notions ne comprennent pas la concaténation (en plus il faut je pense passer les nombres en string, les concaténer, puis les repasser en "integer", ce qui ne simplifie pas les choses).

  6. #6
    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 Casis Voir le message
    Le problème, c'est que cette exercice ne devrait recourir à priori qu'aux notions abordées précedemmet à ce chapitre dans le livre htdp, et ces notions ne comprennent pas la concaténation (en plus il faut je pense passer les nombres en string, les concaténer, puis les repasser en "integer", ce qui ne simplifie pas les choses).
    Ce serait effectivement une solution, mais tu n'as pas besoin des strings pour faire cette "concaténation", simplement d'une compréhension basique de notre système de numération : si tu as n1, n10 et n100 trois chiffres avec n1 le chiffre des unités, n10 celui des dizaines et n100 celui des centaines, alors tu peux aisément reconstituer le nombre total avec une simple opération :
    n = n1 + 10 * n10 + 100 * n100

    A toi de traduire et d'incorporer cette fonction à ton check-guess3

    --
    Jedaï

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par KindPlayer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (if (< (+ nb1 nb2 nb3) target) then_code else_code )
    Salut KindPlayer...

    si tu veux aider quelqu'un, ne lui balances pas un morceau de code. Ça ne sert à rien sauf à faire qu'il n'a pas trouvé la solution par lui-même. Dans le pire des cas, tu lui donnes une mauvaise solution.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ahhh merci beaucoup Jedai, avec ton raisonnement j'ai réussi

    Voici le code que j'ai pondu donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ;; chiffre des unités (Ex 5.1.3)
    (define (digit1 number)
      (* 1 number))
    
    ;; chiffre des dizaines (Ex 5.1.3)
    (define (digit2 number)
      (* number 10))
    
    ;; chiffre des centaines (Ex 5.1.3)
    (define (digit3 number)
      (* number 100))
    
    ;; total des chiffres (Ex 5.1.3)
    (define (total-guess number1 number2 number3)
      (+ (digit1 number1) (digit2 number2) (digit3 number3)))
    
    ;; Programme check-guess3 (Ex 5.1.3)
    (define (check-guess3 guess1 guess2 guess3 target)
      (cond
        [(> (total-guess guess1 guess2 guess3) target) 'TooLarge]
        [(= (total-guess guess1 guess2 guess3) target) 'Perfect]
        [(< (total-guess guess1 guess2 guess3) target) 'TooSmall]))
    Merci encore et sujet résolu

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

Discussions similaires

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