diff --git a/du3/program.c b/du3/program.c index 620b870..144be99 100644 --- a/du3/program.c +++ b/du3/program.c @@ -2,115 +2,124 @@ #include #include #include +#include float plus(float total, float number); float minus(float total, float number); float divided(float total, float number); -float multiplied(float total, float number); - +float multiplied(float total, float number); int main() { - char buffer[999]; - char row[999]; - char equation[999][20]; - char output[999][10]; - int output_length = 0; - int index = 0; - int eq_index = 0; - while (fgets(buffer, sizeof(buffer), stdin) != NULL) { - if (buffer[0] == '\n') break; - index = 0; - eq_index = 0; - int eq_operand_length = 0; - while (buffer[index] != '\n') { - if (buffer[index] != ' ') { - equation[eq_index][eq_operand_length] = buffer[index]; - eq_operand_length++; - } - else { - equation[eq_index][eq_operand_length] = '\0'; - eq_operand_length = 0; - eq_index++; - } - index++; - } - float total = 0.0; - int sign = 0; - char out[10] = ""; - int n_of_signs = 0; - char operators[6] = "+-=*/"; - char last_operator = '+'; - for (int i=0;i 1) && (equation[i][0] == '-')) - continue; - n_of_signs++; - } - } - if (((n_of_signs == 1) && sign && (strlen(equation[i]) == 1)) || ((n_of_signs == 0) && !sign)) { - if (!sign) { - switch (last_operator) { - case '+': - total = plus(total, atof(equation[i])); - break; - case '-': - total = minus(total, atof(equation[i])); - break; - case '*': - total = multiplied(total, atof(equation[i])); - break; - case '/': - total = divided(total, atof(equation[i])); - break; - case '=': - /*if (total == atof(equation[i]))*/if (fabs((round(total*100)/100) - atof(equation[i])) < 1e-6) { - strcpy(output[output_length], "OK"); - output_length++; - } - else { - strcpy(output[output_length], "ZLE"); - output_length++; - } - break; - } - } - else { - last_operator = equation[i][0]; - } - } - else { - strcpy(output[output_length], "CHYBA"); - output_length++; - break; - } - sign = !sign; - } - memset(equation, 0, sizeof(equation)); - //printf("%f", total); + char buffer[999]; + char equation[999][20]; + char output[999][10]; + int output_length = 0; + int eq_index = 0; + int index = 0; + while (fgets(buffer, sizeof(buffer), stdin) != NULL) { + if (buffer[0] == '\n') break; + index = 0; + eq_index = 0; + int eq_operand_length = 0; + while (buffer[index] != '\n' && buffer[index] != '\0') { + + if (isspace(buffer[index])) { + index++; + continue; + } + if (isdigit(buffer[index]) || (buffer[index] == '.' && eq_operand_length > 0 && isdigit(buffer[index + 1])) || (buffer[index] == '-' && (eq_operand_length == 0 || strchr("+-*/=", buffer[index - 1])))) { + equation[eq_index][eq_operand_length] = buffer[index]; + eq_operand_length++; + } + else if (strchr("+-*/=", buffer[index]) != NULL) { + if (eq_operand_length > 0) { + equation[eq_index][eq_operand_length] = '\0'; + eq_index++; + eq_operand_length = 0; + } + equation[eq_index][0] = buffer[index]; + equation[eq_index][1] = '\0'; + eq_index++; + } + index++; + } + if (eq_operand_length > 0) { + equation[eq_index][eq_operand_length] = '\0'; + eq_index++; + } - } - for (int i=0; i 1) && (equation[i][0] == '-')) + continue; + n_of_signs++; + } + } + if (((n_of_signs == 1) && sign && (strlen(equation[i]) == 1)) || ((n_of_signs == 0) && !sign)) { + if (!sign) { + switch (last_operator) { + case '+': + total = plus(total, atof(equation[i])); + break; + case '-': + total = minus(total, atof(equation[i])); + break; + case '*': + total = multiplied(total, atof(equation[i])); + break; + case '/': + total = divided(total, atof(equation[i])); + break; + case '=': + total = round(total * 100) / 100; + if (fabs(total - atof(equation[i])) < 1e-6) { + strcpy(output[output_length], "OK"); + output_length++; + } else { + strcpy(output[output_length], "ZLE"); + output_length++; + } + break; + } + } else { + last_operator = equation[i][0]; + } + } else { + strcpy(output[output_length], "CHYBA"); + output_length++; + break; + } + sign = !sign; + } + memset(equation, 0, sizeof(equation)); + } + for (int i=0; i