Somme des factorielles des n premiers nombres pairs

Fermé
little_0607 Messages postés 5 Date d'inscription dimanche 17 février 2019 Statut Membre Dernière intervention 18 février 2019 - Modifié le 18 févr. 2019 à 10:27
little_0607 Messages postés 5 Date d'inscription dimanche 17 février 2019 Statut Membre Dernière intervention 18 février 2019 - 18 févr. 2019 à 14:15
Bonjour à tous je suis nouveau en programmation et j'ai besoin que vous m'aidiez svp avec ce programme
#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

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 18 févr. 2019 à 12:05
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écificateur
printf
pour un
unsigned long
est
%lu
et pas
%d
...
- les variables
nbp
,
prod
et
som
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 ton
scanf
et de recommencer pas à pas (par exemple ta boucle
while
est fausse, elle tourne dans le vide et ne s'arrête jamais car
i
ne varie pas à l'intérieur du
while
..., 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 boucle
for
qui dénombre les nèmes nombres pairs (vérifie que ton code fait ce que tu veux avec des
printf
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 des
printf
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 des
printf
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 les
printf
intermédiaires ayant servi au débogage

Dal
0
little_0607 Messages postés 5 Date d'inscription dimanche 17 février 2019 Statut Membre Dernière intervention 18 février 2019
18 févr. 2019 à 11:59
Merci vraiment Dal ,je commence a comprendre un peu mais pouvez me faire un exemple en c pour pouvoir dénombrer les nombres et calculer leurs factorielles svp et excuser moi pour la mise en forme de mon programme , merci :-)
0
little_0607 Messages postés 5 Date d'inscription dimanche 17 février 2019 Statut Membre Dernière intervention 18 février 2019
Modifié le 18 févr. 2019 à 12:15
#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
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 18 févr. 2019 à 13:52
bravo, c'est beaucoup mieux !

en ligne 24
i%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 le
return 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 principale
for
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 du
for
de la boucle principale au lieu de
x <= n;
...
0
little_0607 Messages postés 5 Date d'inscription dimanche 17 février 2019 Statut Membre Dernière intervention 18 février 2019
18 févr. 2019 à 14:01
Merci encore Dal vous m'avez vraiment aidez mais permettez moi de vous déranger un peu plus tard ,je vais essayé encore et revenir vers vous pour vérifier, vraiment merci:-)
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
18 févr. 2019 à 14:10
de rien, mais je suis sûr que tu vas y arriver seul :-)
0