Опубликовано: 2021-10-25 08:00:00
Считаем скобки
В этой статье мы решим последнюю в этом разделе текстовую задачу.
Условие: Необходимо проанализировать некоторое символьное выражение S$ с входящими в него скобками на правильность расстановки скобок (в том числе вложенных). Исходная информация (символьные выражения S$) вводятся с клавиатуры. Варианты скобок:
- (
- )
- [
- ]
- {
- }
Необходимо вывести ответ «OK», если скобки расставлены правильно.
- DECLARE FUNCTION FUN% (S AS STRING)
- DIM S AS STRING
- CLS
- INPUT S
- R = FUN(S)
- CLS
- PRINT S
- IF R > 0 THEN
- LOCATE 2, R: PRINT "^"
- ELSE
- LOCATE 2, 1: PRINT "OK"
- END IF
- FUNCTION FUN% (S AS STRING)
- DIM I AS INTEGER, J AS INTEGER, R AS INTEGER, K AS INTEGER
- FOR I = 1 TO LEN(S)
- SELECT CASE MID$(S, I, 1)
- CASE "("
- K = 1
- FOR J = I + 1 TO LEN(S)
- IF MID$(S, J, 1) = "(" THEN
- K = K + 1
- END IF
- IF MID$(S, J, 1) = ")" THEN
- K = K - 1
- END IF
- IF K = 0 THEN
- R = FUN(MID$(S, I + 1, J - I - 1))
- IF R > 0 THEN
- R = R + I
- END IF
- I = J + 1
- EXIT FOR
- END IF
- NEXT J
- IF K > 0 THEN
- R = I
- END IF
- CASE ")"
- R = I
- CASE "["
- K = 1
- FOR J = I + 1 TO LEN(S)
- IF MID$(S, J, 1) = "[" THEN
- K = K + 1
- END IF
- IF MID$(S, J, 1) = "]" THEN
- K = K - 1
- END IF
- IF K = 0 THEN
- R = FUN(MID$(S, I + 1, J - I - 1))
- IF R > 0 THEN
- R = R + I
- END IF
- I = J + 1
- EXIT FOR
- END IF
- NEXT J
- IF K > 0 THEN
- R = I
- END IF
- CASE "]"
- R = I
- CASE "{"
- K = 1
- FOR J = I + 1 TO LEN(S)
- IF MID$(S, J, 1) = "{" THEN
- K = K + 1
- END IF
- IF MID$(S, J, 1) = "}" THEN
- K = K - 1
- END IF
- IF K = 0 THEN
- R = FUN(MID$(S, I + 1, J - I - 1))
- IF R > 0 THEN
- R = R + I
- END IF
- I = J + 1
- EXIT FOR
- END IF
- NEXT J
- IF K > 0 THEN
- R = I
- END IF
- CASE "}"
- R = I
- END SELECT
- IF R > 0 THEN EXIT FOR
- NEXT I
- FUN = R
- END FUNCTION
Рисунок 1 – Исходный текст программы
Рисунок 2 – Результат выполнения программы
Если выражение верное, выводится «ОК», если нет, то стрелка показывает на первую скобку у которой нет соответствующей пары.
Спасибо за прочтение этой статьи.
Прикрепленные файлы: