Проанализировать некоторое символьное выражение a$ с входящими в него скобками - QBasic
Формулировка задачи:
Нужно решить задачку, помогите, кто чем может).
Проанализировать некоторое символьное выражение a$ с входящими в него скобками (типа: "(",")","[","]","{","} на правильность расстановки скобок ( возможно вложенных). Вывести ответ в форме: "верно/неверно". Исходная информация ( символьные выражения a$) вводятся с клавиатуры.
Решение задачи: «Проанализировать некоторое символьное выражение a$ с входящими в него скобками»
textual
Листинг программы
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
Объяснение кода листинга программы
Этот код на языке QBasic анализирует символьное выражение, представленное в переменной S. Он ищет определенные символы и подсчитывает количество скобок (), [], {}), встречающихся в выражении. Вот список действий, которые выполняет этот код:
- Входные данные (символьное выражение) хранятся в переменной S.
- Функция Fun% принимает символьное выражение в качестве входного параметра и возвращает позицию первого открывающего скобка в выражении. Если в выражении нет скобок, функция возвращает 0.
- В основной программе мы сначала вводим символьное выражение, затем вызываем функцию Fun%, чтобы найти позицию первого открывающего скобка.
- Затем мы выводим символьное выражение и, если найдена открывающая скобка, выводим
^в позицию, соответствующую этой скобке. В противном случае выводимOK.