#include #include #include #define MAX_VELKOST 10 typedef struct { float zasobnik[MAX_VELKOST]; int vrchol; } KalkulackaZasobnik; void inicializuj(KalkulackaZasobnik *kalkulacka) { kalkulacka->vrchol = -1; } bool vloz(KalkulackaZasobnik *kalkulacka, float hodnota) { if (kalkulacka->vrchol >= MAX_VELKOST - 1) { return false; } kalkulacka->zasobnik[++kalkulacka->vrchol] = hodnota; return true; } bool vyber(KalkulackaZasobnik *kalkulacka, float *a, float *b) { if (kalkulacka->vrchol < 1) { return false; } *a = kalkulacka->zasobnik[kalkulacka->vrchol--]; *b = kalkulacka->zasobnik[kalkulacka->vrchol--]; return true; } bool scitat(KalkulackaZasobnik *kalkulacka) { float a, b; if (vyber(kalkulacka, &a, &b)) { return vloz(kalkulacka, b + a); } return false; } bool odcitat(KalkulackaZasobnik *kalkulacka) { float a, b; if (vyber(kalkulacka, &a, &b)) { return vloz(kalkulacka, b - a); } return false; } bool nasobit(KalkulackaZasobnik *kalkulacka) { float a, b; if (vyber(kalkulacka, &a, &b)) { return vloz(kalkulacka, a * b); } return false; } bool delit(KalkulackaZasobnik *kalkulacka) { float a, b; if (vyber(kalkulacka, &a, &b)) { if (a == 0) { printf("division by zero\n"); return false; } return vloz(kalkulacka, b / a); } return false; } void zobraz_zasobnik(KalkulackaZasobnik *kalkulacka) { for (int i = 0; i <= kalkulacka->vrchol; i++) { printf("%.2f ", kalkulacka->zasobnik[i]); } printf("\n"); } int main() { KalkulackaZasobnik kalkulacka; inicializuj(&kalkulacka); char vstup[100]; while (true) { fgets(vstup, sizeof(vstup), stdin); if (vstup[0] == '\n') { printf("no input\n"); break; } float hodnota; char operacia; if (sscanf(vstup, "%f", &hodnota) == 1) { if (vloz(&kalkulacka, hodnota)) { zobraz_zasobnik(&kalkulacka); } } else if (sscanf(vstup, "%c", &operacia) == 1) { switch (operacia) { case '+': if (scitat(&kalkulacka)) { zobraz_zasobnik(&kalkulacka); } else { printf("no input\n"); return 0; } break; case '-': if (odcitat(&kalkulacka)) { zobraz_zasobnik(&kalkulacka); } else { printf("no input\n"); return 0; } break; case '*': if (nasobit(&kalkulacka)) { zobraz_zasobnik(&kalkulacka); } else { printf("no input\n"); return 0; } break; case '/': if (!delit(&kalkulacka)) { return 0; } zobraz_zasobnik(&kalkulacka); break; default: printf("no input\n"); return 0; } } else { printf("no input\n"); return 0; } } return 0; }