Пример 7.5.
Проверить, имеется ли в линейной записи заданной математической
формулы баланс открывающих и закрывающих скобок.
Система тестов
Номер
теста
|
Проверяемый
случай
|
Данные
|
Результат
|
1
|
При просмотре линейной записи слева направо первой встречается
закрывающая скобка
|
''a)b+1(''
|
''Нет баланса''
|
2
|
Первой встречается открывающая скобка, но число открывающих и закрывающих
скобок не совпадает
|
''(a+b))''
|
''Нет баланса''
|
3
|
Есть баланс скобок
|
''(a+b/(c*d))''
|
''Есть баланс''
|
Демонстрация
Школьный АЯ
алг Баланс скобок(арг лит S, рез лит Otvet)
нач цел Dlina, Flag, i
i:=1; Flag:=0; Dlina:=длин(S)
нц пока (Flag>=0) и (i<=Dlina)
если S[i] = "("
то Flag:=Flag+1
все
если S[i] = ")"
то Flag:=Flag-1
все
i:=i+1
кц
если Flag=0
то Otvet := "Есть баланс"
иначе Otvet := "Нет баланса"
все
кон
Turbo Pascal
Program Balance;
Uses Crt;
Var S : String;
Dlina, Flag, i : Integer;
BEGIN ClrScr;
GotoXY(15, 5);
Write('Введите линейную запись математической формулы :');
GotoXY(32,7); ReadLn(S);
i:=1; Flag:=0; Dlina:=Length(S);
While (Flag>=0) and (i<=Dlina) do
begin
If S[i] = '(' then Flag:=Flag + 1;
If S[i] = ')' then Flag:=Flag - 1;
i:=i+1
end;
GotoXY(32, 9); WriteLn('О т в е т');
GotoXY(15,11);
If Flag=0 then Write('Есть баланс ') else Write('Нет баланса ');
WriteLn('открывающих и закрывающих скобок');
ReadLn
END.
QBasic
CLS
INPUT "Введите линейную запись математической формулы :", S$
i = 1 : Flag = 0 : Dlina = LEN(S$)
WHILE Flag >= 0 AND i <= Dlina
IF MID$(S$, i, 1) = "(" THEN Flag = Flag + 1
IF MID$(S$, i, 1) = ")" THEN Flag = Flag - 1
i = i + 1
WEND
PRINT : PRINT "О т в е т"
IF Flag = 0 THEN PRINT "Есть баланс "; ELSE PRINT "Нет баланса ";
PRINT "открывающих и закрывающих скобок"
END