usaa25/du3/program.c
2025-10-12 15:04:16 +02:00

62 lines
1.5 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10
int main(void) {
double ulozisko[SIZE];
int top = 0;
char vstup[64];
while (fgets(vstup, sizeof(vstup), stdin)) {
vstup[strcspn(vstup, "\n")] = 0;
if (strlen(vstup) == 0) {
printf("no input\n");
return 0;
}
char *koniec;
double cislo = strtod(vstup, &koniec);
if (*koniec == '\0') {
if (top >= SIZE) {
printf("full stack\n");
return 0;
}
ulozisko[top++] = cislo;
}
else if (strlen(vstup) == 1 && strchr("+-*/", vstup[0])) {
if (top < 2){
printf("not enough operands\n");
return 0;
}
double b = ulozisko[--top];
double a = ulozisko[--top];
double vysledok = 0.0;
switch (vstup[0]) {
case '+': vysledok = a + b; break;
case '-': vysledok = a - b; break;
case '*': vysledok = a * b; break;
case '/': vysledok = b == 0 ? (printf("division by zero\n"), exit(0), 0) : a / b; break;
default: printf("invalid op\n"); return 0;
}
ulozisko[top++] = vysledok;
}
else {
printf("bad input\n");
return 0;
}
for (int i = 0; i < top; i++)
printf("%.2f ", ulozisko[i]);
printf("\n");
}
printf("no input\n");
return 0;
}