#include <stdio.h>
#include <math.h>
int main()
{
// Маркер выхода из программы
int exitProgramm;
do {
// Ввод значения Х
printf("Введите значение Х: ");
// Создаем переменную для хранения х и присваиваем ей значение
float index;
scanf("%f", &index);
getchar();
int limited(){
// Ввод точности расчетов
printf("Введите точность: ");
// Создаем переменную для предела точности изменение и присваиваем ей значение
float limit;
scanf("%f", &limit);
getchar();
// Множители
float numTop = 1; // Множитель чилителя (изначально 1)
float numBottom = 1; // Множитель знаменателя (изначально 1)
int step = 1; // Счетчик шагов
float slag1, slag2, result;
do {
// Вычисляем первое слагаемое
slag1 = numTop / (numBottom * index);
// Сразу умножаем на 3 знаменатель и плюсуем единичку к числителю
numBottom = numBottom * 3;
numTop++;
// Вычисляем второе слагаемое
slag2 = numTop / (numBottom * index);
(step % 2) ? (result = slag1 - slag2) : (result = slag1 + slag2);
result = fabsf(result);
/* Вывод промежуточных значений переменных (для отладки) При необходимости раскомментить*/
printf("Слагаемое1=%f Слагаемое2=%f Множитель1=%f Множитель2=%f Результат=%f\n", slag1, slag2, numTop, numBottom, result);
step++; // Увеличиваем номер шага на 1
}
while (result > limit && step < 20);
if(step < 20){
printf("Ряд сошелся на %d-м шаге, при достижении значения: %f\nПопробовать с другой точностью? Y/N ", step, result);
fflush(stdin);
int returnLimit;
returnLimit = getchar();
if(returnLimit == 'y'){
limited();
}
} else {
printf("Превышен лимит шагов. Операция прервана. Попробовать с другой точностью? Y/N ");
fflush(stdin);
int returnLimit;
returnLimit = getchar();
if(returnLimit == 'y'){
limited();
}
}
return 0;
} limited();
// Завершение работы
printf("Выйти из программы?(Y) Или попробовать с другими числами?(N) ");
fflush(stdin);
scanf("%d", &exitProgramm);
exitProgramm = getchar();
}
while (exitProgramm != 'y');
return 0;
}