pvjc26/du3/program.c

91 lines
3.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define LINE_SIZE 100
int main() {
char input[LINE_SIZE];
char* cast1; //budem prehadzovat odseknuty riadok hore dole
while (1) {
if (fgets(input, LINE_SIZE, stdin) == NULL || input [0] == '\n') break;
char *cast2 = input; //beriem si nacitany riadok ktory idem riesit
//nacitam si prve cislo a okontrolujem ci je validne
float a = strtof(cast2, &cast1); //float kde si nahram prve cislo prikladu
if (cast2 == cast1) { //podla toho co som odparsoval, ak sa neodparsoval cislo, ostane mi tam stale cely string
printf ("CHYBA\n");
continue;
}
cast2 = cast1; //ulozim si poziciu v pamati kde som naposledy skoncil
while (*cast2 == ' ') cast2++; //zbavim sa medzier
char operacia = *cast2; //nacitam si do jednotkovej premennej char prvy prvok pola cast2,
//ktory by malo byt znamienko operacie
if (operacia != '+' && operacia != '-' && operacia != '*' && operacia != '/') {
printf ("CHYBA\n");
continue;
}
cast2++; //posuniem sa na dalsiu poziciu pola char kde by malo byt cislo alebo medzera
while (*cast2 == ' ') cast2++; //zbavim sa medzier
float b = strtof(cast2, &cast1); //float kde si nahram druhe cislo prikladu (kopia nacitania prveho cisla)
if (cast2 == cast1) { //podla toho co som odparsoval, ak sa neodparsoval cislo, ostane mi tam stale cely string
printf ("CHYBA\n");
continue;
}
cast2 = cast1; //ulozim si poziciu v pamati kde som naposledy skoncil
while (*cast2 == ' ') cast2++; //zbavim sa medzier po =
char rovna_sa = *cast2; //nacitam si do jednotkovej premennej znak, dufam ze je to =
if (rovna_sa != '=') {
printf ("CHYBA\n");
continue;
}
cast2++; //posuniem sa na dalsiu poziciu pola char kde by malo byt cislo alebo medzera
while (*cast2 == ' ') cast2++; //zbavim sa medzier
float c = strtof(cast2, &cast1); //float kde si nahram vysledok prikladu (kopia nacitania prveho cisla)
if (cast2 == cast1) { //podla toho co som odparsoval, ak sa neodparsoval cislo, ostane mi tam stale cely string
printf ("CHYBA\n");
continue;
}
float vysledok;
switch (operacia) {
case '+':
vysledok = a + b;
break;
case '-':
vysledok = a - b;
break;
case '*':
vysledok = a * b;
break;
case '/':
if (b == 0) {
printf ("ZLE\n");
continue;
}
vysledok = a / b;
break;
default:
printf ("CHYBA\n");
continue;
}
float zaokruhleny_vysledok = roundf(vysledok * 100) / 100; //zaokruhlim moj vysledok na 2 des. miesta
float zaokruhlene_c = roundf(c * 100) / 100; //zaokruhlim nacitane c na 2 des. miesta
if (zaokruhleny_vysledok == zaokruhlene_c) printf("OK\n"); else printf ("ZLE\n");
}
return 0;
}