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 :

Fonction qui classe par ordre croissant


Sujet :

Scheme

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Fonction qui classe par ordre croissant
    Bonjour, j'ai créé une fonction qui devrait classer par ordre croissant les nombre d'une liste mais j'ai une erreur sur l'utilisation du "car" et je ne comprend pas comment je pourrai y remedier. voici ma fonction, qui je pense est juste mais peut etre un peu compliquée... et comporte peut etre d'autres erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    (define (ordre liste)
      
      (define (locale list final acc2)
        
        (cond ( (null? final) (locale (cdr list) (car list) acc2))
              ( (null? list) (locale acc2 final '()))
              ( (< (car list) (car final)) (locale (cdr list) final (cons (car list) acc2)))
              ( (and (null? list) (null? acc2)) final)
              
              (else (locale (cdr list) (cons (car list) final) (car final)))))
      
      (if (list? liste) (locale liste '() '())))

  2. #2
    Membre régulier Avatar de +Guilhem
    Profil pro
    Ingénieur d'études Java/JEE
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études Java/JEE

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 112
    Points
    112
    Par défaut
    J'ai du mal à comprendre ce que fait ton algo mais dans la sous-fonction locale, les 3 arguments sont des listes et parfois tu lui passes des nombres. Par exemple "( (null? final) (locale (cdr list) (car list) acc2))" dans la première condition du cond.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    En fait ma fonction comporte une fonction locale, et dans cette fonction locale il y a 3 listes qui servent d'accumulateur.
    Dans list on met la liste de nombres qu'on veut mettre dans l'ordre et acc2 et final sont initialisées a 0.
    Ensuite, comme final est vide on va prendre le premier terme de list et on le met dans final.
    On regarde le premier terme de list et s'il est plus grand que le premier terme de final, on le remplace et on met le terme de final dans acc2 pour pas le perdre.
    Et si au contraire le premier terme de list est plus petit que celui de final, on le met directement dans acc2.
    Et quand on a fait ça avec tous les termes de list, c'est a dire que list est vide, on doit normalement avoir dans final le plus grand des termes. Et on va remettre dans list tous les termes non utilisés qui sont dans acc2.
    Et quand tous les termes ont été mis dans final, on renvoie la liste final.

    par exemple, si on veut classer par ordre croissant la liste '(5 8 4 2) on va faire:

    (list)_________(final)________(acc2)
    '(5 8 4 2)______'()___________'()
    '(8 4 2)_______'(5) __________'()
    '(4 2) ________'(8)__________'(5)
    '(2) __________'(8)__________'(4 5)
    '() ___________'(8) _________'(2 4 5)
    '(2 4 5) ______'(8)___________'()
    '(4 5)________'(2 8)__________'()
    '(5) _________'(4 8) _________'(2)
    '()___________'(5 8) ________'(4 2)
    '(4 2) ________'(5 8) _________'()
    '(2) _________'(4 5 8)________'()
    '() __________'(4 5 8) ________'(2)
    '(2) _________'(4 5 8)________'()
    '() __________'(2 4 5 8) _____ '()

  4. #4
    Membre régulier Avatar de +Guilhem
    Profil pro
    Ingénieur d'études Java/JEE
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études Java/JEE

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 112
    Points
    112
    Par défaut
    Ton algo n'est pas bon. Quand on arrive à cette étape :

    '(2 4 5) ______'(8)___________'()
    '(4 5)________'(2 8)__________'()

    En suivant les explications de ton algo, le 2 est plus petit que le premier terme de "final", donc on doit le mettre dans "acc2". Or tu le mets dans "final"...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Oui effectivement lol. Mais je n'ai plus besoin de cette fonction pour le moment donc je m'y remettrai plus tard. Et pour ce qui est de l'histoire du car j'ai compris le probleme. Merci

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

Discussions similaires

  1. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19
  2. algo qui affiche par ordre croissant des nombres
    Par jeremdu69300 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 18/09/2008, 23h16
  3. Réponses: 12
    Dernier message: 13/03/2007, 23h21
  4. Trie par ordre croissant.
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 22/04/2005, 09h41
  5. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04

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