-
24/09/2012 - 12h43 mourtoux.f
problème avec N! factorielle programation en C
bonjour, je suis nouveaux sur ce forum j'espere avoir posté mon suject au bon endroit.
j'ai un gros probleme avec la programation d'une factoriel j'ai apris hier que je devait traiter se sujet surement noté pour demain voila la consigne: calculer N! (factorielle), N est un entier positif saisi au clavier.
j'ai etait absent pour maladie ces dernier temps et en ratrapant mon retard j'ai aprit que je devait faire cela et aussi j'ai aprit l'existance de la factorielle.
j'ai un peut pres comprit le principe de la factorielle mais je n'arive pas a trouver "l'équation" logique a programer en C.
on m'a aussi parler d'incrémentation et je n'ai vraiment pas comprit.
je voudrai savoir si quelqu'un peut m'aider juste pour le depart et m'expliquer se terme incrémentation.
merci d'avance.
-
24/09/2012 - 13h39 piwi
Re : problème avec N! factorielle programation en C
Bonjour.
Le problème n'est pas compliqué, il faut juste s'organiser un tout petit peu.
Qu'est ce qu'une factorielle? 1x2x3x....xn
On voit donc que l'on va devoir incrémenter une variable de 1 à n. On peut donc déjà prévoir une variable int initialisée sur 1, il faut aussi prévoir une autre variable n que l'utilisateur va renseigner pour donner la borne de la factorielle, et enfin, une variable qui va permettre de calculer la factorielle. Ensuite il y a un compteur à mettre en place pour aller de 1 à n. Une boucle fera l'affaire (for; while).
Je vois donc quelque chose comme ça:
int i=1, u=1, n= ce que tu veux;
while (i<n+1)
{
u=u*i;
i++;
}
cordialement,
piwi
Je sers la science et c'est ma joie.... Il parait. -
24/09/2012 - 17h11 mourtoux.f
Re : problème avec N! factorielle programation en C
je comprend bien se que tu dit a par l'incrementation qu'es ce que c'est concrétement?! car je ne comprend vraiment pas et je ne comprend pas du tout ton programe u=u*i se qui nous fait u=2 ?!
je suis desoler je vait peut etre te paraitre nul mais j'ai commencer il y a réelement q'une seul semaine.
-
24/09/2012 - 17h42 mourtoux.f
Re : problème avec N! factorielle programation en C
je doit aussi rendre se travail avec le pseudo code je pence que j'ariverai a faire la transcription de l'un vers l'autre sans probleme mais je me demander si je ferait mieux de commencer par l'un ou part l'autre car le prof nous as conseillé de commencer par le pseudo code mais mes collègue on commencé par le langage C donc je ne sait pas quoi faire je suis vraiment perdu.
-
24/09/2012 - 18h48 mourtoux.f
Re : problème avec N! factorielle programation en C
#include <stdio.h>
#include <stdlib.h>
void main (void)
{
int I,N,U;
printf("calcule de N! factorielle\n"); //affichage du titre
printf("entrez la valeur entière de N: "); // affichage
scanf("%N",&N); //lire N! au clavier
I=1;
U=1;
for(I=0;I<N+1;I++) //incrémentation de I et création d'une boucle
{U=U*I;
}
printf ("la valeur de %N factorielle est %U \n",&N,&U); //affichage du résultat
system("PAUSE");
}
j'ai fait se programe j'ai remplacer le while par un for et j'ai copier un peut sur un programme deja fait en classe je sait pas si c'est corecte et aussi a la fin du programe l'affichage ne marche pas le logiciel me marque "la valeur factorielle est U"
-
24/09/2012 - 18h48 whoami
Re : problème avec N! factorielle programation en C
Bonjour,
Retour aux bases : papier + crayon
Tu "exécutes" manuellement le programme instruction par instruction, en notant l'évolution des variables.
Sinon que ne comprends-tu pas dans le mot "incrémentation" ?
À part la mort et les impôts, tout n'est qu'incertitude. -
24/09/2012 - 18h51 lucas.gautheron
Re : problème avec N! factorielle programation en C
Bonsoir,
L'incrémentation ce n'est pas compliqué, et une petite recherche donne immédiatement la réponse à votre question : http://fr.wikipedia.org/wiki/Incr%C3%A9mentation
Visualisez bien la chose :
0! = 1
1! = 1
2! = 1 x 2
3! = 1 x 2 x 3
etc.
pour n!, vous devez multiplier 1 par chaque entier allant de 1 à n.
A+
-
24/09/2012 - 19h05 mourtoux.f
Re : problème avec N! factorielle programation en C
Ha merci grace a toi j'ai bien comprit le terme d'incrémentation alors en faite si je prend un exemple:
N!=5!=1x2x3x4x5=120
donc si je fait quelque chose comme cela:
{int U=1; I=1;
for (I=1; I==N; I++)
{U=U*I
}
}
c'est ça non ?!
-
24/09/2012 - 20h02 lucas.gautheron
Re : problème avec N! factorielle programation en C
Oui, à quelques petites erreurs de syntaxe près (puisque vous avez choisi d'écrire ceci en C)
ex : Code: // incorrect :
int U=1; I=1;
// correct :
int U = 1, I = 1; De plus, par rapport à votre premier code : on ne passe pas les valeurs par références avec printf. On ne le fait qu'avec scanf pour que la fonction puisse écrire dans les variables. Avec printf on passe les valeurs "par copie"
A+
-
24/09/2012 - 20h29 mourtoux.f
Re : problème avec N! factorielle programation en C
alors voici se que j'ai fait.
#include <stdio.h>
#include <stdlib.h>
void main (void)
{
int I,N,U;
printf("calcule de N! factorielle\n"); //affichage du titre
printf("entrez la valeur entière de N: "); // affichage
scanf("%d",&N); //lire N! au clavier
U=1;
I=1;
for(I=1; I==N; I++) //création d'une boucle et de l'incrémentation de I
{U=U*I;
}
printf ("la valeur de la factoriel est %d",&N); //affichage du résultat
system("PAUSE");
}
alors je ne sait pas mais se n'est pas corecte ma simulation me donne des chiffre super ellevé.
je ne sait pas trop a quelle endroit sa bloque je pence au niveaux du calcul ou de l'incrémentation je ne sait pas mais il ne fonctionne pas je commence a perdre sérieusement espoir... en tous cas merci a tous de m'avoir aider et de continuer je l'espere.
-
24/09/2012 - 20h31 piwi
Re : problème avec N! factorielle programation en C
Vous avez des exemples de valeurs? Pour N=2 ou N=3 par exemple?
Nous verrons peut être quel est le problème.
Je sers la science et c'est ma joie.... Il parait. -
24/09/2012 - 20h34 mourtoux.f
Re : problème avec N! factorielle programation en C
pour N!=2 j'ai le résultat égal a 2686784
pour N!=3 j'ai le meme résultat c'est vraiment bizard je voit pas ou est mon ereur vu que le résultat reste le meme pour toute N!
-
24/09/2012 - 20h38 piwi
Re : problème avec N! factorielle programation en C
Je viens de me rendre compte que vous n'avez pas initialisé vos variables. Mettez vos variables I et U à 1 au moment de leurs déclarations et N à 0. Ça devrait régler votre problème.
Cordialement,
piwi
Je sers la science et c'est ma joie.... Il parait. -
24/09/2012 - 20h43 mourtoux.f
Re : problème avec N! factorielle programation en C
#include <stdio.h>
#include <stdlib.h>
void main (void)
{
int I=1,N=0,U=1;
printf("calcule de N! factorielle\n"); //affichage du titre
printf("entrez la valeur entiere de N: "); // affichage
scanf("%d",&N); //lire N! au clavier
for(I=1; I==N; I++) //création d'une boucle et de l'incrémentation de I
{U=U*I;
}
printf ("la valeur de la factoriel est %d \n",&N); //affichage du résultat
system("PAUSE");
}
j'espere avoir fait comme vous me l'avez dit mais sa ne règle pas le problème.
je garde toujours se 2686784 pour toute N!
vraiment escuser moi de vous embeté avec sa je sait que vous avez surement pas que sa a faire mais la sa fait presque 4H que je suis desus je comence vraiment a en avoir mare même mes colègues ne voit pas mon éreur.
-
24/09/2012 - 21h36 piwi
Re : problème avec N! factorielle programation en C
Il y a pas mal de petites erreurs dans votre code
Par exemple, à la fin du programme vous demandez à afficher N et non pas U. Du coup, ça vous explique pourquoi quelque soit N, vous affichez toujours la même valeur. Et ensuite, vous demandez d'afficher l'adresse de N et non pas N lui même, d'où la valeur étrange qui s'affiche.
Par ailleurs, votre condition dans la boucle for pose problème. Ce que vous demandez est d'appliquer la boucle quand I est égal à N. Or, comme I n'est pas égal à N, la boucle ne s'applique jamais. C'est pour ça que j'avais mis à I<N+1: la boucle s'applique tant que I est inférieur à N+1 (inférieur ou égale à N). Code: #include <stdio.h>
#include <stdlib.h>
int main()
{
int I=1,N=0,U=1;
printf("calcule de N! factorielle\n"); //affichage du titre
printf("entrez la valeur entiere de N: "); // affichage
scanf("%d",&N); //lire N! au clavier
for(I=1; I<N+1; I++) //création d'une boucle et de l'incrémentation de I
{
U=U*I;
printf("I=%d et U=%d\n", I, U);
}
printf ("la valeur de la factorielle est %d \n", U); //affichage du résultat
system("PAUSE");
return 0;
} J'ai testé, ce code fonctionne.
Cordialement,
piwi
Je sers la science et c'est ma joie.... Il parait. | | |