From 015ae09f7d51ddb2939b050677f4cc4d9c5641ca Mon Sep 17 00:00:00 2001 From: Oleksandr Hryshchenko Date: Thu, 1 Apr 2021 13:10:17 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20'du4/program.c'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit raz --- du4/program.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/du4/program.c b/du4/program.c index f0aeabc..22ad1c1 100644 --- a/du4/program.c +++ b/du4/program.c @@ -1,5 +1,81 @@ #include +#include +#include +#include +#include int main(){ + char* input = (char*) calloc (100, sizeof(char)); + char symbol = '\0'; + int counter = 0; + int operation = 0; + char* number1 = (char*) calloc (25, sizeof(char)); + char* number2 = (char*) calloc (25, sizeof(char)); + char* result = (char*) calloc (30, sizeof(char)); + char* ptr; + bool equals = false; + for(int i = 0; fgets(input, 100, stdin); i++){ + counter = 0; + operation = 0; + equals = false; + memset(number1, '\0', 25); + memset(number2, '\0', 25); + + while (input[counter] != '\0'){ + symbol = input[counter++]; + while(isspace(symbol)) + symbol = input[counter++]; + switch(symbol){ + case '+': + operation = 1; + break; + case '-': + operation = 2; + break; + case '*': + operation = 3; + break; + case '/': + operation = 4; + break; + case '=': + equals = true; + break; + default: + if(isdigit(symbol) || symbol == '.'){ + if(operation == 0) + number1 += symbol; + else if (!equals) + number2 += symbol; + else + result += symbol; + } + else if(!isdigit(symbol)){ + printf("CHYBA"); + goto LABEL; + } + break; + } + } + LABEL: + switch(operation){ + case 1: + printf("%.s\n", (strtof(number1, &ptr) + strtof(number2, &ptr) == strtof(result, &ptr)) ? "OK" : "ZLE"); + break; + case 2: + printf("%.s\n", strtof(number1, &ptr) - strtof(number2, &ptr) == strtof(result, &ptr)) ? "OK" : "ZLE"); + break + case 3: + printf("%.s\n", strtof(number1, &ptr) * strtof(number2, &ptr) == strtof(result, &ptr)) ? "OK" : "ZLE"); + break; + case 4: + printf("%.s\n", strtof(number1, &ptr) / strtof(number2, &ptr) == strtof(result, &ptr)) ? "OK" : "ZLE"); + break; + default: + printf("CHYBA"); + } + } + + return 0; }