#include #include #include #include // Funkcie pre matematicke operacie // Kazda funkcia prijima dve cisla a vracia vysledok operacie 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) { if (b == 0) { return NAN; // Vrati NaN (Not a Number), ak sa pokusime delit nulou } return a / b; } // Funkcia, ktora vrati ukazovatel na funkciu pre danu operaciu // Napriklad, ak operacia je '+', vrati ukazovatel na funkciu scitat // Ak operacia nie je platna, vrati NULL 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; // Neplatna operacia } } int main() { char riadok[100]; // Pole na ulozenie riadku zo vstupu double cislo1, cislo2, zadany_vysledok; // Premenne pre dve cisla a ocakavany vysledok char operacia; // Premenna pre matematicku operaciu // Nekonecny cyklus na spracovanie vstupu po riadkoch while (1) { if (!fgets(riadok, sizeof(riadok), stdin)) { // Citanie riadku zo standardneho vstupu break; // Ak uz nie je vstup, ukoncime cyklus } // Ak je nacitany riadok prazdny (len novy riadok), ukoncime program if (riadok[0] == '\n') { break; } // Skusime nacitat hodnoty v ocakavanom formate: cislo1 operacia cislo2 = vysledok if (sscanf(riadok, "%lf %c %lf = %lf", &cislo1, &operacia, &cislo2, &zadany_vysledok) == 4) { // Ziskame funkciu pre danu operaciu double (*operacia_func)(double, double) = get_operator_func(operacia); // Ak sa podarilo ziskat platnu operaciu if (operacia_func) { double vysledok = operacia_func(cislo1, cislo2); // Vypocitame skutocny vysledok // Ak je vysledok neplatny (napriklad delenie nulou), vypiseme CHYBA if (isnan(vysledok)) { printf("CHYBA\n"); } // Porovname zaokruhleny vypocitany vysledok s ocakavanym vysledkom else if (fabs(vysledok - zadany_vysledok) < 0.005) { printf("OK\n"); // Vysledok je spravny } else { printf("ZLE\n"); // Vysledok je nespravny } } else { printf("CHYBA\n"); // Neplatna operacia } } else { // Ak sscanf() neprecital 4 hodnoty, vstup ma nespravny format printf("CHYBA\n"); } } return 0; }