Quick actions

cmd+k|ctrl+k

Navigation

Languages

завдання 2 лаба 2

Snippet info

Language

C

Visibility

public

Author

liestayalive

Created

2024-05-22T15:22:46.804784Z

Updated

2024-05-22T22:48:39.604033Z

/**
* @file lab2_2.c
* @author Нездоймишапка А.О., гр. 515б
* @date 21 лютого 2024
* @brief Лабораторна робота № 2, варіант 15
*
* Модульне тестування. Завдання 2
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include "additional_operations.h"


void clear_input_buffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

int main() {
    setlocale(LC_CTYPE, "ukr");

    char operation;
    double x, y, result;
    int has_x = 0; // Флаг, що показує, чи є значення x

    while (1) {
        printf("Введіть операцію (+, -, *, /, ^3, a, 1/x, r) або 'q' для виходу: ");
        if (scanf(" %c", &operation) != 1) {
            printf("Помилка: неможливо зчитати операцію.\n");
            clear_input_buffer();
            has_x = 0;
            break; // Вихід із програми
        }
        clear_input_buffer();

        if (operation == 'q') {
            printf("Програма завершена.\n");
            break;
        }

        if (operation == 'r') {
            has_x = 0; // Скидаємо значення x
            printf("Значення x скинуте.\n");
            continue; // Перейти до наступної ітерації циклу
        }

        if (!has_x) {
            printf("Введіть число x: ");
            if (scanf("%lf", &x) != 1) {
                printf("Помилка: введення не є числом.\n");
                clear_input_buffer();
                has_x = 0;
                continue; // Перейти до наступної ітерації циклу
            }
            clear_input_buffer();
            has_x = 1; // Вказуємо, що x тепер є
        }

        if (operation != '^' && operation != 'a' && operation != '1') {
            printf("Введіть число y: ");
            if (scanf("%lf", &y) != 1) {
                printf("Помилка: введення не є числом.\n");
                clear_input_buffer();
                has_x = 0;
                continue; // Перейти до наступної ітерації циклу
            }
            clear_input_buffer();
        }

        switch (operation) {
        case '+':
            result = x + y;
            break;
        case '-':
            result = x - y;
            break;
        case '*':
            result = x * y;
            break;
        case '/':
            if (y == 0) {
                printf("Помилка: ділення на нуль неможливе.\n");
                clear_input_buffer();
                has_x = 0;
                continue; // Переходимо до наступної ітерації циклу
            }
            result = x / y;
            break;
        case '^':
            result = cube(x);
            break;
        case 'a':
            result = arccos(x);
            if (result == NAN)
            {
                clear_input_buffer();
                has_x = 0;
                continue;
            }
            break;
        case '1':
            if(x == 0) {
                printf("Помилка: ділення на нуль неможливе.\n");
                clear_input_buffer();
                has_x = 0;
                continue; // Переходимо до наступної ітерації циклу
            }
            result = reciprocal(x);
            break;
        default:
            printf("Помилка: непідтримувана операція.\n");
            has_x = 0;
            continue; // Переходимо до наступної ітерації циклу
        }

        printf("Результат: %.2lf\n", result);
        // Збережіть результат для наступних операцій
        x = result;
    }
    return 0;
}
INFO