Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
65
игнорируются при вводе в переменные типа char и должны быть включены в последовательность
(при этом каждый пробел добавляет к длине 1, а каждый enter – 2).
Вернемся к разбору. Как же быть, если некоторый начальный фрагмент вводимого выражения
станет заведомо неправильным, то есть, если в нем появятся лишние закрывающие скобки? Но тогда
при появлении лишней («некомпенсируемой») закрывающей скобки переменная count станет равна
–1,
что можно оформить как условие выхода из цикла и поместить после первых двух операторов
сравнения:
if count = -1 then break;
Какие результаты мы получим по завершении цикла?
1)
Цикл прошел по всем символам, но были найдены лишние открывающие скобки (то есть,
count > 0)
, компенсирования которых мы ожидали, однако они так и не были скомпенсиро-
ваны и скобочная последовательность неправильная;
2)
Цикл прошел по всем символам (то есть, не было выхода), причем количество скобок обоих
видов равно (то есть, count = 0) и скобочная последовательность, соответственно, правиль-
ная;
3)
Был осуществлен выход из цикла (то есть, нашли «некомпенсируемую» закрывающую
скобку и count = –1) и последовательность неправильная.
Выходит, правильный ответ даст вывод выражения count = 0 (оно истинно во 2-ом случае и
ложно в 1-ом и 3-ем):
writeln(count = 0);
Код:
1.
program BracketSequence;
2.
3.
var
4.
count: integer;
5.
i, n: byte;
6.
c: char;
7.
8.
begin
9.
readln(n);
10.
count := 0;
11.
for i := 1 to n do begin
12.
read(c);
13.
if c = '(' then inc(count);
14.
if c = ')' then dec(count);
15.
if count = -1 then break
16.
end;
17.
writeln(count = 0)
18.
end.
Do'stlaringiz bilan baham: |