This commit is contained in:
Filip Chochol 2026-03-18 09:03:25 +01:00
parent 4e49e6ad1c
commit 0c081e643e

120
du3/program.c Normal file
View File

@ -0,0 +1,120 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#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;
}