Code factoriel sur javascript??

Résolu/Fermé
jakol - 16 mars 2010 à 11:01
 jakol - 16 mars 2010 à 14:54
Bonjour,
je suis la recherche d'un code en javascript qui ferait le calcul de factoriel...
j'ai mis le code dans un fichier .js

j'ai déjà regardé sur le net, il y a certain code ...mais ça ne fonctionne pas bien:
Merci pour vos futures réponse...

ex:

s=parseInt(prompt ("Saisissez un nombre"));

i=parseInt(s-1);
resultat=i;
//document.write(i);

while(i>1)
{
resultat==resultat*i;
document.write(resultat);
i--;
}

document.write(resultat);
break;
A voir également:

4 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 mars 2010 à 11:15
Bonjour,

Quand tu écris
resultat==resultat*i;
il y a un = en trop. Là, il ne fait pas d'affectation, il vérifie juste si resultat est égal à resultat*i...
Par ailleurs, que vient faire ce "break;" à la fin du code ?

Xavier
salut merci pour ta réponse...en effet le break ne sert pas dans ce code...
j'ai modifié mon code (cf ci-dessous)
Par contre, quand je tape 4, le résultat est faux:18 (à place de 24)...
si tu avais une idée là dessus...je vais également regarder le code
merci


s=parseInt(prompt ("Saisissez un nombre"));

i=parseInt(s-1);
resultat=i;
//document.write(i);

while(i>1)
{
resultat=resultat*i;
i--;
}

document.write(resultat);

P
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 mars 2010 à 11:54
Bonjour,

Remplace
i=parseInt(s-1);
resultat=i;
par
i=parseInt(s);
resultat=1;
Merci beaucoup pour la réponse

comme je suis une bille en programmation...Je voudrais savoir quel est le raisonnement qui t'as permis d'arriver au bout?


En testant?
Parce que tu as déjà confronté à ce problème?
...

merci encore pour ta réponse
:o)
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 mars 2010 à 14:33
L'algorithme présenté n'est pas très compliqué, j'ai juste suivi étape par étape ce que faisait l'ordinateur pour en arriver à 18...
Tu rentres 4, et déjà, la première chose qu'il fait, c'est de prendre en compte "s-1", donc 3.
Ensuite, il multiplie ce chiffre par lui-même, car en rentrant dans la boucle, resultat = 3 et i = 3.
Ensuite seulement il décrémente i et procède normalement pour un calcul de factorielle.

En gros, il calculait 3*3*2*1, soit (n-1)(n-1)! au lieu de 4*3*2*1 = n!. Il y aurait toujours eu un facteur (n-1)/(n) entre ton résultat et le résultat attendu.

C'est donc un problème d'initialisation de ta boucle, qui est assez classique (chaque fois qu'il code une boucle, un programmeur doit toujours se demander quelles sont les conditions initiales, c'est la base pour éviter des débogages fastidieux, et pour comprendre ce qu'il fait).
En l'occurrence, il faut :
- commencer la boucle à n
- initialiser la variable de résultat à 1 (élément neutre de la multiplication, puisqu'on fait des multiplications. Si on avait fait des sommes, il aurait fallu l'initialiser à 0)

En espérant avoir pu décrire le raisonnement assez clairement, car ce n'est pas facile de mettre des mots dessus !

Xavier
salut
merci pour ta réponse

je suivrai tes conseils...

Merci encore

A+
0