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

UptoLike

- 38 -
begin reset(f);
init_stack(S); pos:=0;
if not eof(f) then
repeat
if eoln(f) then readln(f)
else
begin read(f,sym); pos:=pos+1;
if sym = '(' then push(S, pos)
{номер позиции открывающей скобки в стек}
else if sym = ')' then
{номер позиции открывающей скобки,
соответствующей данной закрывающей, взять из
стека и напечатать пару номеров}
begin pop(S,i);
write(i,'9',pos,';9')
end;
end;
until eof(f);
writeln;
end {pairs};
Задача 10. Программа на языке Турбо Паскаль. Программа запрашивает у
пользователя имя текстового файла, в котором находится последовательность
символов, сбалансированная по круглым скобкам, и выводит на экран номера
парных скобок как в задаче 9.
Решение
Опишем в программе переменную name типа string и присвоим ей
введённое пользователем имя внешнего файла, в котором хранится исходный
текст. Опишем также переменную g типа text; c помощью процедуры assign
свяжем файловую переменную g с внешним файлом name. Чтобы напечатать
последовательность номеров парных скобок, воспользуемся процедурой pairs
из задачи 9. Поскольку в pairs используется стек, мы должны реализовать в
нашей программе соответствующие структуру данных и операции, т.е. описать
тип
stack и процедуры, необходимые для работы со стеком. Реализуем стек с
помощью списка без заглавного звена. Процедура init_stack(S)делает
список S пустым; push(S,e)вставляет в начало списка S элемент e это
операция «положить элемент в стек»; pop(S,e) удаляет из списка S первый
элемент и присваивает его переменной e это операция «вытолкнуть (взять)
элемент
из стека». После того, как работа с файлом закончена, его следует
закрыть обращением к процедуре close.
program parantheses(input, output);
type elemtype=integer;
link=node;
node=record
elem:elemtype;
next:link
begin reset(f);
      init_stack(S); pos:=0;
  if not eof(f) then
  repeat
    if eoln(f) then readln(f)
    else
      begin read(f,sym); pos:=pos+1;
         if sym = '(' then push(S, pos)
           {номер позиции открывающей скобки в стек}
         else if sym = ')' then
           {номер позиции открывающей скобки,
            соответствующей данной закрывающей, взять из
            стека и напечатать пару номеров}
           begin pop(S,i);
             write(i,'9',pos,';9')
           end;
      end;
  until eof(f);
  writeln;
end {pairs};

Задача 10. Программа на языке Турбо Паскаль. Программа запрашивает у
пользователя имя текстового файла, в котором находится последовательность
символов, сбалансированная по круглым скобкам, и выводит на экран номера
парных скобок как в задаче 9.
                                 Решение
       Опишем в программе переменную name типа string и присвоим ей
введённое пользователем имя внешнего файла, в котором хранится исходный
текст. Опишем также переменную g типа text; c помощью процедуры assign
свяжем файловую переменную g с внешним файлом name. Чтобы напечатать
последовательность номеров парных скобок, воспользуемся процедурой pairs
из задачи 9. Поскольку в pairs используется стек, мы должны реализовать в
нашей программе соответствующие структуру данных и операции, т.е. описать
тип stack и процедуры, необходимые для работы со стеком. Реализуем стек с
помощью списка без заглавного звена. Процедура init_stack(S)делает
список S пустым; push(S,e)вставляет в начало списка S элемент e – это
операция «положить элемент в стек»; pop(S,e) удаляет из списка S первый
элемент и присваивает его переменной e – это операция «вытолкнуть (взять)
элемент из стека». После того, как работа с файлом закончена, его следует
закрыть обращением к процедуре close.

program parantheses(input, output);
type elemtype=integer;
     link=↑node;
     node=record
            elem:elemtype;
            next:link

                                  - 38 -