Factorielle

Fermé
maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016 - Modifié par *_Francis_* le 5/05/2016 à 10:32
maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016 - 7 mai 2016 à 22:21
svp je veux un programme qui calcule le factorielle d un nombre jai un programme mais peux pas marche
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

main()

{ int i=1,n,p=1;
printf("donner un nombre pour n:");
scanf("%d",&n);

while(i<=n){p=p*i;
i--;}
printf("donner resulta p= %d",p);
getch();}

2 réponses

Utilisateur anonyme
5 mai 2016 à 07:29
Bonjour

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
0
maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016
6 mai 2016 à 01:15
et la solution svp !!!!!!!!!!!
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934 > maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016
6 mai 2016 à 06:40
Travaille et cherche un petit peu. Si j'étais chef d'entreprise, ce n'est pas toi que j'engagerais.

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..
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101 > maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016
6 mai 2016 à 17:25
Le pseudo code d'une factorielle serait par exemple
i = 1
p=1

Demander n

Tant que i <n
(
p = p * i
i = i + 1
)

Si tu ne vois pas quoi changer, on ne peut pas plus.
0
Utilisateur anonyme > Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023
6 mai 2016 à 21:17
Salut, là tu lui donnes déjà la solution.
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.
0
maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016 > Utilisateur anonyme
7 mai 2016 à 21:37
oui ta raison mais je suis en 1 er anné j ai réfléchi et j ai trouvé la solution voila:

#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();}
0
Utilisateur anonyme
7 mai 2016 à 21:56
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.
0
maria3100 Messages postés 14 Date d'inscription mardi 5 avril 2016 Statut Membre Dernière intervention 20 décembre 2016
7 mai 2016 à 22:21
j ai fais ça aussi voila #include<stdio.h>
#include<conio.h>

main ()
{ int p=1,i=1,n;
printf("donner un nombre pour n :");
scanf("%d",&n);

while(i<=n)
{ p=p*i;
i++;}
printf(" affiche le rsultat p %d",p);
getch();}
0