test
This commit is contained in:
parent
d5deb322a1
commit
c6fcaa8e69
101
a1/program.c
101
a1/program.c
@ -0,0 +1,101 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#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");
|
||||
}
|
Loading…
Reference in New Issue
Block a user