Rechercher : dans
Par :

Somme des chiffres d'un nombre

Dernière réponse le 12 fév 2008 à 23:06:59 marina, le 12 fév 2008 à 22:17:22 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.12

Meilleures réponses pour « somme des chiffres d'un nombre » dans :
Les paiements en ligne VoirLes moyens de paiement en ligne Renouveler son nom de domaine, acheter des fournitures de bureau, payer ses liens sponsorisés, acheter des billets de train ou d’avion pour ses voyages d’affaires… un chef d’entreprise a mille et une bonnes raisons...
[Word] Écrire un nombre en toutes lettres VoirPour transformer un nombre en toutes lettres sans se perdre dans l'orthographe (tirets, 's'...), il est possible de demander à Word de formater ce nombre en lettres : Créer un champ avec CTRL-F9 S'affichera {} à l'écran Le remplir avec la...
Générer des nombres aléatoires efficacement avec rand() VoirGénérer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Représentation des nombres entiers et réels VoirReprésentation d'un nombre dans un ordinateur On appelle représentation (ou codification) d'un nombre la façon selon laquelle il est décrit sous forme binaire. La représentation des nombres sur un ordinateur est indispensable pour que celui-ci...
Tableur - Les fonctions mathématiques VoirLes fonctions standards Méthode description ABS() Cette méthode renvoie la valeur absolue d'un nombre, il renvoie donc le nombre s'il est positif, son opposé (positif) s'il est négatif IMPAIR(valeur) Cette méthode renvoie la valeur...

1

lewis34, le 12 fév 2008 à 22:25:47
  • +1

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...
@+

Répondre à lewis34

2

fiddy, le 12 fév 2008 à 22:25:51

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)))
)
)


Google is your friend

Répondre à fiddy

3

marina, le 12 fév 2008 à 22:28:39

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é ...

Répondre à marina

4

fiddy, le 12 fév 2008 à 22:35:57

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 ?

Google is your friend

Répondre à fiddy

5

marina, le 12 fév 2008 à 22:50:20

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

Répondre à marina

6

fiddy, le 12 fév 2008 à 23:03:22

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 ;)
Google is your friend

Répondre à fiddy

7

 marina, le 12 fév 2008 à 23:06:59

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...

Répondre à marina