Factorielle

Fermé
maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016 - 23 mai 2016 à 21:20
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 - 1 juin 2016 à 19:09
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

Utilisateur anonyme
23 mai 2016 à 22:41
Une factorielle ne prend qu'un seul paramètre, ici tu demandes un N et un P

https://fr.wikipedia.org/wiki/Factorielle
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
24 mai 2016 à 00:36
Bonjour,

La boucle doit partir de n-p ou de 1, il faudrait choisir.
i=n-p; 
for(i=1;i>1;i--)
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
1 juin 2016 à 19:09
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;

0