Update 'du4/program.c'

This commit is contained in:
Anzhelika Nikolaieva 2023-03-17 21:25:17 +00:00
parent 927ff558af
commit b05aee6a20

View File

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