From 126df90b1151f8f40605ee1fea93b28aaf98f355 Mon Sep 17 00:00:00 2001 From: Deinerovych Date: Tue, 29 Oct 2024 14:47:48 +0100 Subject: [PATCH] 1 --- a1/program.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 a1/program.c diff --git a/a1/program.c b/a1/program.c new file mode 100644 index 0000000..a12312e --- /dev/null +++ b/a1/program.c @@ -0,0 +1,62 @@ +#include +#include + +#define MAX_LEN 100 + +// Функция для проверки пары скобок +int is_matching_pair(char open, char close) { + return (open == '(' && close == ')') || + (open == '{' && close == '}') || + (open == '[' && close == ']') || + (open == '<' && close == '>'); +} + +// Основная функция для проверки строки со скобками +void check_brackets(const char *code) { + char stack[MAX_LEN]; + int positions[MAX_LEN]; + int top = -1; // Инициализация стека как пустого + + printf("Read: %s\n", code); + + for (int i = 0; i < strlen(code); i++) { + char ch = code[i]; + + // Если символ — открывающая скобка, добавляем в стек + if (ch == '(' || ch == '{' || ch == '[' || ch == '<') { + if (top < MAX_LEN - 1) { + stack[++top] = ch; + positions[top] = i; + } else { + printf("Stack overflow at position %d\n", i); + return; + } + } + // Если символ — закрывающая скобка + else if (ch == ')' || ch == '}' || ch == ']' || ch == '>') { + if (top == -1) { + printf("Unmatched closing bracket %c at position %d\n", ch, i); + return; + } + if (!is_matching_pair(stack[top], ch)) { + printf("Crossed bracket %c in %d, expected %c\n", ch, i, + stack[top] == '(' ? ')' : + stack[top] == '{' ? '}' : + stack[top] == '[' ? ']' : '>'); + return; + } + top--; // Убираем из стека совпавшую пару + } + } + + // Проверяем оставшиеся незакрытые скобки + if (top != -1) { + printf("Unmatched opening bracket %c at position %d, expected %c\n", + stack[top], positions[top], + stack[top] == '(' ? ')' : + stack[top] == '{' ? '}' : + stack[top] == '[' ? ']' : '>'); + } else { + printf("All brackets OK\n"); + } +}