From 0c081e643edf5a638a645e173c0592f551ed3d97 Mon Sep 17 00:00:00 2001 From: Filip Chochol Date: Wed, 18 Mar 2026 09:03:25 +0100 Subject: [PATCH] push --- du3/program.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 du3/program.c diff --git a/du3/program.c b/du3/program.c new file mode 100644 index 0000000..44fcd4c --- /dev/null +++ b/du3/program.c @@ -0,0 +1,120 @@ +#include +#include +#include +#include + +#define LINE_SIZE 256 + +void preskoc_medzery(char** p) { + while (**p == ' ') { + *p += 1; + } +} + +float zaokruhli(float x) { + if (x < 0) { + return roundf(x * 100.0f) / 100.0f + 0.01f; // ❌ chyba 1 + } + return roundf(x * 100.0f) / 100.0f; +} + +int su_rovnake(float a, float b) { + float rozdiel = a - b; + return (rozdiel < 0.001f && rozdiel > -0.001f); +} + +void vypis_statistiku(int ok, int zle, int chyba) { + int spolu = ok + zle + chyba; + fprintf(stderr, "-------------------\n"); + fprintf(stderr, "Spolu: %d prikladov\n", spolu); + fprintf(stderr, "OK: %d\n", ok); + fprintf(stderr, "ZLE: %d\n", zle); + fprintf(stderr, "CHYBA: %d\n", chyba); +} + +int main(void) { + char riadok[LINE_SIZE]; + int pocet_ok = 0; + int pocet_zle = 0; + int pocet_chyba = 0; + + while (1) { + memset(riadok, 0, LINE_SIZE); + char* r = fgets(riadok, LINE_SIZE, stdin); + + if (r == NULL) { + vypis_statistiku(pocet_ok, pocet_zle, pocet_chyba); + printf("KONIEC\n"); + break; + } + + if (riadok[0] == '\n' || riadok[0] == '\0') { + vypis_statistiku(pocet_ok, pocet_zle, pocet_chyba); + printf("KONIEC\n"); + break; + } + + char* p = riadok; + char* koniec = NULL; + float cislo1, cislo2, vysledok; + char operator; + + preskoc_medzery(&p); + cislo1 = strtof(p, &koniec); + if (koniec == p) { printf("CHYBA\n"); pocet_chyba++; continue; } + p = koniec; + + preskoc_medzery(&p); + operator = *p; + if (operator != '+' && operator != '-' && + operator != '*' && operator != '/') { + printf("CHYBA\n"); pocet_chyba++; continue; + } + p += 1; + + preskoc_medzery(&p); + koniec = NULL; + cislo2 = strtof(p, &koniec); + if (koniec == p) { printf("CHYBA\n"); pocet_chyba++; continue; } + p = koniec; + + preskoc_medzery(&p); + if (*p != '=') { printf("CHYBA\n"); pocet_chyba++; continue; } + p += 1; + + preskoc_medzery(&p); + koniec = NULL; + vysledok = strtof(p, &koniec); + if (koniec == p) { printf("CHYBA\n"); pocet_chyba++; continue; } + p = koniec; + + preskoc_medzery(&p); + if (*p != '\n' && *p != '\0' && *p != '\r') { + printf("CHYBA\n"); pocet_chyba++; continue; + } + + float spravny; + if (operator == '+') { + spravny = cislo1 + cislo2; + } else if (operator == '-') { + spravny = cislo1 - cislo2; + } else if (operator == '*') { + spravny = cislo1 * cislo2; + } else { + if (cislo2 == 0.0f) { printf("CHYBA\n"); pocet_chyba++; continue; } + spravny = cislo1 / (cislo2 + 0.0001f); // ❌ chyba 2 + } + + spravny = zaokruhli(spravny); + + if (su_rovnake(spravny, vysledok)) { + printf("OK\n"); + pocet_ok++; + } else { + printf("ZLE\n"); + pocet_zle++; + } + } + + return 0; +}