/**
* @file Lab_2_2.c
* @author Тарценко М. В., гр. 515і
* @date 2 березня 2023
* @brief Лабораторна робота №2, варіант 13
*
* Модульне тестування. Завдання 2
*/
//під'єдання заголовних файлів
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include "main_oper.h" //файл з основними операціями
#include "add_oper.h" //файл з додатковими операціями
int main() {
//ініціалізація змінних
char op, c;
float a, b;
float result;
setlocale(LC_ALL, "ukr"); //локалізація програми українською
again: //точка переходу до початку роботи програми після скидання або після помилки
do{
system("cls");
printf("\n Введiть число: ");
}
while (((scanf("%f%c", &a, &c) != 2 || c != '\n') && clean_stdin()));; //введення операнду з перевіркою коректності
res_trans: //точка переходу для продовження роботи з результатом та при невірно вказаній операції
do {
printf("\n Введiть потрiбну операцiю (C, +, -, *, /, a (arctg), s (x^2), p (x^5), e): ");
}
while (((scanf(" %c%c", &op, &c) != 2 || c != '\n') && clean_stdin()));; //визначення операції к обробкою некоректних даних
switch (op) { //реалізація запросу другого операнду при виборі основних операції
case '+':
case '-':
case '*':
case '/': {
do {
system("cls");
printf("\n Введiть друге число: ");
}
while (((scanf("%f%c", &b, &c) != 2 || c != '\n') && clean_stdin()));; //введення другого операнду з перевіркою коректності
break;
}
case 'a':
case 's':
case 'p':
case 'C':break;
default: { //обробка помилки невірно вказаної операції
system("cls"); //очистка консолі
printf("\n Невiрно вказана операцiя!\n");
goto res_trans;
}
}
switch (op) { //реалізація виведення результату в залежності від обраної операції
case '+':result = addition(a, b); break; //додавання
case '-':result = subtraction(a, b); break; //віднімання
case '*':result = multiplication(a, b); break; //множення
case '/': {
if (b == 0) { //реалізація помилки при діленні на нуль
system("cls"); //очистка консолі
printf("\n Помилка! Дiлення на нуль неможливе!\n");
goto again; //перехід на початок програми
}
else
result = division(a, b); break; //ділення
}
//реалізація додаткових операцій
case 'a':result = arctg(a); break; //арктангенс числа
case 's':result = pow2(a); break; //квадрат числа
case 'p':result = pow5(a); break; //число в 5 степені
case 'C':goto again; //операція скидання з переходом у початок програми
}
system("cls"); //очистка консолі
printf("\n Результат: %.2f\n", result); //виведення результату
printf("\n Чи бажаете ви продовжити операції над результатом?(y/n)\n Також ви можете завершити роботу програми.(e)"); // || запрос на продовження операцій над результатом
printf("\n Ваш вибір: ");
scanf(" %c", &c); //зчитування вибору користувача
if (c == 'y') { //продовження операцій над результатом
a = result; //визначення результату як операнду
system("cls"); //очистка консолі
goto res_trans; //перехід до вибору операції
}
else if (c == 'n') { //відмова від продовження операцій над результатом
system("cls"); //очистка консолі
goto again; //перехід до початку програми
}
else if (c == 'e') { //підтвердження завершення роботи програми
system("cls"); //очистка консолі
exit(EXIT_SUCCESS); //завершення роботи програми
}
}
/**
* @file main_oper.c
* @author Тарценко М. В., гр. 515і
* @date 2 березня 2023
* @brief Лабораторна робота №2, варіант 13
*
* Модульне тестування. Завдання 2
*/
#include "main_oper.h"
float addition(float a, float b) {
a += b;
return a;
}
float subtraction(float a, float b) {
a -= b;
return a;
}
float multiplication(float a, float b) {
a *= b;
return a;
}
float division(float a, float b) {
a /= b;
return a;
}
int clean_stdin() {
while (getchar() != '\n');
return 1;
}
/**
* @file main_oper.h
* @author Тарценко М. В., гр. 515і
* @date 2 березня 2023
* @brief Лабораторна робота №2, варіант 13
*
* Модульне тестування. Завдання 2
*/
#include <stdio.h>
float addition(float a, float b);
float subtraction(float a, float b);
float multiplication(float a, float b);
float division(float a, float b);
int clean_stdin();
/**
* @file add_oper.c
* @author Тарценко М. В., гр. 515і
* @date 2 березня 2023
* @brief Лабораторна робота №2, варіант 13
*
* Модульне тестування. Завдання 2
*/
#include "add_oper.h"
//арктангенс числа
float arctg(float a) {
a = 180 / M_PI * atan(a);
return a;
}
//квадрат числа
float pow2(float a) {
a = pow(a,2);
return a;
}
//число в 5 степені
float pow5(float a) {
a = pow(a,5);
return a;
}
/**
* @file add_oper.h
* @author Тарценко М. В., гр. 515і
* @date 2 березня 2023
* @brief Лабораторна робота №2, варіант 13
*
* Модульне тестування. Завдання 2
*/
#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
float arctg(float a);
float pow2(float a);
float pow5(float a);