c++ сумма бесконечных рядов с заданной точностью
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
setlocale(0, "rus");
int i = 1;
float sum = 0;
float e;
int a = 0;
scanf_s("%f", &e);
while (abs(a) >= e)
{
a = (pow(-1,i) / pow(3, i) + pow(4, i));
sum += a;
i++;
}
printf("Сумма равна(c точностью) = %f", sum);
Что не так с кодом? Почему неправильно работает?
Ответы (3 шт):
ошибка 1:
int a = 0;
scanf_s("%f", &e);
while (abs(a) >= e)
а вам не кажется, что если e ввели ненулевое, то while вообще работать не будет?
лучше уж используйте do while или for без условия выхода (условие внутри цикла делать будете)
ошибка 2
a = (pow(-1,i) / pow(3, i) + pow(4, i));
это совершенно не та формула, которая у вас на картинке
у вас некорректно расставлены скобки.
я уже молчу про то, что -1 в формуле и не пахнет
Считает неправильно потому, что вы считаете не по той формуле, которую привели. В строке:
a = (pow(-1,i) / pow(3, i) + pow(4, i));
Нужно правильно расставить скобки:
a = pow(-1,i) / (pow(3, i) + pow(4, i));
Сейчас меня заминусуют, но не могу молчать :)
Начнем с того, что у вас
int a = 0;
Ну как можно явно дробные члены хранить в целочисленном значении? Вы же начинаете нули суммировать...
Далее, формула не та, но даже если бы она была та... Ну не нужен здесь pow! И даже i не требуется :) Вот правильное решение:
double Sum(double eps)
{
double sum = 0.0;
for(double three = 1, four = 1, term = 2*eps /* :) */; term >= eps;)
{
three *= 3;
four *= 4;
term = 1/(three + four);
sum += term;
}
return sum;
}