Постройте с помощью массива стек из 6 строковых элементов. Разместите в стеке шесть элементов: ‘name’, ‘fio’, ‘ves’, ‘age’, ‘rost’, ‘dlina’. Удалите из стека два элемента ‘dlina’ и ‘fio’ и добавьте новый элемент ‘size’. Результаты как промежуточных, так и конечных результатов отобразить на экране — Pascal(Паскаль)

program Project1;
 
const
  //Глубина стека. Т. е. максимальное количество элементов,
  //которое может поместиться в стек.
  N = 20;
type
  //Тип, описывающий стек.
  TStack = record
    //Указатель вершины стека. Это индекс последнего добавленного элемента.
    Pnt : Integer;
    //Контейнер данных стека.
    Data : array[1..N] of String;
  end;
 
//Добавить в стек элемент.
function StackPush(var aStack : TStack; const aStr : String) : Boolean;
begin
  StackPush := False;
  with aStack do begin
    if Pnt < High(Data) then begin
      //Индекс добавляемого элемента.
      Inc(Pnt);
      //Добавляем элемент в массив (т. е. в стек).
      Data[Pnt] := aStr;
      StackPush := True;
    end;
  end;
end;
 
//Взять из стека элемент.
function StackPop(var aStack : TStack; var aStr : String) : Boolean;
begin
  StackPop := False;
  with aStack do begin
    if Pnt >= Low(Data) then begin
      aStr := Data[Pnt];
      Dec(Pnt);
      StackPop := True;
    end;
  end;
end;
 
var
  St1, St2 : TStack;
  S : String;
begin
  //Инициализация стеков.
  St1.Pnt := 0;
  St2.Pnt := 0;
 
  //Заливаем в первый стек исходные данные.
  StackPush(St1, 'name');
  StackPush(St1, 'fio');
  StackPush(St1, 'ves');
  StackPush(St1, 'age');
  StackPush(St1, 'rost');
  StackPush(St1, 'dlina');
 
  //Удаление из стека двух заданных элементов.
  //Решаем эту задачу с помощью переливания содержимого
  //одного стека в другой стек.
  while StackPop(St1, S) do begin
    //Пропускаем значения, совпадающие с заданными.
    if (S = 'dlina') or (S = 'fio') then Continue;
    //Все остальные значения помещаем во второй стек.
    StackPush(St2, S);
  end;
 
  //Переливаем значения обратно: из второго стека - в первый стек.
  while StackPop(St2, S) do StackPush(St1, S);
 
  //Добавляем новое значение.
  StackPush(St1, 'size');
 
  //Распечатываем значения из первого стека.
  Writeln('Результат:');
  while StackPop(St1, S) do Writeln(S);
 
  Readln;
end.

Leave a Comment

71 + = 73