Проверить баланс скобок в арифметическом выражении по следующему алгоритму - Pascal
Формулировка задачи:
Проверить баланс скобок в арифметическом выражении по следующему алгоритму. Сравнить по
очереди каждый символ с “(“ и с “)”. Если следующий символ “(“, тога некоторую числовую
переменную (сначала ее нужно обнулить) увеличиваем на 1, если символ “)”, тогда уменьшить на 1.
Если закрывающая скобка появилась раньше, чем открывающая, тогда значение числовой переменной
должно быть отрицательным – скобки не сбалансированы и последующую проверку можно
остановить. Если текст проверен до конца и значение переменной равно 0, тогда скобки
сбалансированы.
Помогите, пожалуйста. На форуме есть такие темы, но не нашел нужного.
Решение задачи: «Проверить баланс скобок в арифметическом выражении по следующему алгоритму»
textual
Листинг программы
var i,k:byte;
s:string;
begin
writeln('Введите строку, содержащую круглые скобки');
readln(s);
k:=0;
i:=1;
while (i<=length(s))and(k>=0) do
begin
if s[i]='('then inc(k){если открываем +1}
else if s[i]=')'then dec(k);{закрываем -1}
if k>=0 then inc(i);{иначе вперед}
end;
if k=0 then write('Скобки сбалансированы')
else write('Скобки не сбалансированы')
end.
Объяснение кода листинга программы
- Объявляются переменные:
i- переменная типа byte, используемая для итерации по символам в строке.k- переменная типа byte, используемая для подсчета баланса открытых и закрытых скобок.s- переменная типа string, в которую пользователь вводит строку, содержащую круглые скобки.
- Пользователю выводится сообщение
Введите строку, содержащую круглые скобкис помощью процедурыwritelnи считывается введенная строка с помощью процедурыreadln. - Устанавливается начальное значение переменной
kравное 0, и переменнаяiустанавливается в 1 для итерации по символам строки. - В цикле
whileпроверяется, что переменнаяiменьше или равна длине строкиsи что значение переменнойkявляется неотрицательным.- Если условие выполнено, выполняется следующий блок:
- Если символ в строке
sс индексомiравен(, увеличивается значение переменнойkна 1. - Иначе, если символ в строке
sс индексомiравен), уменьшается значение переменнойkна 1. - Если значение переменной
kбольше или равно 0, инкрементируется переменнаяiдля перехода к следующему символу. Если значениеkотрицательно, цикл завершается.
- Если символ в строке
- Если условие выполнено, выполняется следующий блок:
- После окончания цикла
whileпроверяется значение переменнойk:- Если
kравно 0, выводится сообщение 'Скобки сбалансированы'. - В противном случае, выводится сообщение 'Скобки не сбалансированы'.
- Если
- Программа завершается.