Bonjour a tous, j'ai un gros soucis avec un exercice que je tente de résoudre. Pouvez vous m'aider svp à le corriger ?
Écrire un programme C qui demande un entier naturel N, et qui calcule sa factorielle en respectant que 0!=1.
NB : la factorielle de 8, notée 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8
a) Utiliser while,
b) Utiliser for.
B) For
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int nbre, i, résultat ;
printf ("Veuillez saisir un nombre :/n")
scanf ("%, &nbre );
resultat = i ;
for ( i= 8; i<=nbre ; i++) ;
{
resultat = resultat * i ;
}
printf ( " La factorielle de %d est %/n", nbre , resultat ) ;
}
A) While
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int nbre, i, résultat ;
printf ("Veuillez saisir un nombre :/n")
scanf ("%, &nbre );
resultat = i ;
while ( i= 8; i<=nbre ; i++) ;
{
resultat = resultat * i ;
}
printf ( " La factorielle de %d est %/n", nbre , resultat ) ;
}
EDIT : Ajout des balises de code (la coloration syntaxique). Explications disponibles ici : ICI
Bonjour,
d'abord initialise tes variables à 0 (sinon elles ont une valeur que je ne sais pas d'ou ça vient)
ensuite dans la déclaration ta variable "resultat" à un accent "résultat" enlève le.
dans ton scanf tu ouvre un guillemet que tu ne ferme pas, ton scanf devrait plus être sur la forme : scanf("%d",&nbre);
resultat = i ne sert à rien la.
ton instruction dans le for n'a pas de sens ton i=8 et tant que i est inférieur ou égale à nbre il fait la boucle, si le chiffre que tu rentre sur nbre est inférieur à 8 il ne fera pas la boucle et pas de ";" après le for et le while, si j'ai bien compris le factoriel avec ton explication, c'est la multiplication des nombres jusqu'au nombre voulue ? si c'est ça ton while serait plutot :
for( i = 0 ; i <= nbre ; i++)
dans tes printf il faut mettre \n et non /n, et il te manque le d du %d avant le \n dans le dernier
oui mais tu peux déjà corrigé ce que j'ai dis, sauf le while jme suis complétement gouré ce que j'ai écris était pour le for.
pour le while tu déclare de i avant et tu l'incrémente après :
int i = 0;
while(i<=nbre)
{
resultat = resultat * i;
i++;
}
Une dernière chose:
Si tu as vu les fonctions,
tu devrais créer une fonction calculerFactorielle(int nbre) et appeler la fonction depuis ton main au lieu de tout écrire dans le main (en général on essaie de mettre le moins de traitement possible dans le main)
Non, la condition d'arrêt c'est le nombre rentré par l'utilisateur (nbre). Le but, c'est que ça fonctionne peu importe l'entier entré.
D'ailleurs, si tu veux te faire bien voir par ton prof, tu devrais vérifier si l'entier entré est positif avant de calculer sa factorielle :) Du genre:
if(nbre<0)
{
printf("Erreur: vous devez entrer un entier positif !");
}
else
{
//Ici, tu fais ton traitement
}
Pinzou, c'est un exo de début, il n'a pas encore attaqué les fonctions. pour le for pour moi je trouve mieux dans l'autre sens, mais le résultat est le même. et oui jme suis encore tromper pour le while :( heureusement que tu est la.
TonTonChief, l'exercice c'est de multiplier jusqu'au nombre nbre, ou jusqu'a 8 ?
D'après l'énoncé, il faut bien calculer la factorielle du nombre entré par l'utilisateur avec le ScanF.
Le NB (Nota Bene -> veuillez noter) sert juste à faire comprendre ce qu'est une factorielle, c'est juste un exemple.
Effectivement, le sens du for n'impacte pas le résultat. Par contre attention: si on le fait dans ton sens, il faut initialiser i à 1 et non pas à 0.
commence d'abord par les fautes de syntaxe :
scanf ("%, &nbre ); >> scanf ("%d", &nbre );
enlève les ; après le for et le while
met le %d de ton printf
/n >> \n
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int nbre, i, resultat = 1 ;
printf ("Veuillez saisir un nombre :\n");
scanf ("%d", &nbre );
while( i <= nbre ) // ou déclaré i=nbre et while( i>0 )
{
resultat = resultat * i ;
i++; // i-- dans le 2e cas
}
printf ( " La factorielle de %d est %d \n", nbre , resultat );
}
après le principal c'est que tu comprenne mais ça ça dépend de toi :)
jpeux t'envoyer un cours que j'ai (pas moi qui l'ai fait, ya pas de faute)
après le principal c'est que tu comprenne mais ça ça dépend de toi :)