From 31b8e7c8d42b2341ebb8456357aa33264b94ebc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ka=C4=8Dm=C3=A1r?= Date: Wed, 12 Mar 2025 21:35:27 +0000 Subject: [PATCH] Upload files to "du3" --- du3/program.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 du3/program.c diff --git a/du3/program.c b/du3/program.c new file mode 100644 index 0000000..1580665 --- /dev/null +++ b/du3/program.c @@ -0,0 +1,80 @@ +#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; +} +