Выполнять суммирование пока условие не выполнится

168
30 декабря 2021, 12:30

В сем привет! Помогите решить задача на с++. C клавиатуры вводится числа и записываются в переменные max и Del0. Дан цикл While его нужно выполнять до тех пор пока |sum - x| < Del0. Внутри цикла находится цикл for который выполняет суммирование. У меня получается бесконечный цикл. Необходимо выполнять суммирование до тех пор пока условие не выполнится и на экран вывести n.

Вот код, который у меня получился:

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    double sum, Del0, x;
    int n, max;
    n = 1;
    setlocale(LC_ALL, "");
    cout << "Введите max: " << endl;
    cin >> max;
    cout << "Введите De10: " << endl;
    cin >> Del0;
    x = pow(3.14, 2) / 12;
    sum = 0;
    while (abs(sum - x) < Del0) {
        for (n = 1; n <= max; n++) {
            sum = pow((-1), n + 1) * 1 / pow(n, 2);
            cout << "При n = " << n << " сумма равна " << sum << endl;
        }
    } 
    cout << "Количество элементов: " << n << endl;
}
Answer 1

Вот примерно что от вас хотят...

int main()
{
    double x = 3.14159265358*3.14159265358/12;
    double delta;
    cout << "Введите Delta: " << endl;
    cin >> delta;
    cout << "Ожидаемое количество элементов: " << ceil(1/sqrt(delta)) << endl;
    double sum = 0;
    for(int n = 1, sig = -1; ; ++n)
    {
        sum += double(sig *= -1)/n/n;
        cout << "n = " << setw(8) << n << ":  "
            << setprecision(10) << sum << endl;
        if (abs(sum - x) < delta)
        {
            cout << "Количество элементов: " << n << endl;
            break;
        }
    }
}

P.S. Что-то за сегодня уже вторую простейшую математику исправлять приходится...

Answer 2

К сожалению я не уверен, так как условие не очень мне понятно, но если исходить из того, что мы имеем, код у Вас в принципе верный, цикл становится бесконечным по той причине, что переменная sum - не увеличивается.

Решение: Исправить: sum = pow((-1), n + 1) * 1 / pow(n, 2);

На

sum +=sum + (pow((-1), n + 1) * 1 / pow(n, 2));
Answer 3

Проблема решилась следующим образом, спасибо.

int main()
    {
        double sum, Del0, x;
        int n, max;
        setlocale(LC_ALL, "");
        cout << "Введите max: " << endl;
        cin >> max;
        cout << "Введите De10: " << endl;
        cin >> Del0;
        x = 3, 14 * 3, 14 / 12;
        n = 1;
        sum = 0;
        while (abs(sum - x) < Del0) {
            for (n = 1; n <= max; n++) {
                sum = sum + pow(-1, n + 1) * 1 / pow(n, 2);
                cout << "При n = " << n << " сумма равна " << sum << endl;
            }
        } 
        cout << "Количество элементов: " << n << endl;
    }
READ ALSO
как можно упростить данный код

как можно упростить данный код

Всем привет, написал код и хочу узнать можно ли как то его ещё сильнее у компановать?

142
Почему не работает программа? С++

Почему не работает программа? С++

Требуется написать программу, которая находит натуральные числа, кратные 3 и 5 в диапазоне меньше 1000,затем выводит сумму этих чиселПочему...

245
Выделить определенную часть строки в текстовом файле и найти 8-ми битную XOR сумму всех символов

Выделить определенную часть строки в текстовом файле и найти 8-ми битную XOR сумму всех символов

Недавно начала изучать с++, есть задание по обработке текстового файла такого вида:

77
откуда $_POST и $_GET в php читают входные данные?

откуда $_POST и $_GET в php читают входные данные?

Я пишу свой небольшй HTTP-сервер на с++В нем мне нужно обрабатывать динамические запросы

80