Изменить 'du4/program.c'

^^
This commit is contained in:
Oleksandr Hryshchenko 2021-04-01 13:38:09 +00:00
parent 9fef31bff3
commit 95212f7acd

View File

@ -4,14 +4,14 @@
#include <string.h> #include <string.h>
#include <stdbool.h> #include <stdbool.h>
int main(){ int main() {
char* input = (char*) calloc (100, sizeof(char)); char* input = (char*) calloc(100, sizeof(char));
char symbol; char symbol;
int counter; int counter;
int operation; int operation;
char* number1 = (char*) calloc (25, sizeof(char)); char* number1 = (char*) calloc(25, sizeof(char));
char* number2 = (char*) calloc (25, sizeof(char)); char* number2 = (char*) calloc(25, sizeof(char));
char* result = (char*) calloc (30, sizeof(char)); char* result = (char*) calloc(30, sizeof(char));
char* ptr; char* ptr;
bool equals = false; bool equals = false;
@ -23,14 +23,13 @@ int main(){
equals = false; equals = false;
memset(number1, '\0', 25); memset(number1, '\0', 25);
memset(number2, '\0', 25); memset(number2, '\0', 25);
while(input[counter] != '\0' && input[counter] != '\n'){
while (input[counter] != '\0' && input[counter] != '\n'){
symbol = input[counter++]; symbol = input[counter++];
while(isspace(symbol)) while (isspace(symbol))
symbol = input[counter++]; symbol = input[counter++];
if(symbol == '\0' || symbol == '\n') if(symbol == '\0' || symbol == '\n')
break; break;
switch(symbol){ switch (symbol) {
case '+': case '+':
operation = 1; operation = 1;
break; break;
@ -47,16 +46,16 @@ int main(){
equals = true; equals = true;
break; break;
default: default:
if(isdigit(symbol) || symbol == '.'){ if (isdigit(symbol) || symbol == '.'){
if(operation == 0) if (operation == 0)
number1 += symbol; number1 += symbol;
else if (!equals) else if(!equals)
number2 += symbol; number2 += symbol;
else else
result += symbol; result += symbol;
} }
else { else{
printf("CHYBA"); printf("CHYBA\n");
goto LABEL; goto LABEL;
} }
break; break;
@ -68,16 +67,16 @@ int main(){
printf("%s\n", (strtof(number1, &ptr) + strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) + strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE"); printf("%s\n", (strtof(number1, &ptr) + strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) + strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE");
break; break;
case 2: case 2:
printf("%s\n", (strtof(number1, &ptr) + strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) - strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE"); printf("%s\n", (strtof(number1, &ptr) - strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) - strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE");
break; break;
case 3: case 3:
printf("%s\n", (strtof(number1, &ptr) + strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) * strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE"); printf("%s\n", (strtof(number1, &ptr) * strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) * strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE");
break; break;
case 4: case 4:
printf("%s\n", (strtof(number1, &ptr) + strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) / strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE"); printf("%s\n", (strtof(number1, &ptr) / strtof(number2, &ptr) > strtof(result, &ptr) - 0.001 && strtof(number1, &ptr) / strtof(number2, &ptr) < strtof(result, &ptr) + 0.001) ? "OK" : "ZLE");
break; break;
default: default:
printf("CHYBA"); printf("CHYBA\n");
} }
} }