Besoin d'une correction d'un exercice [Fermé]

Signaler
Messages postés
9
Date d'inscription
mardi 27 mars 2018
Statut
Membre
Dernière intervention
27 mars 2018
-
Messages postés
9
Date d'inscription
mardi 27 mars 2018
Statut
Membre
Dernière intervention
27 mars 2018
-
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

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

Messages postés
9871
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
17 janvier 2021
3 820
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
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
9871
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
17 janvier 2021
3 820
si je ne me suis pas encore tromper ça devrait fonctionner.
jpeux t'envoyer un cours que j'ai (pas moi qui l'ai fait, ya pas de faute)
#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 );

for ( i=1 ; i<=nbre ; i++)  // ou ( i=nbre ; i>0 ; i-- )
{
   resultat = resultat * i ; 
}
printf ( " La factorielle de %d est %d \n", nbre , resultat ); 
}
Messages postés
9
Date d'inscription
mardi 27 mars 2018
Statut
Membre
Dernière intervention
27 mars 2018

Super!!! Et la boucle while stp
Messages postés
609
Date d'inscription
dimanche 17 septembre 2017
Statut
Membre
Dernière intervention
25 février 2019
147
La boucle while était au dessus:
while(i<=nbre)
{
    resultat=resultat*i;
    i++;
}
Messages postés
9871
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
17 janvier 2021
3 820
#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 :)
Messages postés
9
Date d'inscription
mardi 27 mars 2018
Statut
Membre
Dernière intervention
27 mars 2018

Tu as raison, dans tous les cas merci énormément. Je reviendrais vous embêter (rire)