Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PASCAL] Calcul d'une factorielle

Sujet résolu
    28 septembre 2008 à 11:24:27

    Bonjour,

    Je débute en Pacal et je cherche à réaliser un programme déterminant la factorielle d'un nombre n entré par l'utilisateur. Voici ce que ça donne pour l'instant:

    program fact;
    
    var
       x,n : integer;
    
    begin
         writeln('Entrez le nombre dont vous souhaitez que le programme calcule la factorielle');
         readln(n);
         if (n=0) or (n<0)
         then writeln('Le nombre choisi doit être strictement positif')
         else if n>0
         then x:=n*(n-1)*(n-2)*..*1;
         writeln(',n,! = ,x,');
         readln;
    end.
    


    Comme vous le voyez le problème se situe au niveau de l'attribution à x de la valeur de la factorielle de n. Je ne sais pas comment exprimer cette valeur.
    Il me semble que le reste est correct, ou pas totalement faux ^^

    Merci d'avance!

    PS: la factorielle d'un entier autre que strictement positif n'existe pas? J'ai vu ça sur Wikipedia, enfin si ça existe mon if then n'a pas lieu d'être.
    • Partager sur Facebook
    • Partager sur Twitter
      28 septembre 2008 à 11:53:37

      Citation : CrazYYaN

      Bonjour,


      Bonjour.

      Citation


      Comme vous le voyez le problème se situe au niveau de l'attribution à x de la valeur de la factorielle de n. Je ne sais pas comment exprimer cette valeur.


      Deux façons de faire ce que tu veux :
      la récursivité (ou )
      les boucles

      Si je peux me permettre un conseil, essaye de comprendre les deux méthodes et de faire ta fonction des deux manières. N'hésite pas à poser des questions.

      Citation


      Il me semble que le reste est correct, ou pas totalement faux ^^


      moui

      Citation


      Merci d'avance!


      De rien !

      Citation


      PS: la factorielle d'un entier autre que strictement positif n'existe pas? J'ai vu ça sur Wikipedia, enfin si ça existe mon if then n'a pas lieu d'être.


      Si wikipedia le dit, il y a quelques chances que ça ne soit pas complètement faux.

      Edit : Je me permet un deuxième conseil, ne mélange pas ta fonction qui permet de faire le calcul de la factorielle et la récupération de la valeur à calculer. Fais plutôt une fonction qui prend en argument une variable entière et qui retourne sa factorielle. Ca permettra une réutilisabilité de ton code (ce qui est un peu le principe d'une fonction) et lui offrira une plus grande clarté.
      Ca ne sert à rien de mélanger deux actions complètement différentes, chaque fonction doit avoir un et un seul rôle.
      • Partager sur Facebook
      • Partager sur Twitter
        28 septembre 2008 à 11:56:48

        Original comme post ^^

        J'ai pas encore vu en cours la récursivité, c'est carrément le dernier chapitre du semestre me semble.

        Je vais voir ton lien sur les boucles merci :)
        • Partager sur Facebook
        • Partager sur Twitter
          28 septembre 2008 à 11:58:11

          Pense à lire mon edit.
          • Partager sur Facebook
          • Partager sur Twitter
            28 septembre 2008 à 14:12:01

            Citation : iLUV

            Edit : Je me permet un deuxième conseil, ne mélange pas ta fonction qui permet de faire le calcul de la factorielle et la récupération de la valeur à calculer. Fais plutôt une fonction qui prend en argument une variable entière et qui retourne sa factorielle. Ca permettra une réutilisabilité de ton code (ce qui est un peu le principe d'une fonction) et lui offrira une plus grande clarté.
            Ca ne sert à rien de mélanger deux actions complètement différentes, chaque fonction doit avoir un et un seul rôle.



            Je comprends pas ce que tu veux dire sur ce qui est marqué en gras.
            • Partager sur Facebook
            • Partager sur Twitter
              28 septembre 2008 à 15:16:18

              Dans ce cas je t'invite à découvrir le merveilleux monde des fonctions. Un indispensable dans le monde de la programmation.
              • Partager sur Facebook
              • Partager sur Twitter
                29 septembre 2008 à 18:06:52

                0! = 1
                La factorielle d'un nombre négatif n'a pas de sens, de même que la factorielle d'un nombre non entier.
                Cependant Euler a exprimé une fonction qui s'applique à n'importe quel nombre (dite la fonction gamma) et qui a la particularité d'être égale à la fonction factorielle pour les entiers. C'est donc en fait un peu comme une extension de la factorielle à l'ensemble des nombres réels.
                Mais bon c'était juste pour ta culture, autant 0! ça peut te servir dans ta récursivité, autant la fonction gamma tu n'en entendras probablement pas parler avant un peu de temps.
                • Partager sur Facebook
                • Partager sur Twitter
                  4 octobre 2008 à 20:28:07

                  Merci bien pour cette info Maxibolt :)

                  Finalement j'ai réussi à obtenir quelque chose qui fonctionne, voici:

                  program fact;
                  
                  var
                     n, fact_n, x : integer;
                  begin
                       writeln('Entrez l''entier strictement positif dont vous souhaitez calculer la factorielle');
                       readln(n);
                       if (n=0) or (n<0)
                       then write('Le nombre entré doit être strictement positif!')
                       else if n>0
                       then for x:=1 to (n-1) do
                       fact_n:=(n*x);
                       writeln(n,'!=',fact_n);
                       readln;
                  end.
                  


                  Merci à vous :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 octobre 2008 à 20:32:00

                    Fais une fonction à part pour la factorielle, c'est laid sinon.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 décembre 2009 à 4:13:00

                      Bonjour. Je ne veux pas ressasser les vieux topics, mais ça m'étonne enfait, que personne n'ai vérifié ça réponse...Pendant un an complet (voir plus.)

                      Enfait, je suis sur ce problème moi-même.

                      Son code ne fonctionne pas...

                      for x:=1 to (n-1) do
                      fact_n:=(n*x); <-- Erreur

                      Peu importe combien de fois Fact_N égale N*X, c'est au final X*X-1 qui sera retenu. Ainsi 5! donne 20 (5*4) aulieu de 120 normalement (5*4*3*2*1).

                      Si quelqu'un pourrait retirer le "Résolu" et m'aider, j'apprécierai fortement =)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 décembre 2009 à 5:46:01

                        Citation : Velouté/Médium


                        Enfait, je suis sur ce problème moi-même.


                        En cherchant tu aurais pu trouver quelques :-° exemples de calcul d'une factorielle.
                        Enfin bon...
                        FUNCTION fact(n : integer) : integer;
                        VAR i : integer ;
                        BEGIN
                             fact:= 1;
                             for i:= 1 to n do
                                 fact:= fact * i;
                        END;
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Zeste de Savoir, le site qui en a dans le citron !
                          9 décembre 2009 à 10:45:53

                          Salut GurneyH,

                          Merci beaucoup pour la solution ^_^.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 novembre 2014 à 17:03:41

                            esque la derniere solution est juste
                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 novembre 2014 à 12:12:47

                              Si tu as compris le code, et donc son raisonnement, tu es en mesure de déterminer si le code est correct. 

                              Tu peux aussi, mais cela ne donnera qu'une indication, pas une preuve, tester le code sur quelques nombres ; il n'est pas bien compliqué de calculer à la main la factorielle de 1, de 2, de 3, de 4, de 5, de 6... Mais même si cela fonctionne sur les 6 premiers nombres, cela ne signifie pas forcément que cela fonctionnera pour 42 par exemple. C'est pour cela qu'il faut comprendre le raisonnement du code, afin de voir s'il correspond à la définition mathématique de la factorielle.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Je n'aiderais plus personne ici. Débrouillez-vous.
                                6 mai 2016 à 19:04:38

                                FUNCTION fact(n : integer) : integer;
                                VAR i : integer ;
                                BEGIN
                                 IF (n<0) then
                                 write('Entrez l''entier strictement positif')
                                 else IF (n=0) then
                                     fact:= 1
                                else {c'est le programme complet ;) }
                                for i:= 1 to do
                                fact:= fact * i;
                                END;
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 décembre 2016 à 12:34:03

                                  Svp pourquoi fact de 10 ne doe pas?

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 novembre 2018 à 14:47:28

                                    Écrire deux fonctions
                                    factor1
                                    et
                                    factor2
                                    qui
                                    calculent la factorielle de deux façons différentes
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 avril 2019 à 17:16:21

                                      Écrire un programme qui détermine si une entier N est parfait ou non. Un entier est dit parfait s'il est égal à la somme de ses diviseurs. Exemple 6 = 3 + 2 +1.

                                      TAF : Veuillez remplir toutes les trous avec les valeurs qui conviennent.

                                      NB :

                                      • Toutes les réponses ne doivent pas avoir des espaces et elles doivent être en minuscule.

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [PASCAL] Calcul d'une factorielle

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown