usaa24/cv3/program.c

109 lines
2.2 KiB
C
Raw Normal View History

2024-10-16 07:53:15 +00:00
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define STACK_SIZE 10
float stack[STACK_SIZE];
int stack_top = -1;
bool is_number(char *string) {
char *end;
strtof(string, &end);
2024-10-16 08:28:05 +00:00
return end != string && (*end == '\n' || *end == '\0');
2024-10-16 07:53:15 +00:00
}
2024-10-16 08:01:39 +00:00
bool is_operation(char *string) {
return strlen(string) == 2 && (string[0] == '+' || string[0] == '-' || string[0] == '*' || string[0] == '/');
2024-10-16 07:53:15 +00:00
}
float calculator(float n1, float n2, char operation) {
if (operation == '+') {
return n1 + n2;
}
else if (operation == '-') {
return n1 - n2;
}
else if (operation == '*') {
return n1 * n2;
}
else if (operation == '/') {
if (n2 != 0) {
return n1 / n2;
} else {
2024-10-16 09:59:18 +00:00
printf("division by zero\n");
2024-10-16 20:38:56 +00:00
exit(0);
2024-10-16 07:53:15 +00:00
}
}
return 0;
}
2024-10-16 08:01:39 +00:00
2024-10-16 07:53:15 +00:00
void push(float number) {
if (stack_top < STACK_SIZE - 1) {
stack[++stack_top] = number;
} else {
2024-10-16 20:49:15 +00:00
printf("full stack\n");
2024-10-16 20:38:56 +00:00
exit(0);
2024-10-16 07:53:15 +00:00
}
}
2024-10-16 08:01:39 +00:00
2024-10-16 07:53:15 +00:00
float pop() {
if (stack_top >= 0) {
return stack[stack_top--];
} else {
2024-10-16 20:42:58 +00:00
printf("stack is empty\n");
2024-10-16 20:38:56 +00:00
exit(0);
2024-10-16 07:53:15 +00:00
}
}
2024-10-16 08:30:32 +00:00
void print_stack() {
2024-10-16 20:38:56 +00:00
for (int i = 0; i <= stack_top; i++) {
printf("%.2f", stack[i]);
if (i < stack_top) {
printf(" ");
2024-10-16 08:30:32 +00:00
}
}
2024-10-16 20:38:56 +00:00
printf(" \n");
2024-10-16 08:30:32 +00:00
}
2024-10-16 07:53:15 +00:00
int main() {
char arr[50];
char *pend;
stack_top = -1;
while (fgets(arr, 50, stdin)) {
if (arr[0] == '\n' || arr[0] == EOF) {
break;
}
2024-10-16 08:01:39 +00:00
2024-10-16 07:53:15 +00:00
if (is_number(arr)) {
float number = strtof(arr, &pend);
push(number);
2024-10-16 09:54:04 +00:00
print_stack();
2024-10-16 07:53:15 +00:00
}
2024-10-16 08:01:39 +00:00
else if (is_operation(arr)) {
2024-10-16 07:53:15 +00:00
if (stack_top < 1) {
2024-10-16 20:46:07 +00:00
printf("not enough operands\n");
2024-10-16 08:22:46 +00:00
return 0;
2024-10-16 07:53:15 +00:00
}
2024-10-16 10:25:10 +00:00
2024-10-16 07:53:15 +00:00
float n2 = pop();
float n1 = pop();
char operation = arr[0];
float result = calculator(n1, n2, operation);
2024-10-16 20:38:56 +00:00
push(result);
print_stack();
2024-10-16 07:53:15 +00:00
}
2024-10-16 20:42:58 +00:00
else {
printf("bad input\n");
return 0;
}
2024-10-16 07:53:15 +00:00
}
2024-10-16 20:42:58 +00:00
2024-10-16 20:16:18 +00:00
printf("no input\n");
2024-10-16 07:53:15 +00:00
return 0;
}