diff --git a/cv3/program.c b/cv3/program.c index e69de29..469e7fa 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -0,0 +1,106 @@ +#include +#include +#include +#define STACK_SIZE 10 +struct stack_glavny { + float data[STACK_SIZE]; + int size; +}; + + +void initialize(struct stack_glavny* stack) { + stack->size = -1; +} + + +int push(struct stack_glavny* stack, float value) { + if (stack->size < STACK_SIZE - 1) { + stack->size++; + stack->data[stack->size] = value; + return true; + } else { + return false; + } +} + + +int pop(struct stack_glavny* stack, float* result) { + if (stack->size >= 0) { + *result = stack->data[stack->size]; + stack->size--; + return true; + } else { + return false; + } +} + + +int operation_insert_result(struct stack_glavny* stack, char operation) { + float operand1, operand2, result; + if (pop(stack, &operand2) && pop(stack, &operand1)) { + switch (operation) { + case '+': + result = operand1 + operand2; + break; + case '-': + result = operand1 - operand2; + break; + case '*': + result = operand1 * operand2; + break; + case '/': + if (operand2 == 0) { + printf("Chyba: Delenie nulou.\n"); + return false; + } + result = operand1 / operand2; + break; + default: + printf("Chyba: Neplatná operácia.\n"); + return false; + } + if (!push(stack, result)) { + printf("Chyba: Zásobník je plný.\n"); + return false; + } + return true; + } else { + printf("Chyba: Nedostatok operandov pre operáciu.\n"); + return false; + } +} + +int main() { + struct stack_glavny stack; + initialize(&stack); + + char input[20]; + + while (1) { + if (!fgets(input, sizeof(input), stdin)) { + printf("Chyba pri citani vstupu.\n"); + break; + } + + float value; + + if (sscanf(input, "%f", &value) == 1) { + if (!push(&stack, value)) { + printf("Chyba: Zásobník je plný.\n"); + break; + } + } else if (input[0] == '+' || input[0] == '-' || input[0] == '*' || input[0] == '/') { + if (!operation_insert_result(&stack, input[0])) { + break; + } + } else { + printf("Chyba: Neplatný vstup.\n"); + break; + } + for (int i = 0; i <= stack.size; i++) { + printf("%.2f ", stack.data[i]); + } + printf("\n"); + } + return 0; +} \ No newline at end of file