From 0a8f69bff5c239abc11c43b33f25d33b5bc2aa74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ka=C4=8Dm=C3=A1r?= Date: Wed, 12 Mar 2025 21:45:53 +0000 Subject: [PATCH] Update du3/program.c --- du3/program.c | 73 ++++++++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/du3/program.c b/du3/program.c index bf0557f..f043937 100644 --- a/du3/program.c +++ b/du3/program.c @@ -1,71 +1,56 @@ #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; - } +// Funkcie pre matematicke operacie +double scitaj(double a, double b) { return a + b; } +double odcitaj(double a, double b) { return a - b; } +double nasob(double a, double b) { return a * b; } +double del(double a, double b) { + if (b == 0) return NAN; // Ak sa deli nulou, vratime NaN + return a / b; } int main() { - char riadok[100]; + char riadok[100]; // Pole pre nacitanie vstupu double cislo1, cislo2, zadany_vysledok; char operacia; + // Nekonecna slucka na citanie vstupu while (1) { - if (!fgets(riadok, sizeof(riadok), stdin)) { - break; - } + if (!fgets(riadok, sizeof(riadok), stdin)) break; // Koniec vstupu - // Ak je riadok prázdny, ukončíme program - if (riadok[0] == '\n') { - break; - } + if (riadok[0] == '\n') break; // Ak je prazdny riadok, skoncime program - // Skontrolujeme formát: čislo1 operacia čislo2 = výsledok + // Skusime nacitat vstup podla ocakavaneho formatu 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); + double skutocny_vysledok; - // Ak operacia neexistuje, vypise CHYBA - if (!operacia_func) { - printf("CHYBA\n"); + // Rozhodneme podla operacie + if (operacia == '+') skutocny_vysledok = scitaj(cislo1, cislo2); + else if (operacia == '-') skutocny_vysledok = odcitaj(cislo1, cislo2); + else if (operacia == '*') skutocny_vysledok = nasob(cislo1, cislo2); + else if (operacia == '/') { + if (cislo2 == 0) { // Delenie nulou + printf("ZLE\n"); + continue; + } + skutocny_vysledok = del(cislo1, cislo2); + } else { + printf("CHYBA\n"); // Neznama operacia 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) { + // Porovname skutocny vysledok so zadanym (zaokruhlenie na 2 desatinne miesta) + if (fabs(skutocny_vysledok - zadany_vysledok) < 0.005) { printf("OK\n"); } else { printf("ZLE\n"); } } else { - // Ak sscanf zlyhá, znamená to chybný formát - printf("CHYBA\n"); + printf("CHYBA\n"); // Zlyhal format vstupu } } return 0; -} - +} \ No newline at end of file