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 :

Trouver une valeur dans une liste


Sujet :

Scheme

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Par défaut Trouver une valeur dans une liste
    Bonsoir , quelqu'un aurait il une idée de l'algorithme pour trouver la plus grande valeur dans une liste d'entiers ?

    merci

  2. #2
    Membre averti
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Par défaut
    j'ai trouvé merci .

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    A toutes fins utiles...

    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
    23
    24
    25
    26
    ;; une fonction simple donnant le maximum de deux nombres :
    (define (max-of-2-numbers a b)
      (if (> a b) a b))
    
    ;; version 1 de la fonction : récurrence simple
    ;; (on suppose que L est une liste non nulle de nombres)
    (define (max-of-list-1 L)
      (if (null? (cdr L))
          (car L)
          (max-of-2-numbers (car L) (max-of-list-1 (cdr L)))))
    
    ;; version 2 de la fonction : récursion terminale
    ;; (on suppose que L est une liste non nulle de nombres)
    ;; fonction auxiliaire :
    (define (max-of-list2-aux current-highest rest-of-list)
      (if (null? rest-of-list)
          current-highest
          (if (> (car rest-of-list) current-highest)
              (max-of-list2-aux (car rest-of-list) (cdr rest-of-list))
              (max-of-list2-aux current-highest (cdr rest-of-list)))))
    ;; fonction proprement dite :
    (define (max-of-list-2 L)
      (max-of-list2-aux (car L) (cdr L)))
    
    (max-of-list-1 '(-4 22 5)) ;; donne 22
    (max-of-list-2 '(-4 22 5)) ;; donne 22
    Cordialement,

    Nicolas

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Nicolas_75 Voir le message
    Bonjour,

    A toutes fins utiles...[...]
    Cordialement,

    Nicolas
    Non ! Franchement. Je sais que tu fais ça pour être serviable, mais ce genre de messages fait le contraire. Ainsi un étudiant qui recherche la solution, la prend et l'utilise telle qu'elle, au lieu de le faire réflechir. Il ne faut pas poster de solution en entier juste comme ça. Même quand c'est fait avec un bon esprit.

    De plus, le problème ici est que le créateur ne trouvait pas l'algorithme. Le code ne l'aidera en rien. Au mieux ça lui donnera directement une solution de laquelle il va trouver l'algorithme. Au pire, ça va lui donner un morceau de code à utiliser bêtement sans le comprendre. Dans tous les cas, je doute qu'il prenne le temps de vraiment se creuser les méninges pour trouver l'algo seul.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour Garulfo,

    Il y a plusieurs façons d'aider les gens :
    (i) le mode "interactif" permettant progressivement de faire comprendre ;
    (ii) le mode "direct" proposant une solution commentée qu'il convient ensuite de disséquer ;
    (iii) autre...

    Je privilégie souvent (i), même si ici j'ai utilisé (ii). La question est de savoir ce qui est le plus utile aux élèves ou aux personnes qui posent les questions. Après avoir (beaucoup) aidé sur les forums, en particulier en mathématique, il me semble qu'il n'y a pas de réponse évidente.

    De plus, dans ce cas précis, Erwane avait déjà trouvé une solution (voir le 2ème message du fil). Mon but était plutôt de lui signaler l'existence d'une seconde solution (au cas où il n'en aurait trouvé qu'une), et de garder trace dans les archives du forum, au cas où quelqu'un se pose la même question.

    Cordialement,

    Nicolas

  6. #6
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Nicolas_75 Voir le message
    De plus, dans ce cas précis, Erwane avait déjà trouvé une solution (voir le 2ème message du fil). Mon but était plutôt de lui signaler l'existence d'une seconde solution (au cas où il n'en aurait trouvé qu'une), et de garder trace dans les archives du forum, au cas où quelqu'un se pose la même question.
    Dans ce cas, peut-être serait-il même plus profitable de signaler l'existence d'une fonction d'ordre supérieur incarnant précisément le schéma de récursion qu'on trouve dans ton "max-of-list2-aux" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (define (maximum L) (foldl max (car L) (cdr L)))
    Encore que ce serait plus évident si ton "max-of-list2-aux avait été exprimé plus clairement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (define (max-of-list2-aux current-highest rest-of-list)
      (if (null? rest-of-list)
          current-highest
          (max-of-list2-aux (max current-highest (car rest-of-list)) 
                            (cdr rest-of-list))))
    On peut alors généraliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (define (fold-left f current rest-of-list)
      (if (null? rest-of-list)
          current
          (fold-left f (f current (car rest-of-list)) (cdr rest-of-list))))
    Mettre des solutions pour la postérité, c'est bien, mettre des solutions claires c'est mieux.

    --
    Jedaï

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Erwane Voir le message
    Bonsoir , quelqu'un aurait il une idée de l'algorithme pour trouver la plus grande valeur dans une liste d'entiers ?

    merci
    C'est un poste à mettre dans le forum Algorithmie et non Scheme.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. trouver les valeurs d'une droite dans une matrice
    Par Liloucha dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/05/2014, 17h24
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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