pvjc20/du4/program.c

86 lines
1.6 KiB
C
Raw Normal View History

2020-04-02 23:03:29 +00:00
#include <stdio.h>
#include<string.h>
2020-04-02 23:23:43 +00:00
#include<math.h>
2020-04-02 23:03:29 +00:00
#include<stdlib.h>
char* compactString(char *src,int leng) {
char *new_str = (char*)calloc(leng+1,sizeof(char));
int k=0;
for(int i=0;i<leng;i++){
if(src[i]!=' '){
new_str[k] = src[i];
k++;
}
}
return new_str;
}
double operation(double first,double second,char c){
2020-04-02 23:23:43 +00:00
double x =0;
2020-04-02 23:03:29 +00:00
if(c=='*'){
2020-04-02 23:23:43 +00:00
x=first*second;
return x;
2020-04-02 23:03:29 +00:00
}
else if(c =='-'){
2020-04-02 23:23:43 +00:00
x=first-second;
return x;
2020-04-02 23:03:29 +00:00
}
else if(c=='/'){
2020-04-02 23:23:43 +00:00
x=first/second;
return x;
2020-04-02 23:03:29 +00:00
}
2020-04-02 23:23:43 +00:00
x= first+second;
return x;
}
double round_to(double value, double eps)
{
return floor(value/eps + 0.5) * eps;
}
double compare_percent(double a, double b, double eps)
{
double diff = round_to( (a - b) * 2 / (a + b), eps);
return diff < 0 ? -1 : diff > 0 ? +1 : 0;
2020-04-02 23:03:29 +00:00
}
int main()
{
2020-04-02 23:29:32 +00:00
char str[100][100];
int i =0;
2020-04-02 23:45:12 +00:00
int j =0;
while((c=getchar())!=EOF){
if(c=='\n'){
j=0;
i++;
}
str[i][j]=c;
j++;
}
2020-04-02 23:29:32 +00:00
for(int k=0;k<i;k++){
2020-04-02 23:45:12 +00:00
char *new_str = compactString(str[i],strlen(str));
2020-04-02 23:29:32 +00:00
double first =-5,second =-5,res=-5;
char c='E';
sscanf(new_str,"%lf%c%lf%*[=]%lf",&first,&c,&second,&res);
2020-04-02 23:03:29 +00:00
2020-04-02 23:29:32 +00:00
if(c=='E'||first==-5||second==-5||res==-5||(c!=43&&c!=42&&c!=45&&c!=47)){
printf("CHYBA\n");
return 0;
}
double my_res = operation(first,second,c);
if(compare_percent(res,my_res,0.01)==0){
printf("OK\n");
}
else{
printf("ZLE\n");
}
2020-04-02 23:03:29 +00:00
2020-04-02 23:29:32 +00:00
}
2020-04-02 23:03:29 +00:00
return 0;
2020-04-02 23:45:12 +00:00
}