среда, 24 января 2018 г.

10А программирование. Организация стека

Задача. 1 вариант: на вход программе подаются числа, ввод заканчивается нулем. Вывести эти числа в обратном порядке.
2 вариант: то же, но чтение чисел происходит из файла, вывод - в другой файл.

Задача 1 (1 вариант)
Program St1;
Const N=1000;

Type
  stack=array[1..N] of integer;    {тип данных "стек"}
Var
  St : stack;       {стек}
  top : integer;    {вершина стека}
  x : integer;      {число для работы}

Function Full:boolean;
begin
  Full := top=N;
end;

Function Empty:boolean;
begin
  Empty := top=0;
end;

Procedure AddSt(a:integer);
begin
  if not(full) then
    begin
      inc(top);
      st[top]:=a;
    end
  else
    writeln('Стек полон');
end;

Procedure OutSt(Var a:integer);
begin
  if not(Empty) then
    begin
      a:=st[top];
      dec(top);
    end
  else
    writeln('Стек пуст');
end;

Begin
  top:=0;
  Repeat
    readln(x);
    AddSt(x);
  Until x=0;
  writeln('Числа в обратном порядке:');
  While not(Empty) do
    begin
      OutSt(x);
      write(x, ', ');
    end;
  writeln;
End.

Задача 1 (2 вариант)
Type
  stack=array[1..N] of integer;    {тип данных "стек"}
Var
  St : stack;       {стек}
  top : integer;    {вершина стека}
  x : integer;      {число для работы}
  f : text;         {файловая переменная}

Function Full:boolean;
begin
  Full := top=N;
end;

Function Empty:boolean;
begin
  Empty := top=0;
end;

Procedure AddSt(a:integer);
begin
  if not(full) then
    begin
      inc(top);
      st[top]:=a;
    end
  else
    writeln('Стек полон');
end;

Procedure OutSt(Var a:integer);
begin
  if not(Empty) then
    begin
      a:=st[top];
      dec(top);
    end
  else
    writeln('Стек пуст');
end;

Begin
  top:=0;
  assign(f,'data.txt');  {связываем переменную f с файлом data}
  reset(f);  {открываем файл для чтения}
  While not(Eof(f)) do    {пока не достигнут конец файла}  
    begin
      readln(f,x);        {считываем из файла очередное число} 
      AddSt(x);           {и добавляем его в стек}
    end;
  close(f);               {закрываем файл}
  writeln('Результат сохранен в файле rez.txt');
  assign(f,'rez.txt');  {связываем переменную f с файлом rez}
  rewrite(f);              {открываем файл для записи}
  While not(Empty) do
    begin
      OutSt(x);
      writeln(f,x);
    end;
  close(f);               {закрываем файл}
End.

Комментариев нет:

Отправить комментарий