test
This commit is contained in:
parent
395ee1db51
commit
e6ddad6e3e
132
cv3/program.c
132
cv3/program.c
@ -0,0 +1,132 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user