Переливание нечётных элементов из двух стеков в стек - PascalABC.NET
Формулировка задачи:
У нас есть два стека, получаемых из файлов (Stack1.bat и Stack2.bat), нужно перелить нечётные элементы (не по их позиции, а именно нечётные: 1,3,5 и т.д.) из 1 и 2 стека в 3. При этом оставив чётные в 1 и 2 стеке.
У меня получилось реализовать только полное переливание, а как сделать переливание нечётных не знаю((
Решение задачи: «Переливание нечётных элементов из двух стеков в стек»
textual
Листинг программы
var
T: exst := nil;
{Основная программа}
// ...
while StackPop(Stack1, StackD) do
if Odd(StrToInt(StackD^.Data)) then StackPush(Stack3, StackD) // Нечетный элемент? Пишем его сразу в stack3
else StackPush(T, StackD); // Четный? Временно сохраняем в другом стеке
while StackPop(T, StackD) do StackPush(Stack1, StackD); // А теперь все содержимое временного стека вернем в первый
Объяснение кода листинга программы
В данном коде выполняется переливание нечётных элементов из двух стеков в стек. В первых двух строках объявляются три указателя:
T— указатель на стек, в который будут помещаться все четные элементы.Stack1— указатель на первый стек.Stack3— указатель на третий стек. В следующей строке описана операция, которая будет выполняться в цикле:StackPop(Stack1, StackD)— из первого стека (Stack1) выталкивается элемент (StackD).if Odd(StrToInt(StackD^.Data))— проверяется, является ли вытолкнутый элемент нечётным числом.- Если условие выполняется, то выполняется операция
StackPush(Stack3, StackD), т.е. этот элемент помещается в третий стек (Stack3). - Если условие не выполняется, то выполняется операция
StackPush(T, StackD), т.е. этот элемент помещается в указательT, который хранит второй стек. Далее в цикле выполняются операции: while StackPop(Stack1, StackD)— из первого стека (Stack1) выталкивается элемент (StackD).StackPush(Stack1, StackD)— этот элемент помещается обратно в первый стек (Stack1). Таким образом, в результате выполнения данного кода в первом стеке (Stack1) останутся только нечётные элементы, а во втором стеке (Stack3) — только чётные.