pvjc25/du3/program.c

72 lines
2.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// 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;
}