/**
* @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