From b2a8ce914d1e701397b4a68699d1082df8a49f46 Mon Sep 17 00:00:00 2001 From: mr314ot Date: Tue, 14 Oct 2025 13:17:37 +0200 Subject: [PATCH] a1 - 1 --- a1/program.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 a1/program.c diff --git a/a1/program.c b/a1/program.c new file mode 100644 index 0000000..a024032 --- /dev/null +++ b/a1/program.c @@ -0,0 +1,76 @@ +#include +#include + +#define MAX_LEN 100 + +int isOpening(char c){ + if (c == '(' || c == '[' || c == '{' || c == '<') return 1 +} + +int isClosing(char c){ + if (c == ')' || c == ']' || c == '}' || c == '>') return 1 +} + +char expectedCLosing(char c){ + switch (c) { + case '(': return ')'; + case '[': return ']'; + case '{': return '}'; + case '<': return '>'; + default: return '?'; + } +} + +char expectedOpening(char c){ + switch (c) { + case ')': return '('; + case ']': return '['; + case '}': return '{'; + case '>': return '<'; + } +} + + +int main(){ + char code[MAX_LEN + 1]; + char stack[MAX_LEN]; + int top = -1; + + if (!fgets(code, sizeof(code), stdin)){ + printf("Input error\n"); + return 1; + } + + code[strcspn(code, "\n")] = '\0'; + + printf("Read: %s\n", code); + + int len = strlen(code); + for (int i = 0; i < len; i++){ + c = code[i]; + + if (isOpening(c)){ + if (top < MAX_LEN - 1){ + stack[++top] = c; + } + } + else if (isClosing(c)){ + if (top < 0){ + printf("Unexpected closing bracket %c in %d\n", c, i+1); + return 0; + } + char last = stack[top--]; + if (expectedClosing(last) != c){ + printf("Crossed bracket %c in %d, expected %c\n", c, i+1, expectedClosing(last)); + return 0; + } + } + } + if (top >= 0){ + printf("Unclosed bracket %c in %d\n", stack[top], len); + } else { + printf("All brackets OK\n"); + } + + return 0; +}