Вычисление члена последовательности с заданной точностью - C (СИ)
Формулировка задачи:
Последовательность задана формулой нулевого члена: x0=1+t и формулой для вычисления следующего члена через предыдущий: x(n+1)=x(n)-(x(n)^2-a)/x(n).Изначально мы вводим t, a и точность e с клавиатуры. Затем считаем каждый следующий член последовательности, пока разница между последующим и предыдущим не будет равна e.
Если последовательность не сходится, то выходим из цикла по числу итераций. Cобственно мой код:
Если я правильно понял, то при a и t равными 1 мы получаем последовательность 2 0.5 2 0.5 и т.д.
Т.е при задании точности 1.5 должно выводиться "0.5", но выводится "Выход из цикла по числу итераций". Что я делаю не так?
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
int main(void)
{
setlocale(LC_ALL, "Russian");
float x0, x1, e, raz;
int t, a, flag, max;
t = a = raz = x0 = x1 = e = max = flag = 0;
printf("Введите a,t,e: "); scanf_s("%d%d%f", &a, &t, &e);//Вводим коэффициенты и точность
printf("Введите максимальное число итераций: "); scanf_s("%d", &max);//Вводим максимальное число итераций цикла
x0 = 1 + t;//Вычисляем первый член прогрессии
do
{
x1=x0-(x0*x0 - a)/x0;//Вычисляем следующий член прогрессии
raz=abs(x1 - x0);//Вычисляем разницу между текущим и предыдущим членом
x0 = x1;//Предыдущий теперь текущий
flag++;
} while (raz != e || flag != max);//Пока разница между текущим и предыдущим не будет равна заданной точности или пока не достигнем максимального числа итераций
if (flag == max) printf("Выход из цикла по числу итераций\n");
else printf("%.4f\n", x1);
system("pause");
}Решение задачи: «Вычисление члена последовательности с заданной точностью»
textual
Листинг программы
while(raz > e && flag != max);