/**
* @file main.c
* @author Зайченко Д.І., гр. 515
* @date 14 березня 2023
* @brief Лабораторна робота No 2
*
* Модульне тестування. Завдання 2
*/
#include <stdio.h>
#include<stdlib.h> //заголовний файл в якому міститься операнд очищення консолі
#include "header.h"
int main() {
double number;
double second_number;
char operation;
reset: //мітка для переходу після введення команди скидання
//виведення тексту
printf("List of aviable operations and their 'commands': \n\n'+'\t '-'\t\t '/'\t '*'\t\t'e'");
printf("\nadd\tsubstract\tdivide\tmultiply\texit");
printf("\n\n's'\t 'm'\t\t 'r'\t 'c'");
printf("\nsin(x)\t |x|\t\tsqrt(x)\tclear");
printf("\n\n(for sine the number must be entered in degrees, for squre root the number must be positive)\n\n");
char c;
//введення першого числа і запобігання введення невірних даних
do {
printf("Enter first number: ");
}while
(((scanf("%lf%c", &number, &c) != 2 || c != '\n') && clean_stdin()));
operation: //мітка для переходу до наступної операції
//введення команди операції
printf("Enter operation command:");
scanf(" %c", &operation);
//перевірка на коректність команди операції
if (correct_check(operation) == -1) {
printf("\nEntered incorrect operation command\n");
return -1;
}
//перевірка на потребу введення другого числа
if (operation != 's' && operation != 'm' && operation != 'r' && operation != 'c' && operation != 'e') {
//введення другого числа і запобігання введення невірних даних
do {
printf("Enter second number: ");
} while
(((scanf("%lf%c", &second_number, &c) != 2 || c != '\n') && clean_stdin()));
}
//розгалудження на операції
switch (operation)
{
case '+':
number = number + second_number;
break;
case '-':
number = number - second_number;
break;
case '/':
number = number / second_number;
break;
case '*':
number = number * second_number;
break;
case 's':
number = sinx(number);
break;
case 'm':
number = modulex(number);
break;
case 'r':
if ((sqrtx(number)) == -1) {
printf("impossible to find the square root of a negative number\n");
return -1;
}
else number = sqrtx(number);
break;
case 'c':
//операція скидання, переход на початок коду
//system("cls"); - операнд, який не працює в glot.io
goto reset;
case 'e':
return 0;
}
//виведення проміжного результату
printf("\nYour result is %lf", number);
printf("\nIf you want to continue - enter next operation command\n");
//перехід до введення наступнох операції
goto operation;
}
/**
* @file realisation.c
* @author Зайченко Д.І., гр. 515
* @date 14 березня 2023
* @brief Лабораторна робота No 2
*
* Модульне тестування. Завдання 2
*/
#include <stdio.h>
#include "header.h"
#define _USE_MATH_DEFINES
#include <math.h>
//функція для перевірки коректності команди операції
int correct_check(char operation) {
//масив команд операцій
char check[9] = { '+','-','/','*','s','m','r','c','e'};
//перевірка коректності
int i;
for (i = 0; check[i] != operation && i < 9; i++);
return (i == 9 ? -1 : 0);
}
//функція розрахунку сінуса
double sinx(double number) {
//конвертування градусів в радіани
number = number * (M_PI / 180);
return sin(number);
}
//функція розрахунку числа по модулю
double modulex(double number) {
return fabs(number);
}
//функція розрахунку квадратного кореня
double sqrtx(double number) {
//перевірка на можливість виконання операції
if (number <0) return -1;
else return sqrt(number);
}
int clean_stdin() {
while (getchar() != '\n');
return 1;
}
/**
* @file header.h
* @author Зайченко Д.І., гр. 515
* @date 14 березня 2023
* @brief Лабораторна робота No 2
*
* Модульне тестування. Завдання 2
*/
double sinx(double number);
double modulex(double number);
double sqrtx(double number);
int correct_check(char operation);
int clean_stdin();