Стеки - 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.
Объяснение кода листинга программы
- Объявлена функция RS(msg : String) : Stack
; - В функции RS считывается количество элементов стека из сообщения, затем создается новый стек и заполняется элементами, после чего выводится сообщение с элементами стека через пробел.
- Объявлена процедура PopPush(var sPop, sPush : Stack
); - В процедуре PopPush считывается значение из стека sPop и проверяется на отрицательность, при отрицательном значении элемент помещается в стек sPush.
- В основной части кода считываются два сообщения о количестве элементов в двух стеках, затем элементы каждого стека выводятся в обратном порядке.
- Создаются два указателя на стек и булево значение first, указывающее на первый стек.
- В цикле пока количество элементов в обоих стеках больше нуля происходит следующее: если стек s2 пуст или значение first истинно, то вызывается процедура PopPush с передачей стека s1 и указателя на стек s. иначе, если стек s1 пуст или значение first ложно, то вызывается процедура PopPush с передачей стека s2 и указателя на стек s. после каждой итерации цикла меняется значение first.
- Выводится сообщение с элементами стека s.