diff --git a/a1/output/program.exe b/a1/output/program.exe index 693458d..277cc63 100644 Binary files a/a1/output/program.exe and b/a1/output/program.exe differ diff --git a/a1/program.c b/a1/program.c index c4c0ca5..5ebf77e 100644 --- a/a1/program.c +++ b/a1/program.c @@ -7,43 +7,86 @@ int proverka(char otv, char zatv) { if (otv == '(' && zatv == ')') { return 1; } - if (otv == '{' && zatv == '}') { + else if (otv == '{' && zatv == '}') { return 1; } - if (otv == '[' && zatv == ']') { + else if (otv == '[' && zatv == ']') { return 1; } - if (otv == '<' && zatv == '>') { + else if (otv == '<' && zatv == '>') { return 1; } - return 0; + else { + return 0; + } } int main() { char riadok[MAX_SIZE]; char zasobnik[MAX_SIZE]; int vrch = -1; - int i; int chyba = 0; char znak; - if (fgets(riadok, MAX_SIZE, stdin)==NULL) { + if (fgets(riadok, MAX_SIZE, stdin) == NULL) { printf("Input Error!\n"); return 1; } - riadok[strcspn(riadok, "\n")]=='0'; - + riadok[strcspn(riadok, "\n")] = '\0'; printf("Read: %s\n", riadok); int dlzka = strlen(riadok); for (int i = 0; i < dlzka; i++) { znak = riadok[i]; - zasobnik[++vrch] = znak; - } else if (znak == ')' || znak == ']' || znak == '}' || znak == '>') { - + + if (znak == '(' || znak == '[' || znak == '{' || znak == '<') { + zasobnik[++vrch] = znak; + } + else if (znak == ')' || znak == ']' || znak == '}' || znak == '>') { + if (vrch < 0) { + printf("Unexpected closing bracket %c in %d\n", znak, i + 1); + chyba = 1; + break; + } + + if (!proverka(zasobnik[vrch], znak)) { + char ocakavany; + switch (zasobnik[vrch]) { + case '(': + ocakavany = ')'; + break; + case '[': + ocakavany = ']'; + break; + case '{': + ocakavany = '}'; + break; + case '<': + ocakavany = '>'; + break; + default: + ocakavany = '?'; + break; + } + printf("Crossed bracket %c in %d, expected %c\n", znak, i + 1, ocakavany); + chyba = 1; + break; + } + + vrch--; + } } - + + if (!chyba && vrch >= 0) { + printf("Unclosed bracket %c at the end\n", zasobnik[vrch]); + chyba = 1; + } + + if (!chyba) { + printf("All brackets OK\n"); + } + return 0; -} \ No newline at end of file +}