#include #include #include #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; }