push
This commit is contained in:
parent
4e49e6ad1c
commit
0c081e643e
120
du3/program.c
Normal file
120
du3/program.c
Normal 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;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user