118 lines
2.9 KiB
C
118 lines
2.9 KiB
C
#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) {
|
|
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);
|
|
|
|
break;
|
|
}
|
|
|
|
if (riadok[0] == '\n' || riadok[0] == '\0') {
|
|
vypis_statistiku(pocet_ok, pocet_zle, pocet_chyba);
|
|
|
|
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("ZLE\n"); pocet_zle++; continue; }
|
|
spravny = cislo1 / cislo2;
|
|
}
|
|
|
|
spravny = zaokruhli(spravny);
|
|
|
|
if (su_rovnake(spravny, vysledok)) {
|
|
printf("OK\n");
|
|
pocet_ok++;
|
|
} else {
|
|
printf("ZLE\n");
|
|
pocet_zle++;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|