bez medzier a s viacerymy medzerami naraz
This commit is contained in:
parent
ed35d59346
commit
100f8e2e89
191
du3/program.c
191
du3/program.c
@ -2,115 +2,124 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
float plus(float total, float number);
|
float plus(float total, float number);
|
||||||
float minus(float total, float number);
|
float minus(float total, float number);
|
||||||
float divided(float total, float number);
|
float divided(float total, float number);
|
||||||
float multiplied(float total, float number);
|
float multiplied(float total, float number);
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
char buffer[999];
|
char buffer[999];
|
||||||
char row[999];
|
char equation[999][20];
|
||||||
char equation[999][20];
|
char output[999][10];
|
||||||
char output[999][10];
|
int output_length = 0;
|
||||||
int output_length = 0;
|
int eq_index = 0;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
int eq_index = 0;
|
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
|
||||||
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
|
if (buffer[0] == '\n') break;
|
||||||
if (buffer[0] == '\n') break;
|
index = 0;
|
||||||
index = 0;
|
eq_index = 0;
|
||||||
eq_index = 0;
|
int eq_operand_length = 0;
|
||||||
int eq_operand_length = 0;
|
while (buffer[index] != '\n' && buffer[index] != '\0') {
|
||||||
while (buffer[index] != '\n') {
|
|
||||||
if (buffer[index] != ' ') {
|
if (isspace(buffer[index])) {
|
||||||
equation[eq_index][eq_operand_length] = buffer[index];
|
index++;
|
||||||
eq_operand_length++;
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
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] = '\0';
|
equation[eq_index][eq_operand_length] = buffer[index];
|
||||||
eq_operand_length = 0;
|
eq_operand_length++;
|
||||||
eq_index++;
|
}
|
||||||
}
|
else if (strchr("+-*/=", buffer[index]) != NULL) {
|
||||||
index++;
|
if (eq_operand_length > 0) {
|
||||||
}
|
equation[eq_index][eq_operand_length] = '\0';
|
||||||
float total = 0.0;
|
eq_index++;
|
||||||
int sign = 0;
|
eq_operand_length = 0;
|
||||||
char out[10] = "";
|
}
|
||||||
int n_of_signs = 0;
|
equation[eq_index][0] = buffer[index];
|
||||||
char operators[6] = "+-=*/";
|
equation[eq_index][1] = '\0';
|
||||||
char last_operator = '+';
|
eq_index++;
|
||||||
for (int i=0;i<eq_index+1;i++) {
|
}
|
||||||
n_of_signs = 0;
|
index++;
|
||||||
for (int l=0; l<5;l++) {
|
}
|
||||||
if (strchr(equation[i], operators[l]) != NULL) {
|
if (eq_operand_length > 0) {
|
||||||
if ((strlen(equation[i]) > 1) && (equation[i][0] == '-'))
|
equation[eq_index][eq_operand_length] = '\0';
|
||||||
continue;
|
eq_index++;
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
float total = 0.0;
|
||||||
for (int i=0; i<output_length; i++) {
|
char last_operator = '+';
|
||||||
printf("%s\n", output[i]);
|
int sign = 0;
|
||||||
}
|
int n_of_signs = 0;
|
||||||
|
char operators[6] = "+-=*/";
|
||||||
|
for (int i=0;i<eq_index;i++) {
|
||||||
|
n_of_signs = 0;
|
||||||
|
for (int l=0; l<5;l++) {
|
||||||
|
if (strchr(equation[i], operators[l]) != NULL) {
|
||||||
|
if ((strlen(equation[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<output_length; i++) {
|
||||||
|
printf("%s\n", output[i]);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float plus(float total, float number) {
|
float plus(float total, float number) {
|
||||||
return total + number;
|
return total + number;
|
||||||
}
|
}
|
||||||
|
|
||||||
float minus(float total, float number) {
|
float minus(float total, float number) {
|
||||||
return total - number;
|
return total - number;
|
||||||
}
|
}
|
||||||
|
|
||||||
float divided(float total, float number) {
|
float divided(float total, float number) {
|
||||||
return total / number;
|
return total / number;
|
||||||
}
|
}
|
||||||
|
|
||||||
float multiplied(float total, float number) {
|
float multiplied(float total, float number) {
|
||||||
return total * number;
|
return total * number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user