Влад Степанов
Влад Степанов

Помогите решить: С++

Что не так в коде и как исправить? Если можно, опишите подробнее.
Заранее благодарю
#include


using
namespace std;



int main()

{

double y, A, S, n;

n = 1;

y = 1 / ((2 * n - 1)*(2 * n + 1));

A = (y - 0.9);

if (A<0)

A = -A;

n++;

S = 0;

while (A < 0.001)

{

y = 1 / ((2 * n - 1)*(2 * n +
1));

S = S + y;

n++;

A = (y - 0.9);

if (A<0)

A = -A;

}

n--;

cout << S << endl;

cout << y << endl;

cout << n << endl;

system("pause");

return 0;

}

если кому-то непонятен код вот его нормальное фото

ОТ
Ольга Трепыхалина

а не проще сразу привести к 1/(4*n*n - 1)
выражения типа X = X + C спокойно заменяются на X += C

конструкция типа A = (y - 0.9) и дальнейший if заменяются на fabs(y-0.9). Тут нужно только cmath еще заинклудить

и что именно не так? с ошибкой какой-то падает?

кстати n лучше задать как int, long ну или другой целочисленный тип

причем unsigned, так как у вас эта переменная в диапазоне положительных чисел

и в C++ есть цикл с постусловием (то есть 1-й шаг обязательно выполнится)

do {} while();

ЛБ
Леонид Беляев

Условие окончания работы никогда выполнено не будет. Сумма ряда сходится к 0,5.
Если взять условие |y-0.5|<10‾³, то программа будет выглядеть так:

#include
#include
int main(){
double y=0,p; int n=0;
while(++n,abs(y-.5)>=1e-3)y+=p=1./(2*n-1)/(2*n+1);
std::cout<<"y="<

АГ
Александр Гордеев

а самостоятельно посмотреть? идем по коду:
n = 1

y = 0.333

A = 0.5666

while( A < 0.001 ) не сработает ни разу, ибо тебе-то сравнение на больше надо (т. е. выполнять, пока A > 0.001 )

Похожие вопросы
По С# пожалуйста помогите решить С#
Помогите решить проблему !!
Помогите решить задачу по С# :-)
Помогите решить информатику
помогите решить задачу на с++
помогите решить по C#
Помогите решить (в с++)
Помогите решить по С#
помогите информатику решить. срочно помогите решить информатику
помогите решить на С++