pvjc20/du4/program.c

103 lines
2.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void add(double a, double b, double c,char ac, int result[],int count){
float cc=a+b;
if(cc==(float)c || a+b==c) result[count]=1;
else result[count]=2;
}
void subtr(double a, double b, double c,char ac, int result[],int count){
if(a-b==c) result[count]=1;
else result[count]=2;
}
void multi(double a, double b, double c,char ac, int result[],int count){
if(a*b==c) result[count]=1;
else result[count]=2;
}
void divi(double a, double b, double c,char ac, int result[],int count){
float cc=a/b;
double Cc=(int)((a/b)*100000);
if(cc==c || a/b==c || Cc==(int)(c*100000)) result[count]=1;
else result[count]=2;
}
int main()
{
char *str;
int *result;
result=(int*)malloc(100);
double a,b,c;
char ac,el=0;
int count=0;
int eof;
int ro=0;
for(;eof!=EOF;count++){
eof=0;
int k=0;
str=(char*)malloc(100);
int ind=0;
for(int i=0;eof!='\n';i++){
eof=getchar();
if(eof==EOF) break;
if(eof=='='){
ro++;
}
if(!isdigit(eof) && eof!='.' && eof!=' ' && eof!='='){
k++;
}
if(eof!=' '){
str[ind]=eof;
ind++;
}
}
if(ro==0){
result[count]=3;
break;
}
ro=0;
if(eof==EOF) break;
sscanf(str,"%lF%c%lF=%lF ",&a,&ac,&b,&c);
free(str);
if(k>2){
result[count]=3;
continue;
}
switch(ac){
case '+':
add(a,b,c,ac,result,count);
break;
case '-':
subtr(a,b,c,ac,result,count);
break;
case '*':
multi(a,b,c,ac,result,count);
break;
case '/':
divi(a,b,c,ac,result,count);
break;
default:
result[count]=3;
}
}
count--;
for(int j=0;j<count;j++){
if(result[j]==1) printf("OK\n");
if(result[j]==2) printf("ZLE\n");
if(result[j]==3) printf("CHYBA\n");
}
return 0;
}