This commit is contained in:
Weber 2024-10-14 14:01:49 +00:00
parent 5715573e8f
commit 0a71ff2d13

View File

@ -78,18 +78,18 @@ bool je_platna_operacia(char operacia) {
return operacia == '+' || operacia == '-' || operacia == '*' || operacia == '/'; return operacia == '+' || operacia == '-' || operacia == '*' || operacia == '/';
} }
// Funkcia na validáciu, či je vstup platným číslom
bool je_platne_cislo(const char *vstup) { bool je_platne_cislo(const char *vstup) {
char *koniec; char *koniec;
strtof(vstup, &koniec); // Prevedie reťazec na číslo strtof(vstup, &koniec);
// Ak ukazovateľ koniec nesmeruje na '\0', vstup obsahuje neplatné znaky
return *koniec == '\n' || *koniec == '\0'; return *koniec == '\n' || *koniec == '\0';
} }
// Funkcia na kontrolu, či je v zásobníku dostatok operantov pre operáciu
bool dost_operantov(KalkulackaZasobnik *kalkulacka) { bool dost_operantov(KalkulackaZasobnik *kalkulacka) {
return kalkulacka->vrchol >= 1; // Potrebujeme aspoň 2 operanty na operáciu return kalkulacka->vrchol >= 1;
} }
int main() { int main() {
@ -105,59 +105,39 @@ int main() {
} }
if (je_platne_cislo(vstup)) { if (je_platne_cislo(vstup)) {
float hodnota = strtof(vstup, NULL); float hodnota = strtof(vstup, NULL);
vloz(&kalkulacka, hodnota); vloz(&kalkulacka, hodnota);
zobraz_zasobnik(&kalkulacka); zobraz_zasobnik(&kalkulacka);
} }
else if (strlen(vstup) == 2 && je_platna_operacia(vstup[0])) { else if (strlen(vstup) == 2 && je_platna_operacia(vstup[0])) {a
char operacia = vstup[0]; char operacia = vstup[0];
if (!dost_operantov(&kalkulacka)) { if (!dost_operantov(&kalkulacka)) {
printf("not enough operands\n"); printf("not enough operands\n");
continue; continue;
} }
bool uspech = false;
switch (operacia) { switch (operacia) {
case '+': case '+':
if (scitat(&kalkulacka)) { uspech = scitat(&kalkulacka);
zobraz_zasobnik(&kalkulacka);
} else {
printf("no input\n");
return 0;
}
break; break;
case '-': case '-':
if (odcitat(&kalkulacka)) { uspech = odcitat(&kalkulacka);
zobraz_zasobnik(&kalkulacka);
} else {
printf("no input\n");
return 0;
}
break; break;
case '*': case '*':
if (nasobit(&kalkulacka)) { uspech = nasobit(&kalkulacka);
zobraz_zasobnik(&kalkulacka);
} else {
printf("no input\n");
return 0;
}
break; break;
case '/': { case '/':
float a, b; uspech = delit(&kalkulacka);
if (vyber(&kalkulacka, &a, &b)) {
if (a == 0) {
printf("division by zero\n");
return 0;
} else {
vloz(&kalkulacka, b / a);
zobraz_zasobnik(&kalkulacka);
}
} else {
printf("no input\n");
return 0;
}
break; break;
} }
if (uspech) {
zobraz_zasobnik(&kalkulacka);
} else {
printf("no input\n");
return 0;
} }
} else { } else {
printf("bad input\n"); printf("bad input\n");