2 réponses
Bonjour
c'est ta boucle while qui pose problème voila ce que tu as écrit en pseudo code
Essaye de faire ta boucle pour n = 2, sur un petit bout de papier
c'est ta boucle while qui pose problème voila ce que tu as écrit en pseudo code
i = 1
p=1
Demander n
Tant que i <n
(
p = p * i
i = i - 1
)
Essaye de faire ta boucle pour n = 2, sur un petit bout de papier
En général, quand on calcule une factorielle, par exemple 5!, on fait:
1*2*3*4*5, donc avec des nombres croissants.
L'algorithme le plus efficace est souvent le plus simple (mais pas toujours).
Dans ton premier code il suffisait de changer i--, par i++.
Et si comme je te l'avais suggéré tu avais pris un papier et un crayon, et fait deux ou trois boucles, en notant chaque résultat, tu aurais vu tout de suite que tu partais vers les nombres négatifs.
De pplus Dalfab te l'a écrit noir sur blanc
Ton second code est fonctionnel, mais un peu plus alambiqué.
Par contre, je souligne l'effort d'avoir trouvé un algo différent de celui donné.
Et si prendre les nombres dans l'ordre décroissant était imposé alors c'est bon.
1*2*3*4*5, donc avec des nombres croissants.
L'algorithme le plus efficace est souvent le plus simple (mais pas toujours).
Dans ton premier code il suffisait de changer i--, par i++.
Et si comme je te l'avais suggéré tu avais pris un papier et un crayon, et fait deux ou trois boucles, en notant chaque résultat, tu aurais vu tout de suite que tu partais vers les nombres négatifs.
De pplus Dalfab te l'a écrit noir sur blanc
Ton second code est fonctionnel, mais un peu plus alambiqué.
Par contre, je souligne l'effort d'avoir trouvé un algo différent de celui donné.
Et si prendre les nombres dans l'ordre décroissant était imposé alors c'est bon.
En outre des codes de factorielles en C, il y en a en veux-tu en voilà sur le Net.
Le plus grave, ce n'est pas l'ignorance, mais de ne pas vouloir chercher..
Si tu ne vois pas quoi changer, on ne peut pas plus.
S'il n'est pas capable de se faire violence pour réfléchir un peu sur un algo aussi basique et une erreur aussi simple (je ne fais pas de C mais ça m'a sauté au visage en 2s), il ne progressera pas.
Le but du forum est d'abord d'aider à apprendre.
Y'a des cas alambiqué ou on donne la solution, mais sur un truc aussi simple il est préférable de faire réfléchir.
#include<stdio.h>
#include<conio.h>
int main()
{
int fact ,i,x;
printf("donner un nombre :");
scanf("%d",&x);
i=x-1;
fact=x;
while(i>1)
{fact=fact*i;
i--;}
printf("donner le resulta fact %d",fact);
getch();}