#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; }