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