#include #include #include #include // Funkcie pre matematické operácie double scitat(double a, double b) { return a + b; } double odcitat(double a, double b) { return a - b; } double nasobit(double a, double b) { return a * b; } double delit(double a, double b) { return (b == 0) ? NAN : a / b; } // Ak b == 0, vrati NaN // Získať funkciu pre konkrétnu operáciu double (*get_operator_func(char operacia))(double, double) { switch (operacia) { case '+': return scitat; case '-': return odcitat; case '*': return nasobit; case '/': return delit; default: return NULL; } } int main() { char riadok[100]; double cislo1, cislo2, zadany_vysledok; char operacia; while (1) { if (!fgets(riadok, sizeof(riadok), stdin)) { break; } // Ak je riadok prázdny, ukončíme program if (riadok[0] == '\n') { break; } // Skontrolujeme formát: čislo1 operacia čislo2 = výsledok if (sscanf(riadok, "%lf %c %lf = %lf", &cislo1, &operacia, &cislo2, &zadany_vysledok) == 4) { // Získame správnu funkciu podľa operácie double (*operacia_func)(double, double) = get_operator_func(operacia); // Ak operacia neexistuje, vypise CHYBA if (!operacia_func) { printf("CHYBA\n"); continue; } // Skontrolujeme delenie nulou if (operacia == '/' && cislo2 == 0) { printf("ZLE\n"); continue; } double vysledok = operacia_func(cislo1, cislo2); // Porovnáme s požadovaným výsledkom (zaokrúhlené na 2 desatinné miesta) if (fabs(vysledok - zadany_vysledok) < 0.005) { printf("OK\n"); } else { printf("ZLE\n"); } } else { // Ak sscanf zlyhá, znamená to chybný formát printf("CHYBA\n"); } } return 0; }