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 :

Pairs et impairs


Sujet :

Scheme

  1. #21
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    garulfo regarde mon dernier code , il est presque juste , j'ai juste des difficultés à construire mon doublet de fin , tu as une idée ?

  2. #22
    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 Erwane Voir le message
    mais ils sont débiles ou quoi ceux qui donnent les exercices , je n'ai jamais vu ce que c'est une fonction auxiliaire ni meme une construction avec 2 define donc je suis coincé , bon pas grave merci bcp pour ton aide .
    Je doute qu'ils soient débiles.

    Le terme « fonction auxiliaire » n'est pas propre à Scheme. Comme son nom l'indique c'est une fonction qui fait une partie du travail. Tu pourrais retrouver ça dans n'importe quel langage. Tu n'es pas obligé non plus de créer ta fonction dans une autre fonction. Donc même si on ne t'en a jamais parlé ni jamais montré de tels exemples tu peux t'en sortir.

    Fais attention aux solutions que tu trouves ici. Ton prof pourrait croire que tu as tricher en faisant quelque chose que tu n'étais pas censé connaître et que donc tu as eu de l'aide. Ce qui serait dommage car ici ce n'est pas le cas.

    Bon reprenons ton exemple et réécrivons le simplement en sortant la définition de la fonction interne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    (define (paire L)
      (if (pair? L)
        (if (even? (car L))
            (+ 1 (paire (cdr L)))
            (paire (cdr L)))
        0
        )
      )
    
    (define (P-I L)
      (cons (paire L) (cons(- (paire L) L))
      )
    Et ça marche.

    Attention à indenter correctement ton code ! <Ctrl+I> dans DrScheme si tu es sur Windows ou Linux.

  3. #23
    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 Erwane Voir le message
    garulfo regarde mon dernier code , il est presque juste , j'ai juste des difficultés à construire mon doublet de fin , tu as une idée ?
    cons crée une paire.
    list crée une liste (une paire de paire, qui termine par une liste vide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > (list 2 3)
    (2 3)
    ;; c'est a dire (2 . (3 . ()))
    Si tu réfléchis bien tu vas trouver ta solution
    Je te laisse un peu mariné et je reviens tantôt.

  4. #24
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    rassure toi garulfo je ne triche pas car 1. je recopie jamais les codes fournis ici , 2. sur 50 exercices j'arrive à en faire 40 , je viens vraiment quand j'ai fait plusieurs essais et qu'aucun ne marche .

    et garulfo non ça marche pas , j'avais déjà tenté ta solution , regarde l'erreur qu'on a avec ta modification pour ce test (fonction (list 1 2 3 4 5))

    -: expects type <number> as 1st argument, given: (1 2 3 4 5); other arguments were: 2

  5. #25
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    non franchement j'ai beau mariner comme tu dis et avoir essayé 50 trucs aucun ne marche , j'ai sans arrêt :

    expects type <number> ...

  6. #26
    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 Erwane Voir le message
    rassure toi garulfo je ne triche pas car 1. je recopie jamais les codes fournis ici , 2. sur 50 exercices j'arrive à en faire 40 , je viens vraiment quand j'ai fait plusieurs essais et qu'aucun ne marche .

    et garulfo non ça marche pas , j'avais déjà tenté ta solution , regarde l'erreur qu'on a avec ta modification pour ce test (fonction (list 1 2 3 4 5))

    -: expects type <number> as 1st argument, given: (1 2 3 4 5); other arguments were: 2
    Je n'ai pas dit que tu trichais. J'ai justement ajouté « Ce qui serait dommage car ici ce n'est pas le cas ».

    Tu n'as pas cherché. Tu as simplement essayé de remplacer l'un par l'autre.

    Lis bien mes commentaires.
    Pour créer une liste tu as deux façons de faire: une avec list une avec cons. Ce sont deux opérateurs qui fonctionne ensemble. En fait, seul cons est nécessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > (cons 'a '())
    (a)
    > (list 'a)
    (a)
    Une liste est une succession de cons

    La solution est très très simple à ton problème. C'est juste que tu visualises mal le résultat.

  7. #27
    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
    Ah non attends... il y a un problème de parenthèsage.
    Que comptes tu faire ici ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (cons (paire L) (cons (- (paire L) L)))
    Parce que (- (paire L) L) ça n'a pas de sens.

  8. #28
    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
    Ah oui... et donnes des noms qui ont du sens à tes fonctions.
    paire c'est un mauvais nom.
    chercher-premier-nombre-pair c'est un bon nom.

  9. #29
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    ce que je compte faire c'est construire le doublet des nombres pairs et impairs , les nombres pairs c'est (paire L) , et les nombres impairs c'est censés etre :

    (- L (paire L) )) , mais comment mettre ces 2 résultats dans un doublet bon sang je vois pas ya rien à faire .... ( j'ai corrigé et remis le L avant , j'espère que là ça a du sens ) .

  10. #30
    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
    Laisse tomber le deuxième cons, et tu vas voir, comme il l'a été mentionné, que (- (paire L) L) ne fonctionne pas.

  11. #31
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (define (fonction L)
      (cons (paire L) (- L (paire L) ))
      )
    (fonction (list 1 2 3 4 5))
    . -: expects type <number> as 1st argument, given: (1 2 3 4 5); other arguments were: 2

  12. #32
    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 Erwane Voir le message
    ( j'ai corrigé et remis le L avant , j'espère que là ça a du sens ) .
    Ce qui n'a pas de sens c'est que on ne peut pas soustraire (opération -) une liste et un élément !

    Ok en fait, je n'avais pas vu que ton problème était plus profond.
    Ce que tu essayes de faire c'est par (- L (paire L)) de retourner la liste qui suit dans L le premier élément (paire L) rencontré. Tu vois c'est pour ça qu'il faut écrire en français et avoir des fonctions qui portent des noms significatifs.

    Supposons que tu ais une telle fonction sous-liste-a-la-premier-occurence-de ça marcherait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    (define (chercher-premier-nombre-pair L)
      (if (pair? L)
        (if (even? (car L))
            (+ 1 (chercher-premier-nombre-pair (cdr L)))
            (chercher-premier-nombre-pair (cdr L)))
        0
        )
      )
    
    (define (P-I L)
      (cons (paire L) 
            (sous-liste-a-la-premier-occurence-de (chercher-premier-nombre-pair L) L)))
      )
    Le problème maintenant est pour toi
    1) soit de garder le même algo et de coder sous-liste-a-la-premier-occurence-de
    2) de changer ton algo ...
    Je pense que je te conseillerais la premier chose car c'est plus simple dans un premier temps.

    Après tu pourrais en fait trouver à améliorer ton algo une fois que tu en as un qui marche, car il y a mieux à faire en renvoyant à la fois le premier élément paire trouvé ET la sous-liste qu'il reste à parser

  13. #33
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    réfléchissons , cons admet en argument une donnée de n'importe quel type et une liste , donc ça ça devrait marcher mais non !!!!! :

    (cons (paire L) (list(- L (paire L) )) )

    c'est ce signe - qui ne va pas ...

  14. #34
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    Ok en fait, je n'avais pas vu que ton problème était plus profond.
    Ce que tu essayes de faire c'est par (- L (paire L)) de retourner la liste qui suit dans L le premier élément (paire L) rencontré. Tu vois c'est pour ça qu'il faut écrire en français et avoir des fonctions qui portent des noms significatifs.
    non pas du tout...j'ai expliqué ce que je voulais faire , mais merci bien à vous j'abandonne j'en ai plus qu'assez de cet exercice j'ai pas envie d'y passer la semaine , je voulais partir sur l'idée de base de jim , j'avais pondu un code mais si faut tout rechanger je laisse purement tomber , encore merci bien de votre aide .

  15. #35
    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
    Il y a une autre solution très simple à tout ça.
    C'est de reconstruire ce qu'on appelle un filtre.
    Il y a même une fonction déjà codée. Mais c'est peut-être justement vers où veux vous emmener votre prof.

    En fait, c'est souvent le but de cet exercice et la plus simple des solutions.

  16. #36
    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
    Je raconte n'importe quoi moi -_-
    J'avais mal lu l'énoncé

  17. #37
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    garulfo , voici un code qui extrait la liste pair et un qui extrait la list e impair , saurais tu écrire une petite fonction qui m'affiche ces 2 listes sous forme d'un doublet ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    (define (one L)
      (if (pair? L)
          (if (even? (car L))
              (cons (car L) (one (cdr L)))
              (one(cdr L)))
          (list)))
    
    (define (two L)
      (if (pair? L)
          (if (odd? (car L))
              (cons (car L) (two (cdr L)))
              (two(cdr L)))
          (list)))

  18. #38
    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
    Bon regarde... la meilleure solution (pour ton niveau) est celle-ci.

    Si tu voulais compter uniquement les nombres pairs, tu ferais ça
    fonction : compter-nombre-pair
    entrées : une liste de nombre L
    sorties : un entier représentant le nombre de nombres pairs dans la liste n
    algo :
    1) si la liste est vide, n=0
    2) sinon si le premier élément est un nombre pair alors
    n=1 + n'
    n' est le nombre de nombres pairs dans la suite de la liste
    3) sinon n est le nombre de nombres pairs dans la suite de la liste.


    Est ce que tu saurais implémenter ça ?
    Si oui la solution à ton problème est aisée à trouver en modifiant légèrement cette fonction.

  19. #39
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 17
    Points
    17
    Par défaut
    non j'abandonne définitivement , merci bcp de ton dévouement .

  20. #40
    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 Erwane Voir le message
    garulfo , voici un code qui extrait la liste pair et un qui extrait la list e impair , saurais tu écrire une petite fonction qui m'affiche ces 2 listes sous forme d'un doublet ?
    Oui et je suis sur que toi aussi. Mais arrêtes de donner ce genre de nom à tes fonctions. C'est pour ça que je me suis embrouillé sur l'énoncé. Et ça ne t'aide pas à comprendre ton problème. En supposant que tu l'ais bien compris, ça ne t'aide pas à trouver tes erreurs. Crois moi: le nom d'une fonction c'est essentiel. Dieu a donné à l'homme le pouvoir de nommer qu'ils disent dans la bible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (define (separer-pair-impair L) ;; c'est bien ca non ?
        (cons (one L) (two L))
        )

Discussions similaires

  1. Impression pages paires et impaires
    Par ely dans le forum Access
    Réponses: 1
    Dernier message: 26/01/2006, 10h44
  2. récupérer que les lignes paires ou impairs d'une proc ,?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 5
    Dernier message: 16/11/2005, 19h03
  3. problème de suite pair et impair
    Par florane dans le forum C
    Réponses: 13
    Dernier message: 18/10/2005, 14h51
  4. VB Comment savoir si un chiffre est pair ou impair ?
    Par PRACH dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/09/2005, 19h02
  5. Réponses: 4
    Dernier message: 30/06/2002, 21h23

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