112 lines
2.7 KiB
C
112 lines
2.7 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define EPSILON 0.001
|
|
#define BUFFER_SIZE 100
|
|
|
|
// Функция вычисления результата
|
|
float vypocitaj(float a, float b, char op, int* error) {
|
|
if (op == '+') return a + b;
|
|
if (op == '-') return a - b;
|
|
if (op == '*') return a * b;
|
|
if (op == '/') {
|
|
if (b == 0) {
|
|
*error = 1; // Ошибка: деление на ноль
|
|
return 0;
|
|
}
|
|
return a / b;
|
|
}
|
|
*error = 1; // Ошибка: некорректный оператор
|
|
return 0;
|
|
}
|
|
|
|
// Функция проверки результата
|
|
void over_vysledok(float skutocny, float ocakavany) {
|
|
if (abs(skutocny - ocakavany) <= EPSILON) {
|
|
printf("OK\n");
|
|
} else {
|
|
printf("ZLE\n");
|
|
}
|
|
}
|
|
|
|
// Функция обработки одной строки
|
|
void spracuj_riadok(char* riadok) {
|
|
char* zaciatok = riadok;
|
|
char* koniec;
|
|
|
|
// Читаем первое число
|
|
float a = strtof(zaciatok, &koniec);
|
|
if (zaciatok == koniec) {
|
|
printf("CHYBA\n");
|
|
return;
|
|
}
|
|
|
|
// Пропускаем пробелы перед оператором
|
|
while (*koniec == ' ') koniec++;
|
|
|
|
// Читаем оператор
|
|
char op = *koniec;
|
|
if (op != '+' && op != '-' && op != '*' && op != '/') {
|
|
printf("CHYBA\n");
|
|
return;
|
|
}
|
|
|
|
// Двигаем указатель дальше
|
|
koniec++;
|
|
while (*koniec == ' ') koniec++;
|
|
|
|
// Читаем второе число
|
|
float b = strtof(koniec, &koniec);
|
|
if (koniec == zaciatok) {
|
|
printf("CHYBA\n");
|
|
return;
|
|
}
|
|
|
|
// Пропускаем пробелы перед знаком "="
|
|
while (*koniec == ' ') koniec++;
|
|
if (*koniec != '=') {
|
|
printf("CHYBA\n");
|
|
return;
|
|
}
|
|
|
|
// Двигаем указатель дальше
|
|
koniec++;
|
|
while (*koniec == ' ') koniec++;
|
|
|
|
// Читаем результат
|
|
float vysledok = strtof(koniec, &koniec);
|
|
if (koniec == zaciatok) {
|
|
printf("CHYBA\n");
|
|
return;
|
|
}
|
|
|
|
// Вычисляем реальный результат
|
|
int error = 0;
|
|
float skutocny = vypocitaj(a, b, op, &error);
|
|
if (error) {
|
|
printf("CHYBA\n");
|
|
return;
|
|
}
|
|
|
|
// Проверяем правильность ответа
|
|
over_vysledok(skutocny, vysledok);
|
|
}
|
|
|
|
int main() {
|
|
char buffer[BUFFER_SIZE];
|
|
|
|
while (1) {
|
|
printf("Zadajte priklad:\n");
|
|
|
|
if (!fgets(buffer, sizeof(buffer), stdin)) break; // Проверяем конец ввода
|
|
if (buffer[0] == '\n') {
|
|
printf("KONIEC\n");
|
|
break;
|
|
}
|
|
|
|
spracuj_riadok(buffer);
|
|
}
|
|
|
|
return 0;
|
|
} |