Стеки - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Из 2 стеков,содержащихся как положительные так и отрицательные элементы, создать новый стек содержащий только отрицательные элементы,эллементы брать по очереди из исходных стеков ([2,-6,-3,4,-7],[-1,3,1,-5],получили [-7,-5,-3,-1,-6])
Помогите))

Решение задачи: «Стеки»

textual
Листинг программы
function RS(msg : String) : Stack<integer>;
begin
  var n := ReadInteger(msg);
  Result := New Stack<integer>;
  Write('Элементы стека через пробел: '); for var i := 1 to n do Result.Push(ReadInteger);
end;
 
procedure PopPush(var sPop, sPush : Stack<integer>);
begin
  var val := sPop.Pop;
  if val < 0 then sPush.Push(val);
end;
 
begin
  var s1 := RS('Число элементов первого стека:');
  var s2 := RS('Число элементов второго стека:');
  s1.Reverse.Println;
  s2.Reverse.Println;
  
  var(s,first):=(New Stack<integer>,True);
  while s1.Count+s2.Count > 0 do
    begin
      if (s2.Count = 0)or First then          PopPush(s1, s)
      else if (s1.Count = 0)or Not First then PopPush(s2, s);
      First := Not First;
    end;
    
  s.Reverse.Println;
end.

Объяснение кода листинга программы

  1. Объявлена функция RS(msg : String) : Stack;
  2. В функции RS считывается количество элементов стека из сообщения, затем создается новый стек и заполняется элементами, после чего выводится сообщение с элементами стека через пробел.
  3. Объявлена процедура PopPush(var sPop, sPush : Stack);
  4. В процедуре PopPush считывается значение из стека sPop и проверяется на отрицательность, при отрицательном значении элемент помещается в стек sPush.
  5. В основной части кода считываются два сообщения о количестве элементов в двух стеках, затем элементы каждого стека выводятся в обратном порядке.
  6. Создаются два указателя на стек и булево значение first, указывающее на первый стек.
  7. В цикле пока количество элементов в обоих стеках больше нуля происходит следующее: если стек s2 пуст или значение first истинно, то вызывается процедура PopPush с передачей стека s1 и указателя на стек s. иначе, если стек s1 пуст или значение first ложно, то вызывается процедура PopPush с передачей стека s2 и указателя на стек s. после каждой итерации цикла меняется значение first.
  8. Выводится сообщение с элементами стека s.

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы