Untitled
unknown
plain_text
a year ago
3.1 kB
5
Indexable
Never
#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; }