Code factoriel sur javascript??
Résolu
jakol
-
jakol -
jakol -
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;
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:
- Code factoriel sur javascript??
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
4 réponses
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
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
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
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
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