Bonsoir , quelqu'un aurait il une idée de l'algorithme pour trouver la plus grande valeur dans une liste d'entiers ?
merci
Bonsoir , quelqu'un aurait il une idée de l'algorithme pour trouver la plus grande valeur dans une liste d'entiers ?
merci
j'ai trouvé merci .
Bonjour,
A toutes fins utiles...
Cordialement,
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
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.
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
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" :
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 (define (maximum L) (foldl max (car L) (cdr L)))
On peut alors généraliser :
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))))
Mettre des solutions pour la postérité, c'est bien, mettre des solutions claires c'est mieux.
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))))
--
Jedaï
Partager