diff --git a/a1/program.c b/a1/program.c new file mode 100644 index 0000000..115abc7 --- /dev/null +++ b/a1/program.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include + +// Funkcia na kontrolu, či je daný znak operátor +bool is_operator(char c) { + return c == '+' || c == '-' || c == '*' || c == '/'; +} + +// Funkcia na kontrolu, či je daný znak medzera +bool is_space(char c) { + return c == ' '; +} + +// Funkcia na kontrolu, či je daný znak číslica +bool is_digit(char c) { + return isdigit(c); +} + +// Funkcia na vykonanie matematickej operácie +double calculate(double num1, char op, double num2) { + switch(op) { + case '+': + return num1 + num2; + case '-': + return num1 - num2; + case '*': + return num1 * num2; + case '/': + return num1 / num2; + default: + return 0; // Nie je podporovaný operátor + } +} + +int main() { + char line[100]; // Predpokladáme, že žiadny riadok nebude dlhší ako 100 znakov + + while (fgets(line, sizeof(line), stdin)) { + if (strcmp(line, "\n") == 0) // Ak je riadok prázdny, končíme + break; + + int len = strlen(line); + if (line[len - 1] == '\n') // Odstránenie konca riadka + line[len - 1] = '\0'; + + char op; + double num1, num2, result; + int scanned = sscanf(line, "%lf %c %lf = %lf", &num1, &op, &num2, &result); + + // Kontrola, či boli načítané správne hodnoty + if (scanned != 4 || !is_operator(op) || !is_digit(line[0]) || !is_digit(line[len-2]) || line[len-3] != ' ') + printf("CHYBA\n"); + else { + double calculated_result = calculate(num1, op, num2); + if (fabs(calculated_result - result) < 0.01) // Zaokrúhlenie na 2 desatinné miesta + printf("OK\n"); + else + printf("ZLE\n"); + } + } + + return 0; +}