Code factoriel sur javascript??
Résolu/Fermé
A voir également:
- Code factoriel sur javascript??
- Code asci - Guide
- Code puk bloqué - Guide
- Telecharger javascript - Télécharger - Langages
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
4 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
16 mars 2010 à 11:15
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
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
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
16 mars 2010 à 11:54
16 mars 2010 à 11:54
Bonjour,
Remplace
i=parseInt(s-1);
resultat=i;
par
i=parseInt(s);
resultat=1;
Remplace
i=parseInt(s-1);
resultat=i;
par
i=parseInt(s);
resultat=1;
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
16 mars 2010 à 14:33
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
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