Update du3/program.c
This commit is contained in:
parent
7bf0cfe0d8
commit
0a8f69bff5
@ -1,71 +1,56 @@
|
||||
#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;
|
||||
}
|
||||
// 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");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skontrolujeme delenie nulou
|
||||
if (operacia == '/' && cislo2 == 0) {
|
||||
// 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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user