Somme des chiffres d'un nombre

Fermé
marina - 12 févr. 2008 à 22:17
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 21 sept. 2011 à 11:59
Bonjour, je cherche à écrire une fonction en scheme qui calcule la somme des chiffres d'un nombre , par exemple si j'ai :

(somme-chiffres 546) ça doit me donner 15 (5+4+6) .

Voici le code que j'ai écrit :


(define (somme-chiffres x)
(if (= x 0)
0
(if (not (= (somme-chiffres (quotient x 10)) 0))
(+ (modulo x 10))
0
)))

si x vaut 0 on renvoit 0

si quotient du nombre par 10 est différent de 0 , on fait l'addition du modulo du nombre par 10

546 / 10 = 54 , modulo 6
54/10 5 , modulo 4 , on a 6+4

mais ma fonction renvoie tjs 0 , c'est du au fait que à la fin le quotient vaut 0 et j'ai mis que ça doit renvoyer 0 , quelqu'un aurait il une idée pour corriger cela ?

merci

11 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 834
12 févr. 2008 à 23:03
Non ton code ne correspond pas à ton algo.
En fait je t'explique : dans 145, comment récupérer le 1 ? Il est plus facile de récupérer le 5 avec un simple modulo 10 non ?
En gros la fonction somme-chiffres renvoie le chiffre des unités.
Ensuite on effectue une addition entre le chiffre des unités et avec somme-chiffres (Et en arguments on renvoie 14, donc (quotient 145 10).
Du coup 5 + 4 + 1.

Sinon, laisse moi te dire qu'il y a des langages qui sont beaucoup plus simples lol. Le scheme utilise beaucoup de parenthèses, et n'est plus beaucoup utilisé. Après, ça dépend si tu souhaites faire de l'intelligence artificielle ou c'est bien pratique. Mais si c'est juste pour apprendre la programmation, il en existe des beaucoup plus simples ;)
35