|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 2 ![]() |
Bonjour,
J'essaye de faire un fonction qui me permet d'additionner les diviseurs d'un entier comme suit : Code :
Code :
Merci de m'aider |
||||
|
|
00
|
|
|
#2 | ||||
|
Membre actif
![]() Valentin RobertÉtudiant Inscription : juin 2004 Messages : 70 ![]() |
Quant à la réponse :
est un sucre syntaxique pour : En effet, dans un langage fonctionnel, que la condition soit évaluée à true ou à false, il faut renvoyer une valeur d'un unique type. Si tu oublies le else, il faut bien trouver une valeur, donc OCaml avise que tu voulais utiliser le type (), qui est un peu le seul pour lequel il sait créer une valeur bidon. Dans tous les autres cas, on écrit toujours une expression complète : Code :
if cond then valuetrue else valuefalse;; Ici, tu veux renvoyer des entiers, donc, en suivant ton style, faire : Code :
- "n mod n - 1" se parenthèse probablement "(n mod n) - 1", et renvoie toujours 0. Peut-être que tu voulais écrire "n mod (n - 1)", cependant, ce n'est pas un progrès puisque cela renvoie toujours 1... - Si tu souhaites à sommer les éléments de 0 à n inclus, une bonne façon naïve de faire est : Code :
__________________
Apprendre Haskell vous fera le plus grand bien ! |
||||
|
00
|
|
|
#3 | |||||||
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 2 ![]() |
Citation:
Donc ce que j'ai compris c'est que je dois renvoyer impérativement un entier soit 0 si les deux conditions ne sont pas verifiés , mais moi je veux avoir une recursivité par rapport à n qui veux dire que a chaque fois que je prends n (entier) je le divise par n-1 et je vois si le modulo = 0 et la je somme le n-1 qui est un diviseur du nombre n et ensuite sommer tous les diviseurs pour savoir si le n est un entier parfait (fonction qui suivra) : Code :
if somme k = n then print_string " Le nombre " print_int n print_string "est parfait " else print_string " Le nombre " print_int n print_string "n'est pas parfait ";; Alors je ne trouve pas la solution de la récursivité autrement. Donc en utilisant la fonction comme suit: Code :
|
|||||||
|
|
00
|
|
|
#4 | |||||
|
Membre Expert
![]() Yankel ScialomIngénieur en systèmes embarqués Inscription : juin 2004 Messages : 999 ![]() |
Citation:
les erreurs sont légion dans cet extrait de code. Elles sont de deux types : les erreurs algorithmiques, et les erreurs de langage.
Reprends donc ton algo à zéro, écris une première version de ta fonction, et nous t'aiderons (si tu le désires) à la perfectionner. Cordialement,
__________________
gasp in touch -- Yankel Scialom |
|||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com