Somme des chiffres d'un nombre [Fermé]

Signaler
-
Messages postés
15974
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 août 2020
-
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

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56971 internautes nous ont dit merci ce mois-ci

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Et pourquoi cette passion pour le scheme ?
Sinon la récursivité est dans le "sinon" du if. On rappelle la fonction somme-chiffres.
Je t'explique mon code :

Prenons un exemple avec 145 :
le programme va faire : (145 modulo 10) + (somme-chiffres (145 quotient 10)) = 5 + somme-chiffres (14). =... = 5 + 1 + somme-chiffres (4) = ... = 5 + 1 + 4 + somme-chiffres (0) = 5 + 1 + 4 + 0 = 10 ;)

Tu comprends mieux ou je t'explique plus précisément ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Re Marina, va falloir prendre un abonnement lol

Essaie :

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

Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
349
bonsoir ,en scheme je m'y connais pas trop mais n'y aurat il pas une fonction equivalente a explode comme en php?
tu decompose ton nombre etc...
@+
merci fiddy , oui je me suis lancée à fond dans le scheme et je fais quelques petits exos par ci par là , je bosse , j'essaye mes codes par moi meme , je teste bcp , et si je galère trop je viens ici :) .

dans ton code qui marche je vois mal où est la récursivité ...
ben oui j'ai 1 petite question :

5+1+4 c'est pas très logique je trouve , ya pas d'ordre , 1+4+5 ou 5+4+1 me semble plus logique...

le scheme , ben comme ça je le trouve simple de syntaxe .

ton code ne correspond pas à mon algo en fait j'ai l'impression
ok merci , oui l'IA me botterait bien , mais bon souvent les meilleurs ingénieurs en IA n'utilisent pas le scheme , c'est plus pour un apprentissage le scheme...

quel est le dernier chiffre du nombre 2puissance50 du nombre 2puissance1997 du nombre 3puissance99 merci d'avance
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Bonjour,
Tu constates que le dernier chiffre des nombres à la puissance 2 sont :
2, 4, 8, 6, ...
Il s'agit d'une suite. Donc à toi de voir sur quel nombre ça va tomber pour 50, 1997.
Et même raisonnement pour 3...

Cdlt,

si vous voulez la fonction de ce programme en pascal je vous le donne ...

Ok, je vois. Mais malheureusement je connais pas ce langage. Si c'était en Pascal ou en FoxPro, je pense que je pourais t'aider.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
Vous voulez aider qui ? La personne qui a posé la question il y a plus de deux ans ?
Messages postés
4310
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
752
Hello,
N'est-il pas possible d'éclater le nombre comme une chaine de caractère, et d'additionner ensuite les chiffres en les reconvertissant en entiers ?

En tout cas en Java je ferai comme ça :-)
Messages postés
15974
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 août 2020
2 648
Ça dépendrait du langage, en Java effectivement ce serait simple à mettre en place, mais faire des conversions dans un sens et dans l'autre, et manipuler les String, c'est beaucoup plus lourd (en nombre de calculs, en utilisation de la mémoire, et en temps) que de faire directement les calculs sur les entiers. Alors c'est peut-être plus simple pour le programmeur (y a pas à réfléchir) mais si tu alourdis tous tes programmes à chaque petit calcul où tu veux pas trop réfléchir, à la fin tu te retrouver avec un programme qui rame...