Partage
  • Partager sur Facebook
  • Partager sur Twitter

factorielle avec boucle for

21 mai 2009 à 19:18:08

bonjour,
je ne comprends pas pourquoi le résultat obtenu est toujours 0.0000
merci de votre aide


int main(int argc, char *argv[])
{ double i, nombre, resultat;

printf("Veuillez saisir un nombre : ");
scanf("%lf", &nombre);

if (nombre<0)
{printf("La fonction factorielle ne marche que dans N\n");} 

else if (nombre==0)
{resultat ==1;
printf(" 0! = 1 \n");
}

else 
{         for(i=1;i<=(nombre-1);i++)
          {
                         resultat*=(nombre-i);
          }
          
          printf(" %lf! = %lf\n\n", nombre, resultat);
          }
                  
          
          system("PAUSE");
          return(0);
}
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:27:45

Déjà, il y a une incohérence au niveau des types : la fonction factorielle ne touche que sur les entiers naturels (unsigned int).
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:28:55

Salut

Vérifie que dans ta boucle, tu ne vas pas un coup trop loin. Du coup au dernier passage, (nombre-i) vaudrait 0...
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:31:56

les double devraient marché du moment qu'on rentre un nombre entier
mais bon je vais mettre unsigned long

et pour la boucle je dois larrêter ou exactement? je ne vois pas trop
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:36:06

Mh j'ai parlé trop vite, la borne est bonne.
Par contre, tu devrais initialiser la variable resultat à 1 avant de faire des multiplications dessus.
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:37:51

benzo -> oui mais l'utilisateur ne sait pas forcément qu'il faut rentrer un nombre entier. Si ta fonction ne doit traiter que des entiers, utilise un entier ;)
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:37:53

je lai initialisé a 1 dans la boucle mais j'obtiens toujours 0.0000
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:40:26

resultat ==1;

Je rappelle que c'est = pour une affectation et == pour une comparaison.
for(i=1;i<=(nombre-1);i++)
          {
                         resultat*=(nombre-i);
          }

3! = 1 * 2 * 3 non?
Ici i commence à 1 et s'arrête quand i est plus grand que nombre-1, donc quand i vaut nombre.
Donc on a 3! = 2(i = 1) * 1(i = 2)
De plus, resultat n'est pas initialisé, donc en fait on a
3! = nombre * 2 * 1 (où nombre est indéfini)
Penses donc à initialiser resultat à 1, en plus de corriger ton erreur d'algo.

  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:46:42

for(i=1;i<=(nombre-1, resultat == 1);i++)
          {
          resultat*=(nombre-i);          
          }


mais jobtiens 5! = 2293640
je suis perdu!
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 19:55:00

Citation : benzo

for(i=1;i<=(nombre-1, resultat == 1);i++)
          {
          resultat*=(nombre-i);          
          }

Aie Aie Aie, qu'est ce que tu fait...
Je te conseille de revoir le cours de Matheo21 afin de bien assimiler comment on utilise une boucle.
for(i = 0, resultat = 1; i < nombre; i++)
    resultat *= (nombre-i);
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 20:15:01

D'ailleur pourquoi commencer la boucle à 0 et faire des "nombre-1", c'est un coup a se mélanger les piceaux...

KEEP IT SIMPLE
int factorielle( int n )
{
   int i;
   int result = 1;

   for (i=1; i<=n; i++)
   {
       result *= i;
   }
   return result;
}
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 21:47:33

keep it more simple :

int factorielle(int n)
{
  int resultat = 1;

  if ( n < 0 )
    printf("Erreur : le nombre doit etre positif ou nul");
  while(n > 0)
  {
    resultat *= n;
    n = n - 1;
  }
  return resultat;
}
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 21:59:25

C'est pas un concours de celui qui fera le plus petit code si ? On peut participer ?

int facto(int n)
{
        int res = 1;

        while(n > 0)
                res *= n--;

        return res;
}


Pour ce que ça change... L'avantage de celui de Floooder est qu'il est plus "naturel".

(et puis il aura trois codes rien que pour lui le petit veinard :-° )
  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2009 à 22:09:27

Tu peux travailler en recursif:
int factorielle(int n)
{

if(n==0)
return 1;
else return n*factorielle(n-1);
}
et t'as plus qu'à faire le main.
  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2014 à 7:36:37

pouvez m aider pour cette sujet de calculer le factorielle d un nombre. toujours le résultat retourne 0000

merci d avance

import java .io.*;
public class factorielle {
 public static void main(String args[])throws IOException{
     InputStreamReader Input=new InputStreamReader(System.in);
     BufferedReader flux=new BufferedReader(Input);
   int i ,a ,f ;
   System.out.println("entre le valeurs a");
   a=Integer.valueOf(flux.read());
  f=1;
 for(i=1;i<=a; i++){
      
    f=f*i;
 }
 System.out.println("le factorielle est"+f);

 }
}
        

  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2014 à 9:54:08

iniesta a écrit:

pouvez m aider pour cette sujet de calculer le factorielle d un nombre. toujours le résultat retourne 0000

merci d avance

import java .io.*;
public class factorielle {
 public static void main(String args[])throws IOException{
     InputStreamReader Input=new InputStreamReader(System.in);
     BufferedReader flux=new BufferedReader(Input);
   int i ,a ,f ;
   System.out.println("entre le valeurs a");
   a=Integer.valueOf(flux.read());
  f=1;
 for(i=1;i<=a; i++){
      
    f=f*i;
 }
 System.out.println("le factorielle est"+f);

 }
}
        

Bonjour,

Premièrement, la prochaine fois merci de créer un sujet dans le forum Java, ici les gens font du C. Ensuite, essaye de poster ton code de façon à profiter de la coloration, ça sera plus lisible.

Enfin, il faut que tu apprennes à débuguer ton programme. S'il ne se comporte pas de la bonne façon, c'est que quelque chose t'échappe, probablement que les valeurs manipulées par ton programme ne sont pas les bonnes. Tu peux commencer par rajouter des System.out.println dans la boucle pour te rendre compte que f ne prend pas les bonnes valeurs, et que c'est dû au fait que l'entier a que tu lis n'est pas le bon.

Bon courage !

  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2014 à 11:26:56

Essayez ceci.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>



long factorielle(int);
int main()
{
    long factorielle(int n)
   {
       if(n == 0)
       return 1;

       else
       return n*factorielle(n - 1);

   }


    int n;
    printf("Entrez un nombre!: \n");
    scanf("%d", &n);

    printf("la factorielle est %d", factorielle(n));

    return 0;






}

  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2014 à 9:55:11

algorithme qui calcul et affiche le factoriel d'un nombre
  • Partager sur Facebook
  • Partager sur Twitter