From 35ea3c3e975f52c2862c93812c236ccc4ac2cbf9 Mon Sep 17 00:00:00 2001 From: Yurii Chechur Date: Sun, 13 Oct 2024 14:13:46 +0000 Subject: [PATCH] Add cv3/programe.c --- cv3/programe.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 cv3/programe.c diff --git a/cv3/programe.c b/cv3/programe.c new file mode 100644 index 0000000..d208a7d --- /dev/null +++ b/cv3/programe.c @@ -0,0 +1,114 @@ +#include +#include +#include +#include + +#define STACK_SIZE 10 + +struct stack { + float values[STACK_SIZE]; + int size; +}; + +void init(struct stack *s) { + s->size = 0; +} + +void push_stack(struct stack *s, float value) { + if (s->size < STACK_SIZE) { + s->values[s->size] = value; + s->size++; + } else { + printf("Stack is full! Exiting program.\n"); + exit(1); // Вихід з програми при переповненні + } +} + +float pop_stack(struct stack *s) { + if (s->size > 0) { + s->size--; + return s->values[s->size]; + } else { + printf("Stack is empty! Exiting program.\n"); + exit(1); // Вихід з програми при порожньому стеку + } +} + +void print_stack(struct stack *s) { + for (int i = 0; i < s->size; i++) { + printf("%.2f ", s->values[i]); + } + printf("\n"); +} + +int read(struct stack *s) { + char temp[100]; + + if (fgets(temp, sizeof(temp), stdin) == NULL) { + return 0; + } + + if (strcmp(temp, "end\n") == 0) { + return 0; + } + + float value; + int scan = sscanf(temp, "%f", &value); + + if (scan == 1) { + push_stack(s, value); + print_stack(s); // Виводимо стек після додавання + } else { + switch (temp[0]) { + case '+': + case '-': + case '*': + case '/': { + if (s->size < 2) { + printf("Not enough values in the stack for operation! Exiting program.\n"); + exit(1); // Вихід з програми при недостатніх значеннях + } + float b = pop_stack(s); // Спочатку витягуємо значення + float a = pop_stack(s); + + float result; + switch (temp[0]) { + case '+': result = a + b; break; + case '-': result = a - b; break; + case '*': result = a * b; break; + case '/': + if (b == 0) { + printf("Cannot divide by zero! Exiting program.\n"); + exit(1); // Вихід з програми при діленні на нуль + } + result = a / b; + break; + } + push_stack(s, result); // Додаємо результат назад у стек + printf(" %.2f\n", result); // Виводимо результат + print_stack(s); // Виводимо стек після виконання операції + break; + } + default: + printf("Invalid input. Please enter a number or an operator. Exiting program.\n"); + exit(1); // Вихід з програми при невірному введенні + break; + } + } + + return 1; +} + +int main() { + struct stack my_stack; + init(&my_stack); + printf("\n"); + + while (1) { + if (read(&my_stack) == 0) { + break; + } + } + + return 0; +}