Untitled

mail@pastecode.io avatar
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;
}