Somme des factorielles des n premiers nombres pairs
little_0607
Messages postés
6
Statut
Membre
-
little_0607 Messages postés 6 Statut Membre -
little_0607 Messages postés 6 Statut Membre -
Bonjour à tous je suis nouveau en programmation et j'ai besoin que vous m'aidiez svp avec ce programme
EDIT : Ajout des balises de code
EDIT2 : Sujet déplacé dans le bon forum...
Svp vraiment aidez moi , je ne sais comment faire ,merci:-)
#include<studio.h>
#include<conio.h>
Int main(){
Int i,k,nbp;
Clrscr();
Unsigned long prod;
Unsigned long som;
Printf("entrez un entier naturel : ");
Scanf("%d",&n);
For(i=1;i<=n;i++){
While(nbp<=n){
If(i%2==0){
Nbp++;
}
}
Prod=prod*i;
For(k=1;k<=n;k++){
Som=som+prod;
}
Printf("somme des factorielles des %d premiers pairs est : %d",n,som);
Getch();
Return 0;
}
EDIT : Ajout des balises de code
EDIT2 : Sujet déplacé dans le bon forum...
Svp vraiment aidez moi , je ne sais comment faire ,merci:-)
1 réponse
-
Salut little_0607,
Lorsque tu copie-colle le code source sur le forum, met le entre balises de code c (clique sur la flèche qui pointe vers le bas, située à gauche du bouton image et choisis "c"). Ainsi, ton code sera visible sur le forum en préservant l'indentation, et avec coloration syntaxique (là c'est jordane45 qui a modifié ton post pour y mettre les balises de code, fais le toi même à l'avenir stp :-).
Sinon, lorsque tu postes du code sur le forum, utilise un vrai ordinateur pour copier-coller le code, au lieu de taper à partir d'un téléphone mobile ou une tablette qui va te rajouter des majuscules à chaque début de ligne, ou dont le correcteur orthographique va rectifier ton premier include en#include <studio.h>
, alors que tu veux taper#include <stdio.h>
. Il manque aussi une accolade fermante à ton code et la déclaration de n pour que ton code compile ...
Une fois corrigés ces problèmes, ton code n'est pas pour autant correct, même s'il compilera.
Voilà quelques indications :
- le spécificateurprintf
pour ununsigned long
est%lu
et pas%d
...
- les variablesnbp
,prod
etsom
ne sont pas initialisées à zéro toutes seules par le compilateur ... elles peuvent donc valoir n'importe quoi et fausser complètement l'exécution
- le chiffre zéro est pair
- tu peux calculer le nème nombre pair à partir de zéro (inclus) avec une formule simple
Ensuite la logique de ton programme est fausse, aussi je te recommande d'effacer tout ton code après tonscanf
et de recommencer pas à pas (par exemple ta bouclewhile
est fausse, elle tourne dans le vide et ne s'arrête jamais cari
ne varie pas à l'intérieur duwhile
..., la logique qui suit est aussi erronée pour d'autres raisons).
Voilà une méthode pas à pas que tu pourrais utiliser :
- commence par établir une bouclefor
qui dénombre les nèmes nombres pairs (vérifie que ton code fait ce que tu veux avec desprintf
intermédiaires t'aidant à déboguer ton code)
- une fois que tu dénombres correctement les nombres pairs, pour chaque nombre pair, calcule la factorielle de chaque nombre pair (fait cela une fois seulement après que ton premier code fonctionne, vérifie que ton nouveau code fait ce que tu veux avec desprintf
intermédiaires t'aidant à déboguer ton code)
- une fois que ce code fonctionne, insère le cumul de l'addition de chaque factorielle trouvée dans ta variable destinée à contenir la somme des factorielles (là aussi, tu peux insérer desprintf
intermédiaires t'aidant à déboguer ton code pour vérifier que tu cumules bien les additions des factorielles successives), puis affiche le résultat final en dehors de ta boucle for
- quand ton code est au point, retire lesprintf
intermédiaires ayant servi au débogage
Dal-
-
#include <stdlib.h> #include <stdio.h> int main() { /* Declaration et initialisation des variables */ int n; printf("Entrez un entier naturel positf \n"); scanf("%d",&n); unsigned long fact = 1; int i;/* variable de boucle */ unsigned long somme = 0; int x; /* variable de boucle */ /* ---------------------------------------------------------------------------------------------- */ for (x = 0; x <= n; x = x + 2)/* pour chaque x pairs entre 1 et n */ { /* calculer factorielle de x */ fact = 1; /* reinitialisation de fact */ for (i = 1; i <= x; i = i + 1) /* pour i = 1, ..., n */ { i%2==0; fact = fact * i; } /* l'ajouter a la somme */ somme = somme + fact; printf("x = %d, somme = %lu, fact = %lu\n", x, somme, fact); } printf("Somme des factorielles des %d premiers entiers pairs= %lu\n", n, somme); return EXIT_SUCCESS;
j'ai fait un autre avec le même sujet mais c'est la même chose -
bravo, c'est beaucoup mieux !
en ligne 24i%2==0;
ne sert à rien et n'a aucun effet, et tu devrais le supprimer... tu as aussi dû oublier de copier-coller l'accolade fermante de ton code après lereturn EXIT_SUCCESS;
final
ensuite, ton code donne un calcul exact pour les entiers pairs de 0 au nombre que tu as saisi inclus (le texte de conclusion étant donc inadéquat).
par exemple :Entrez un entier naturel positf 10 x = 0, somme = 1, fact = 1 x = 2, somme = 3, fact = 2 x = 4, somme = 27, fact = 24 x = 6, somme = 747, fact = 720 x = 8, somme = 41067, fact = 40320 x = 10, somme = 3669867, fact = 3628800 Somme des factorielles des 10 premiers entiers pairs= 3669867
il ne te manque pas grand chose, pour que ton code exécute la boucle principalefor
de façon à ce que la factorielle de 10 nombres pairs soit calculée, au lieu de ce que tu fais actuellement :-)
réfléchis à ce que tu dois mettre pour borner ta condition de sortie dufor
de la boucle principale au lieu dex <= n;
... -
-
-