web-dev-qa-db-fra.com

Somme des nombres C++

Je suis censé écrire un programme qui demande à l'utilisateur une valeur entière positive. Le programme doit utiliser une boucle pour obtenir la somme de tous les entiers allant de 1 au nombre entré. Par exemple, si l'utilisateur entre 50, la boucle trouvera la somme de 1, 2, 3, 4, ... 50.

Mais pour une raison quelconque, cela ne fonctionne pas, j'ai des problèmes avec mes boucles for mais c'est ce que j'ai jusqu'à présent.

#include <iostream>
using namespace std;

int main()
{
    int positiveInteger;
    int startingNumber = 1;
    int i = 0;

    cout << "Please input an integer up to 100." << endl;

    cin >> positiveInteger;

    for (int i=0; i < positiveInteger; i++)
    {
        i = startingNumber + 1;
        cout << i;
    }

    return 0;

}

Je ne comprends vraiment pas pourquoi cela ne fonctionne pas correctement.

4
soniccool

essaye ça:

#include <iostream>
using namespace std;

int main()
{
    int positiveInteger;
    int startingNumber = 1;

    cout << "Please input an integer upto 100." << endl;

    cin >> positiveInteger;

    int result = 0;
    for (int i=startingNumber; i <= positiveInteger; i++)
    {
        result += i;
        cout << result;
    }

    cout << result;

    return 0;

}
4
xxcv

La boucle est géniale; c'est ce qui est faux dans la boucle. Vous avez besoin d'une variable nommée sum et à chaque étape, ajoutez i+1 à sum. À la fin de la boucle, sum aura la bonne valeur, donc imprimez-la.

11

Tu peux essayer:

int sum = startingNumber; 
for (int i=0; i < positiveInteger; i++) {     
    sum += i;
}
cout << sum;

Mais il est beaucoup plus facile de noter que la somme 1+2+...+n = n*(n+1) / 2, de sorte que vous n’avez pas besoin de boucle du tout, utilisez simplement la formule n*(n+1)/2.

1
Jiri Kriz

J'ai la formule suivante qui fonctionne sans boucles. Je l'ai découvert en essayant de trouver une formule pour les factorielles:

#include <iostream>
using namespace std;

int main() {
    unsigned int positiveInteger;
    cout << "Please input an integer up to 100." << endl;
    cin >> positiveInteger;

    cout << (positiveInteger * (positiveInteger + 1)) / 2;
    return 0;
}
0
zackery.fix

mystycs, vous utilisez la variable i pour contrôler votre boucle, cependant vous modifiez la valeur de i dans la boucle:

for (int i=0; i < positiveInteger; i++)
{
    i = startingNumber + 1;
    cout << i;
}

Essayez ceci à la place:

int sum = 0;

for (int i=0; i < positiveInteger; i++)
{
    sum = sum + i;
    cout << sum << " " << i;
}
0
Polaris878
int result = 0;


 for (int i=0; i < positiveInteger; i++)
    {
        result = startingNumber + 1;
        cout << result;
    }
0
Tony The Lion

Tout d’abord, vous avez deux variables du même nom i. Cela appelle à la confusion.

Deuxièmement, vous devez déclarer une variable appelée sum, qui est initialement zéro. Ensuite, dans une boucle, vous devriez y ajouter les nombres de 1 à 10 et incluant positiveInteger. Après cela, vous devriez sortir la sum.

0
Roland Illig

Vous ne faites que mettre à jour la valeur de i dans la boucle. La valeur de i doit également être ajoutée à chaque fois.

Ce n'est jamais une bonne idée de mettre à jour la valeur de i dans la boucle for. L'index de boucle for ne doit être utilisé que comme un compteur. Dans votre cas, changer la valeur de i dans la boucle causera toutes sortes de confusion.

Créez la variable total qui contient la somme des nombres jusqu'à i.

Alors

 for (int i = 0; i < positiveInteger; i++)
        total += i;
0
rohit89