Fonction factorielle en javascript

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour tout le monde,

Je précise que je suis vraiment débutant en JavaScript :)

Je fais des exercices pour me familiariser avec ce language et je bloque complètement sur l'un d'entre eux.

je veux afficher la factorielle d'un nombre rentré par l'utilisateur dans une boîte de dialogue mais je n'arrive absolument pas à traduire dans mon code le calcul d'une factorielle.

D'autres variantes plus simples passent sans problème mais là vraiment je ne sais pas quoi faire.

Est-ce que quelqu'un peut m'aiguiller?

merci beaucoup!

Édité par Coyote

+0 -0

Cette réponse a aidé l'auteur du sujet

Il faut y aller petit à petit. Comment définis-tu la factorielle, en français ? À partir d'une phrase complète, identifie le code qui correspond aux différents morceaux. Ensuite, regarde comment ces morceaux s'emboîtent dans ton code.

Note qu'il y a plusieurs définitions possibles pour la factorielle, plus ou moins évidentes, et plus ou moins faciles à implémenter. C'est peut-être aussi ton problème.

+0 -0
Auteur du sujet

Bonjour!

Merci pour vos retours

Alors tout bêtement la factorielle de 5 c'est 1x2x3x4x5 Ma connaissance de la factorielle s'arrête clairement là ^^

Je connais la récursivité parce que j'ai fait des recherches sur internet mais sinon…

+0 -0

Cette réponse a aidé l'auteur du sujet

Alors tout bêtement la factorielle de 5 c'est 1x2x3x4x5 Ma connaissance de la factorielle s'arrête clairement là ^^

C'est une définition suffisante, pas la peine de te préoccuper de récursivité pour l'instant.

Bref, la factorielle de 5, c'est le produit de tous les entiers de 1 à 5. En gros, deux informations ici : le produit, et tous les entiers de 1 à 5. Est-ce que tu sais représenter ces deux concepts en JavaScript, indépendamment ? Par exemple si le problème était "affichez tous les entiers de 1 à 5" tu saurais le faire ?

+0 -0

Cette réponse a aidé l'auteur du sujet

il y a plusieurs façon de la faire.

la façon la plus simple selon moi c'est avec une boucle while

tu demandes l'entré d'un nombre N et ensuite ta condition va être tant que N=0 alors tu continues. Ensuite dans ton while tu as simplement a avoir une variable en dehors du while qui va toujours faire un fois ton N. Par la suite, tu réduis ton N-1.

L'autre façon est avec la récursivité. Si tu veux en savoir plus dit moi le ici je vais expliquer ;)

Fait aussi attention le factorielle de 0 = 1 ;)

La culture, c'est comme la confiture, moins on en a, plus on l'étale. -Françoise Sagan

+0 -0
Auteur du sujet

Bon en fait non je crois que je ne sais pas :-/

Voilà un exemple de ce que je sais faire Afficher le nombre de bonjour correspondant au nombre indiqué par l'utilisateur

var helloNumber = parseInt(prompt("choisissez un nombre entre 1 et 10")); var helloMessage = "Bonjour";

for (var i = 2; i <= helloNumber; i++) {

1
   helloMessage += " Bonjour";

}

alert(helloMessage);

ps: existe-t-il un meilleur moyen pour afficher du code?

Édité par Moody_jr

+0 -0

Cette réponse a aidé l'auteur du sujet

tu utilises quel navigateur? il existe la console avec f12

et au lieu de mettre alert tu mets console.log(helloMessage);

et le console.log met le dans ton for à la place ;) et tu n'auras même pu besoin de ta variable helloMessage. tu auras qu'a mettre console.log("bonjour");

La culture, c'est comme la confiture, moins on en a, plus on l'étale. -Françoise Sagan

+0 -0
Auteur du sujet

tu utilises quel navigateur? il existe la console avec f12

et au lieu de mettre alert tu mets console.log(helloMessage);

et le console.log met le dans ton for à la place ;) et tu n'auras même pu besoin de ta variable helloMessage. tu auras qu'a mettre console.log("bonjour");

MadaQC

oh merci!!

+0 -0
Auteur du sujet

Bonjour bonjour,

Bon j'ai cherché dans un sens et dans l'autre, je n'arrive pas à faire afficher les entiers précédant le nombre rentré.

C'est la clef car le reste découle tout seul.

+0 -0
Auteur du sujet

Voilà où j'en suis, qu'en pensez-vous?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var helloNumber=parseInt(prompt("choisissez un nombre entre 1 et 10"));
var fact = 1;

    for (var i=1 ; i<=n ; i++){

        fact=fact*i;

    }

alert(fact);

Édité par Moody_jr

+0 -0

Cette réponse a aidé l'auteur du sujet

Salut,
Pour moi c'est tout bon. :)

Après, je te conseille d'utiliser console.log comme l'ont dit mes collègues du dessus, c'est 100 fois plus pratique que "alert". Tu peux aussi améliorer ton système avec les points suivants :

  • Renvoyer une erreur si la personne rentre un nombre négatif
  • Faire un petit message si l'utilisateur ne rentre pas un nombre entier, et lui permettre de rentrer un nouveau nombre
  • Plutôt que d'afficher le résultat dans la console, l'afficher directement sur la page HTML (ça demande un peu plus de connaissances mais c'est faisable)
+0 -0
Auteur du sujet

Bonjour Melepe,

Merci pour tes conseils, Je vais rajouter la fonction et les messages d'erreur.

Je travaille très peu en console pour le moment et j'aimerais que cela s'affiche dans la page HTML mais impossible d'y arriver. Tu peux m'indiquer comment faire?

+0 -0

Cette réponse a aidé l'auteur du sujet

Yup,
Le moyen le plus simple, c'est d'utiliser la méthode innerHTML. Exemple d'application : tu as dans ton code le bout suivant : <p id="texteAEcrire"></p>. Tu vas pouvoir écrire dans ce paragraphe avec le Javascript suivant : document.getElementById('texteAEcrire').innerHTML('Du texte !'); document.getElementById('texteAEcrire').innerHTML = 'Du texte !';.

Comme tu peux le constater, JS va récupérer l'objet HTML qui a pour id "texteAEcrire". Avec la méthode innerHTML, tu lui dis… Bah, d'écrire du HTML :p (Ce qui veut dire entre autres que tu peux y ajouter du HTML, par exemple faire document.getElementById('texteAEcrire').innerHTML('<em>Du texte !</em>'); document.getElementById('texteAEcrire').innerHTML = '<em>Du texte !</em>';.

Édité par melepe

+0 -0
Auteur du sujet

yes super je vais tester ça, merci beaucoup.

J'ai quand même un truc que je comprends pas. Pourquoi mes exercices précédents s'affichaient très bien dans une page html et que celui-ci non?

+0 -0

Salut,
Je viens de m'apercevoir que j'ai raconté un peu n'importe quoi cette aprèm-midi : innerHTML ne s'emploie pas du tout comme ça… Désolé.

Pour écrire du texte, c'est document.getElementById('monId').innerHTML = 'mon HTML', et pas autre chose.

Désolé pour le craquage complet.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte