Aide pour un programme en langage C.

Fermé
CoderForCodess - Modifié le 5 mai 2022 à 18:26
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 8 mai 2022 à 01:51
Bonjour,

Je souhaite faire un programme qui calcule a) la somme des n premiers termes d'une suite.
b) la somme des n premiers termes paires d'une suite.
c)la somme des n premiers termes impaires d'une suite.
d)le produit des n premiers termes d'une suite.

Je pensais utiliser des boucles (while) pour me permettre d'effectuer ses calcules.

Merci d'avance !
A voir également:

3 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 5 mai 2022 à 18:40
Salut CoderForCodess,

Tu n'expliques pas quel est le problème que tu rencontres. Il est "urgent" que tu le précises.

Là tu postes juste un énoncé.

Je pensais utiliser des boucles (while) pour me permettre d'effectuer ses calcules.

Oui, c'est une façon de faire. Tu as une autre question ?

Une question plus problématique est de savoir si :
  • on te donne la suite en question que tu dois simplement traduire en C, ou que tu dois concevoir un programme qui gère une suite donnée, auquel cas ton programme ne permettra que de donner des résultats pour la suite en question codée en dur dans le programme (ce qui rend ton exercice très facile)
  • ou si tu dois faire un programme qui, à partir d'une notation mathématique quelconque décrivant la suite fournie en entrée avec une interaction quelconque avec l'utilisateur, doit analyser cette entrée et l'interpréter sous la forme d'une séquence d'opérations à réaliser correspondant à la suite pour donner les résultats attendus en sortie (ce qui est beaucoup plus difficile car cela implique de parser et tokeniser une entrée, définir une grammaire,...)


Tu es dans quel cas de figure ?


Dal

P.S. : "calcul" et "terme" sont deux noms masculins
0
CoderForCodess
5 mai 2022 à 20:02
Salut Dal,

Je pense avoir compris comment faire pour calculer la somme des termes d'une suite !

Je demande a l'utilisateur d'entrée une valeur pour une variable "float n;" (donc je demande a l'utilisateur, le nombre de termes dans sa suite)

Ensuite, Je lui demande la valeur du premier terme de sa suite pour la variable "float first;".

Après, l'utilisateur peut choisir l'option qu'il souhaite (par exemple : calculer la somme ou le produit des termes de sa suite) (switch and case)

Au final, quand l'utilisateur choisi de calculer la somme des termes de sa suite, le programme va sur un des cases et exécute une boucle while.

Voici la boucle while en question pour calculer la somme des termes de sa suite :
case 1:
system("cls");
while (i < n) {
first = 2 * first + 1 + i;
S = S + first;
i = i + 1;
}
printf("La somme des termes de la suite vaut %.1f\n", S);
break;

C'est correct ou pas ?

Merci d'avance de ta réponse et excellente soirée a toi !
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096 > CoderForCodess
5 mai 2022 à 22:44
là ta suite est codée en dur, sauf apparemment pour la partie correspondant au contenu de la variable
first
qui est un
float
pouvant être modifié par l'utilisateur selon ce que tu dis.

à condition que i et S soient bien initialisés à 0 avant d'entrer dans la boucle, ce while devrait permettre, en fin d'exécution d'obtenir la somme des n premiers termes de cette suite particulière.

en ce qui me concerne, j'aime bien tester les choses et construire mes programmes de manière à ce que je puisse écrire les tests.

comme ceci :

#include <stdio.h>
#include <assert.h>

float somme_n_premiers_termes(int n, float first) {
        assert(n > 0 &&
                "le nombre de termes à additionner doit au moins "
                "être égal à 1");
        int i = 0;
        float S = 0;

        printf("Pour first = %f, la somme des n = %d premiers termes "
                "de la suite vaut ", first, n);

        while (i < n) {
                first = 2 * first + 1 + i;
                S = S + first;
                i = i + 1;
        }
        printf("%f\n", S);
        return S;
}

int main(void) {
        assert(somme_n_premiers_termes(1, 0.0) == 1.0);
        assert(somme_n_premiers_termes(2, 0.0) == 5.0);
        assert(somme_n_premiers_termes(3, 0.0) == 16.0);
        assert(somme_n_premiers_termes(4, 0.0) == 42.0);
        return 0;
}
1
CoderForCodess
7 mai 2022 à 11:36
Salut,

Merci de ta réponse !

J'avais une autre question ! Je voulais savoir comment on pourrait faire pour que le programme ne calcule que la somme des termes paires de la suite ?



-Exemple de ma boucle while pour calculer la somme des termes paires de la suite (a vérifier) :

while (2*i <= n) {
first = 2 * first + 1 + (i*2);
S = S + first;
i = i + 1;
}
printf("%f\n", S);
return S;


Merci d'avance !
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 8 mai 2022 à 01:24
Je crois que ce n'est pas la "somme des termes paires de la suite" que tu dois être en mesure de calculer, mais "la somme des n premiers termes pairs de la suite", non ?

J'ai l'impression, aussi, que dans ton code, ce n'est pas la même suite.
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
8 mai 2022 à 01:51
Si je me fais une fonction pour afficher les termes successifs de la suite et que je la lance pour 6 termes avec first égal à 0.0

#include <stdio.h>
#include <assert.h>

void affiche_n_premiers_termes(int n, float first) {
        assert(n > 0 &&
                "le nombre de termes à additionner doit au moins "
                "être égal à 1");
        int i = 0;

        while (i < n) {
                first = 2 * first + 1 + i;
                i = i + 1;
                printf("terme n°%d \t = %f\n", i, first);
        }
}


j'obtiens :

terme n°1 	 = 1.000000
terme n°2 = 4.000000
terme n°3 = 11.000000
terme n°4 = 26.000000
terme n°5 = 57.000000
terme n°6 = 120.000000


Ces données me permettent d'écrire mes tests pour somme_n_premiers_termes() et pour somme_n_premiers_termes_pairs().

Pour somme_n_premiers_termes_pairs() je vois que le 1er terme pair est 4, que le second terme pair est 26 et le 3ème est 120.

Les tests doivent donc être comme ceci :

        /* tests somme_n_premiers_termes() */
        printf("tests somme_n_premiers_termes()\n");
        assert(somme_n_premiers_termes(1, 0.0) == 1.0);
        assert(somme_n_premiers_termes(2, 0.0) == 5.0);
        assert(somme_n_premiers_termes(3, 0.0) == 16.0);
        assert(somme_n_premiers_termes(4, 0.0) == 42.0);
        assert(somme_n_premiers_termes(5, 0.0) == 99.0);
        assert(somme_n_premiers_termes(6, 0.0) == 219.0);
        printf("tous les tests sont passés avec succès\n");
        printf("--------------------------------------\n\n");

        /* tests somme_n_premiers_termes */
        printf("tests somme_n_premiers_termes_pairs()\n");
        assert(somme_n_premiers_termes_pairs(1, 0.0) == 4.0);
        assert(somme_n_premiers_termes_pairs(2, 0.0) == 30.0);
        assert(somme_n_premiers_termes_pairs(3, 0.0) == 150.0);
        printf("tous les tests sont passés avec succès\n");
        printf("--------------------------------------\n\n");


Les tests passent somme_n_premiers_termes() telle qu'écrite précédemment avec ta boucle précédente.

Par contre, ils échouent au premier test de somme_n_premiers_termes_pairs(), ligne 14, avec ta nouvelle boucle :

tests somme_n_premiers_termes_pairs()
Pour first = 0.000000, la somme des n = 1 premiers termes pairs de la suite vaut 1.000000
a.out: 37587262.c:72: main: Assertion `somme_n_premiers_termes_pairs(1, 0.0) == 4.0' failed.
Abandon


Ton code doit passer ce test, et les 2 autres qui suivent.

Dal
0