QBASICBOOK.ru: сайт про QB64

Опубликовано: 2021-10-25 08:00:00

Считаем скобки

В этой статье мы решим последнюю в этом разделе текстовую задачу.

Условие: Необходимо проанализировать некоторое символьное выражение S$ с входящими в него скобками на правильность расстановки скобок (в том числе вложенных). Исходная информация (символьные выражения S$) вводятся с клавиатуры. Варианты скобок:

Необходимо вывести ответ «OK», если скобки расставлены правильно.


  1. DECLARE FUNCTION FUN% (S AS STRING)
  2. DIM S AS STRING
  3.  
  4. CLS
  5. INPUT S
  6. R = FUN(S)
  7. CLS
  8. PRINT S
  9. IF R > 0 THEN
  10.     LOCATE 2, R: PRINT "^"
  11. ELSE
  12.     LOCATE 2, 1: PRINT "OK"
  13. END IF
  14.  
  15. FUNCTION FUN% (S AS STRING)
  16. DIM I AS INTEGER, J AS INTEGER, R AS INTEGER, K AS INTEGER
  17. FOR I = 1 TO LEN(S)
  18.     SELECT CASE MID$(S, I, 1)
  19.         CASE "("
  20.             K = 1
  21.             FOR J = I + 1 TO LEN(S)
  22.                 IF MID$(S, J, 1) = "(" THEN
  23.                     K = K + 1
  24.                 END IF
  25.                 IF MID$(S, J, 1) = ")" THEN
  26.                     K = K - 1
  27.                 END IF
  28.                 IF K = 0 THEN
  29.                     R = FUN(MID$(S, I + 1, J - I - 1))
  30.                     IF R > 0 THEN
  31.                         R = R + I
  32.                     END IF
  33.                     I = J + 1
  34.                     EXIT FOR
  35.                 END IF
  36.             NEXT J
  37.             IF K > 0 THEN
  38.                 R = I
  39.             END IF
  40.         CASE ")"
  41.             R = I
  42.         CASE "["
  43.             K = 1
  44.             FOR J = I + 1 TO LEN(S)
  45.                 IF MID$(S, J, 1) = "[" THEN
  46.                     K = K + 1
  47.                 END IF
  48.                 IF MID$(S, J, 1) = "]" THEN
  49.                     K = K - 1
  50.                 END IF
  51.                 IF K = 0 THEN
  52.                     R = FUN(MID$(S, I + 1, J - I - 1))
  53.                     IF R > 0 THEN
  54.                         R = R + I
  55.                     END IF
  56.                     I = J + 1
  57.                     EXIT FOR
  58.                 END IF
  59.             NEXT J
  60.             IF K > 0 THEN
  61.                 R = I
  62.             END IF
  63.         CASE "]"
  64.             R = I
  65.         CASE "{"
  66.             K = 1
  67.             FOR J = I + 1 TO LEN(S)
  68.                 IF MID$(S, J, 1) = "{" THEN
  69.                     K = K + 1
  70.                 END IF
  71.                 IF MID$(S, J, 1) = "}" THEN
  72.                     K = K - 1
  73.                 END IF
  74.                 IF K = 0 THEN
  75.                     R = FUN(MID$(S, I + 1, J - I - 1))
  76.                     IF R > 0 THEN
  77.                         R = R + I
  78.                     END IF
  79.                     I = J + 1
  80.                     EXIT FOR
  81.                 END IF
  82.             NEXT J
  83.             IF K > 0 THEN
  84.                 R = I
  85.             END IF
  86.         CASE "}"
  87.             R = I
  88.     END SELECT
  89.     IF R > 0 THEN EXIT FOR
  90. NEXT I
  91. FUN = R
  92. END FUNCTION

 

Рисунок 1 – Исходный текст программы

 

Рисунок 2 – Результат выполнения программы

Если выражение верное, выводится «ОК», если нет, то стрелка показывает на первую скобку у которой нет соответствующей пары.

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

counting-brackets.bas

< Предыдущая статья
Работа с файлами. Решение задач
Следующая статья >
Графопостроитель с возможностью масштабирования

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.