funguje bez kontroly vstupu
This commit is contained in:
parent
c3191d3038
commit
2f95f9f843
106
du3/program.c
106
du3/program.c
@ -1,6 +1,112 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
float plus(float total, float number);
|
||||
float minus(float total, float number);
|
||||
float divided(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<eq_index+1;i++) {
|
||||
n_of_signs = 0;
|
||||
for (int l=0; l<5;l++) {
|
||||
if (strchr(equation[i], operators[l]) != NULL) {
|
||||
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])) {
|
||||
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;
|
||||
}
|
||||
//printf("%s\n",out);
|
||||
|
||||
}
|
||||
for (int i=0; i<output_length; i++) {
|
||||
printf("%s\n", output[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
float plus(float total, float number) {
|
||||
return total + number;
|
||||
}
|
||||
|
||||
float minus(float total, float number) {
|
||||
return total - number;
|
||||
}
|
||||
|
||||
float divided(float total, float number) {
|
||||
return total / number;
|
||||
}
|
||||
|
||||
float multiplied(float total, float number) {
|
||||
return total * number;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user