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

Run Settings
LanguageC
Language Version
Run Command
/** * @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; }
/** * @file additional_operations.c * @author Нездоймишапка А.О., гр. 515б * @date 21 лютого 2024 * @brief Лабораторна робота № 2, варіант 15 * * Модульне тестування. Завдання 2 */ #include<stdio.h> #include <math.h> #include "additional_operations.h" double arccos(double x) { if (x < -1 || x > 1) { printf("Помилка: arccos не визначено для значень x, що не лежать в діапазоні від -1 до 1.\n"); x = 0; return NAN; } return acos(x); } double cube(double x) { return x * x * x; } double reciprocal(double x) { return 1 / x; }
/** * @file additional_operations.h * @author Нездоймишапка А.О., гр. 515б * @date 21 лютого 2024 * @brief Лабораторна робота № 2, варіант 15 * * Модульне тестування. Завдання 2 */ #ifndef ADDITIONAL_OPERATIONS_H #define ADDITIONAL_OPERATIONS_H double arccos(double x); double cube(double x); double reciprocal(double x); #endif
Editor Settings
Theme
Key bindings
Full width
Lines