Factorielle

salut svp ce programme marche avec la boucle < while> mais avec la boucle for non toujours le résultat f=1

#include<stdio.h>
#include<conio.h>

main()
{ int i=0,p=0,n=0,f=1;
printf("donner n",n);
scanf("%d",&n);

printf("donner p",p);
scanf("%d",&p);
i=n-p;
while(i>1)
{f=f*i;
i--;
}

printf("donner resultat f=%d",f);
getch();}

ET AVEC LA BOUCLE FOR:

#include<stdio.h>
#include<conio.h

main()
{ int i=0,p=0,n=0,f=1;
printf("donner n",n);
scanf("%d",&n);

printf("donner p",p);
scanf("%d",&p);
i=n-p;
for(i=1;i>1;i--)
{f=f*i;
}

printf("donner resultat f=%d",f);
getch();}

3 réponses

  1. Bonjour,

    La boucle doit partir de n-p ou de 1, il faudrait choisir.
    i=n-p; 
    for(i=1;i>1;i--)
    1. Le p n'a rien à faire dans le calcul d'une factorielle, tu peux très bien l'enlever.

      Pour la boucle for, comme l'a dit Dalfab, sois tu fais:
      for(i=n;i>1;i--) // On part de N et on descend jusqu'à 1.
          f*=i; // C'est une notation raccourcie qui fait la même chose que f=f*i.
      // Note: tu n'as pas besoin des accolades pour délimiter le bloc for, car celui-ci ne contient qu'une seule instruction.
      

      Sois:
      for(i=2;i<=n;i++) // On part de 1 (en fait de 2, tu n'as pas besoin de multiplier par 1) et on monte jusqu'à n.
          f*=i;