pvjc25/du3/program.c
2025-03-14 11:43:08 +01:00

98 lines
2.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define TOLERANCE 0.01
float zaokruhli(float cislo){
return roundf(cislo * 100) / 100;
}
int main(){
char riadok[100];
while (fgets(riadok, sizeof(riadok), stdin)){
riadok[strcspn(riadok, "\n")] = 0;
if (strlen(riadok) == 0){
break;
}
char *ptr = riadok;
while (*ptr == ' ') ptr++;
char *endptr;
float cislo1 = strtof(ptr, &endptr);
if (ptr == endptr){
printf("CHYBA\n");
continue;
}
ptr = endptr;
while (*ptr == ' ') ptr++;
char operacia = *ptr;
if (operacia != '+' && operacia != '-' && operacia != '*' && operacia != '/') {
printf("CHYBA\n");
continue;
}
ptr++;
while (*ptr == ' ') ptr++;
float cislo2 = strtof(ptr, &endptr);
if (ptr == endptr){
printf("CHYBA\n");
continue;
}
ptr = endptr;
while (*ptr == ' ') ptr++;
if (*ptr != '='){
printf("CHYBA\n");
continue;
}
ptr++;
while (*ptr == ' ') ptr++;
float zadany_vysledok = strtof(ptr, &endptr);
if (ptr == endptr || *endptr != '\0'){
printf("CHYBA\n");
continue;
}
float skutocny_vysledok = 0;
int chyba = 0;
switch (operacia){
case '+': skutocny_vysledok = cislo1 + cislo2; break;
case '-': skutocny_vysledok = cislo1 - cislo2; break;
case '*': skutocny_vysledok = cislo1 * cislo2; break;
case '/':
if (cislo2 == 0){
skutocny_vysledok = INFINITY;
}
else
{
skutocny_vysledok = cislo1 / cislo2;
}
break;
default: chyba = 1;
}
if(chyba){
printf("CHYBA\n");
continue;
}
if(zaokruhli(skutocny_vysledok) == zaokruhli(zadany_vysledok)){
printf("OK\n");
}
else
{
printf("ZLE\n");
}
}
return 0;
}