diff --git a/cv3/program.c b/cv3/program.c index e69de29..2742a4d 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -0,0 +1,132 @@ +#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) { + printf("Zásobník je plný, končím...\n"); + return false; + } + kalkulacka->zasobnik[++kalkulacka->vrchol] = hodnota; + return true; +} + +bool vyber(KalkulackaZasobnik *kalkulacka, float *a, float *b) { + if (kalkulacka->vrchol < 1) { + printf("Nedostatok hodnôt v zásobníku pre operáciu, končím...\n"); + 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("Delenie nulou, končím...\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) { + printf("Zadajte číslo alebo operáciu (+, -, *, /): "); + fgets(vstup, sizeof(vstup), stdin); + + if (vstup[0] == '\n') { + printf("žiadny vstup\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); + } + break; + case '-': + if (odcitat(&kalkulacka)) { + zobraz_zasobnik(&kalkulacka); + } + break; + case '*': + if (nasobit(&kalkulacka)) { + zobraz_zasobnik(&kalkulacka); + } + break; + case '/': + if (delit(&kalkulacka)) { + zobraz_zasobnik(&kalkulacka); + } + break; + default: + printf("Neplatný vstup, končím...\n"); + return 0; + } + } else { + printf("Neplatný vstup, končím...\n"); + return 0; + } + } + + return 0; +}