Динамические структуры данных. Задание практикума. Язык Паскаль. Вылиток А.А - 37 стр.

UptoLike

- 37 -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
f ’A’ ’+’ ’(’ ’4’ ’5’ ’-’ ’F’ ’(’ ’X’ ’)’ ’*’ ’(’ ’B’ ’-’ ’C’ ’)’ ’)’
out
p
ut ’8’
9
’1’ ’0’ ’;’
9
1’
2’
9
1’
6’
;’
9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
f ’A’ ’+’ ’(’ ’4’ ’5’ ’-’ ’F’ ’(’ ’X’ ’)’ ’*’ ’(’ ’B’ ’-’ ’C’ ’)’ ’)’
output
’8’
9
’1’ ’0’
;’
9
’1’ ’2’
9
1’
6’
;’
9
3’
9
1’ ’7’ ’;’
9
После того, как входная последовательность обработана (т.е. достигнут конец
файла f) стек S пуст, в файле output результатномера позиций парных
скобок.
Заметим, что текст может быть разбит на строки, т.е. кроме обычных
символов (типа char) может встречаться специальный символмаркер конца
строки. При чтении этого маркера значение переменной
pos изменять не
нужно, так он как не является «видимым» символом и не занимает отдельную
позицию в исходной последовательности. Пропустить маркер конца строки и
перейти к следующей строке можно с помощью оператора readln(f).
procedure pairs(f:text);
{ печатает пары номеров позиций открывающих и закрывающих
скобок из текста f в порядке возрастания номеров для
закрывающих скобок}
var sym: char;
pos,i: integer;
S: stack;
S
3 12
S 3
S
pos
12
sym
(’
pos
16
sym
)’
pos
17
sym
)’
 S           3   12                            sym        ’(’             pos        12




                                      …
         1   2   3    4   5   6   7   8    9   10    11   12    13   14   15    16   17
     f ’A’ ’+’ ’(’ ’4’ ’5’ ’-’ ’F’ ’(’ ’X’ ’)’ ’*’ ’(’ ’B’ ’-’ ’C’ ’)’ ’)’
                                                                                     ↑

 S           3                                 sym        ’)’             pos        16



 output ’8’ ’9’ ’1’ ’0’ ’;’ ’9’ ’1’ ’2’ ’9’ ’1’ ’6’ ’;’ ’9’




         1   2   3    4   5   6   7   8    9   10    11   12    13   14   15    16   17
     f ’A’ ’+’ ’(’ ’4’ ’5’ ’-’ ’F’ ’(’ ’X’ ’)’ ’*’ ’(’ ’B’ ’-’ ’C’ ’)’ ’)’
                                                                                          ↑

 S                                             sym        ’)’              pos           17

 output
 ’8’ ’9’ ’1’ ’0’ ’;’ ’9’ ’1’ ’2’ ’9’ ’1’ ’6’ ’;’ ’9’ ’3’ ’9’ ’1’ ’7’ ’;’ ’9’

После того, как входная последовательность обработана (т.е. достигнут конец
файла f) стек S пуст, в файле output результат – номера позиций парных
скобок.
      Заметим, что текст может быть разбит на строки, т.е. кроме обычных
символов (типа char) может встречаться специальный символ – маркер конца
строки. При чтении этого маркера значение переменной pos изменять не
нужно, так он как не является «видимым» символом и не занимает отдельную
позицию в исходной последовательности. Пропустить маркер конца строки и
перейти к следующей строке можно с помощью оператора readln(f).

procedure pairs(f:text);
{ печатает пары номеров позиций открывающих и закрывающих
  скобок из текста f в порядке возрастания номеров для
  закрывающих скобок}
var sym: char;
    pos,i: integer;
    S: stack;


                                          - 37 -