pvjc23/du4/program.c

85 lines
2.0 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main() {
char priklad[300];
int count = 0;
// Read input line by line
while (fgets(priklad, sizeof(priklad), stdin) != NULL) {
count++;
// Parse expression and evaluate it
char *start = priklad;
char *end = NULL;
int valid = 1;
float num1 = strtof(start, &end);
if (end == start) {
printf("KONIEC\n");
continue;
}
start = end;
// Find the operation symbol
char op = *start;
if (op != '+' && op != '-' && op != '*' && op != '/') {
valid = 0;
}
start++;
// Parse second number
float num2 = strtof(start, &end);
if (end == start) {
valid = 0;
}
start = end;
// Check for extra characters
while (*start != '\0') {
if (*start != '\n' && (*start < '0' || *start > '9') && *start != '.' && *start != ' ') {
valid = 0;
printf("CHYBA\n");
start++;
break;
}
}
float result=0;
if (valid) {
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
}
// Round result and compare to expected value
float expected;
if (sscanf(start, "%f", &expected) != 1) {
continue;
}
expected = round(expected * 100) / 100;
if (fabs(result - expected) < 0.001) {
printf("OK\n");
} else {
printf("ZLE\n");
}
}
return EXIT_SUCCESS;
}