#include <stdio.h>
#include <math.h>
int main() {
double x;
int n;
int validX = 0;
int validN = 0;
while (!validX) { // пока значение X не будет соответствовать типу double
printf("Введите значение x: ");
if (scanf("%lf", &x) == 1) {
validX = 1; // Устанавливаем флаг верного ввода x
} else {
printf("Ошибка: введите корректное значение для x.\n");
while (getchar() != '\n'); // Очистить буфер ввода
}
}
while (!validN) { // пока значение N не будет соответствовать неотрицательному типу int
printf("Введите значение n: ");
if (scanf("%d", &n) == 1 && n >= 0) {
validN = 1; // Устанавливаем флаг верного ввода n
} else {
printf("Ошибка: введите корректное неотрицательное значение для n.\n");
while (getchar() != '\n'); // Очистить буфер ввода
}
}
// Вычислить значение cos(x) с использованием ряда
double result = 0.0;
for (int k = 0; k <= n; k++) {
int sign = (k % 2 == 0) ? 1 : -1;
double factorial_k = 1; // Факториал 2k (начальное значение)
double pow_x = 1; // x в степени 2k (начальное значение)
for (int i = 1; i <= 2 * k; i++) {
factorial_k *= i; // Рассчитываем факториал 2k
pow_x *= x; // Рассчитываем x в степени 2k
}
double term = sign * pow_x / factorial_k;
result += term;
}
// Шаг 3: Вывести левую и правую части и сравнить их
double cos_x = cos(x);
printf("Левая часть: %lf\n", result);
printf("Правая часть (cos(%lf)): %lf\n", x, cos_x);
if (fabs(result - cos_x) < 1e-6) {
printf("Левая и правая части приближенно равны.\n");
} else {
printf("Левая и правая части не совпадают.\n");
}
// Шаг 4: Запросить пользователя о выходе
char choice;
while (1) {
printf("Желаете выйти? (y/n): ");
scanf(" %c", &choice);
if (choice == 'y' || choice == 'Y') {
return 0; // Выход из программы
} else if (choice == 'n' || choice == 'N') {
main(); // Начинаем программу по новой
return 0; // завершаем ветку программы с while
} else {
printf("Ошибка: введите 'y' или 'n'.\n");
}
}
return 0;
}