diff --git a/a1/program.c b/a1/program.c index e69de29..8dd1f23 100644 --- a/a1/program.c +++ b/a1/program.c @@ -0,0 +1,101 @@ +#include +#include +#include + +#define MAX_LEN 100 + +typedef struct { + char prvky[MAX_LEN]; + int vrchol; +} Zasobnik; + +void inicializujZasobnik(Zasobnik *z); +int jePlny(Zasobnik *z); +int jePrazdny(Zasobnik *z); +void vloz(Zasobnik *z, char prvok); +char vyber(Zasobnik *z); +int suZosuladene(char otvaracia, char zatvaracia); +void skontrolujZatvorky(const char *kod); + +int main() { + char kod[MAX_LEN + 1]; + + printf("Zadajte kód: "); + fgets(kod, sizeof(kod), stdin); + kod[strcspn(kod, "\n")] = '\0'; + printf("Načítané: %s\n", kod); + skontrolujZatvorky(kod); + + return 0; +} + +void inicializujZasobnik(Zasobnik *z) { + z->vrchol = -1; +} + +int jePlny(Zasobnik *z) { + return z->vrchol == (MAX_LEN - 1); +} + +int jePrazdny(Zasobnik *z) { + return z->vrchol == -1; +} + +void vloz(Zasobnik *z, char prvok) { + if (!jePlny(z)) { + z->prvky[++z->vrchol] = prvok; + } +} + +char vyber(Zasobnik *z) { + if (!jePrazdny(z)) { + return z->prvky[z->vrchol--]; + } + return '\0'; +} + +int suZosuladene(char otvaracia, char zatvaracia) { + switch (otvaracia) { + case '{': return zatvaracia == '}'; + case '[': return zatvaracia == ']'; + case '<': return zatvaracia == '>'; + case '(': return zatvaracia == ')'; + default: return 0; + } +} + +void skontrolujZatvorky(const char *kod) { + Zasobnik z; + inicializujZasobnik(&z); + int pozicia = 0; + + for (const char *ptr = kod; *ptr != '\0'; ptr++, pozicia++) { + char aktualny = *ptr; + + if (aktualny == '{' || aktualny == '[' || aktualny == '<' || aktualny == '(') { + vloz(&z, aktualny); + } else if (aktualny == '}' || aktualny == ']' || aktualny == '>' || aktualny == ')') { + if (jePrazdny(&z)) { + printf("Neočakávaná zátvorka '%c' na pozícii %d\n", aktualny, pozicia); + return; + } + + char poslednaOtvaracia = vyber(&z); + if (!suZosuladene(poslednaOtvaracia, aktualny)) { + printf("Prekrížená zátvorka '%c' na pozícii %d, očakávané '%c'\n", + aktualny, pozicia, + (poslednaOtvaracia == '{') ? '}' : + (poslednaOtvaracia == '[') ? ']' : + (poslednaOtvaracia == '<') ? '>' : ')'); + return; + } + } + } + + if (!jePrazdny(&z)) { + printf("Neočakávaný koniec vstupu, nezodpovedajúca '%c'\n", vyber(&z)); + return; + } + + printf("Všetky zátvorky sú v poriadku\n"); +}