
Вопрос задан 31.07.2023 в 14:58.
Предмет Информатика.
Спрашивает Моисеенко Александр.
(Pascal) Из двух стеков, создать Новый Стек Элементы брать по-очередно из исходных стеков Из
первого-четные, из ВТОРОГО Нечетные: [1,18,20,13,2] , [4, 8, 10,11,9], получили [2,9,20,11,18] (через процедуры)

Ответы на вопрос

Отвечает Пайвин Никита.
PascalABC.NET 3.3.5, сборка 1659 от 09.04.2018
Внимание! Если программа не работает, обновите версию!
procedure FillStack(st:Stack<integer>; sq:sequence of integer);
begin
foreach var t in sq do st.Push(t);
end;
procedure PrintStack(st:Stack<integer>; s:string);
begin
Write(s); st.Println
end;
procedure ToStack(sta,stb:Stack<integer>; Even:boolean);
begin
if Even then
while sta.Count>0 do begin
var v:=sta.Pop;
if v.IsEven then begin
stb.Push(v);
exit
end
end
else
while sta.Count>0 do begin
var v:=sta.Pop;
if v.IsOdd then begin
stb.Push(v);
exit
end
end
end;
begin
var st1:=new Stack<integer>;
FillStack(st1,Seq(2,13,20,18,1));
PrintStack(st1,'Стек1: ');
var st2:=new Stack<integer>;
FillStack(st2,Seq(9,11,10,8,4));
PrintStack(st2,'Стек2: ');
var st3:=new Stack<integer>;
while st1.Count+st2.Count>0 do begin
ToStack(st1,st3,True);
ToStack(st2,st3,False);
end;
PrintStack(st3,'Стек3: ')
end.
Результат
Стек1: 1 18 20 13 2
Стек2: 4 8 10 11 9
Стек3: 2 9 20 11 18
Внимание! Если программа не работает, обновите версию!
procedure FillStack(st:Stack<integer>; sq:sequence of integer);
begin
foreach var t in sq do st.Push(t);
end;
procedure PrintStack(st:Stack<integer>; s:string);
begin
Write(s); st.Println
end;
procedure ToStack(sta,stb:Stack<integer>; Even:boolean);
begin
if Even then
while sta.Count>0 do begin
var v:=sta.Pop;
if v.IsEven then begin
stb.Push(v);
exit
end
end
else
while sta.Count>0 do begin
var v:=sta.Pop;
if v.IsOdd then begin
stb.Push(v);
exit
end
end
end;
begin
var st1:=new Stack<integer>;
FillStack(st1,Seq(2,13,20,18,1));
PrintStack(st1,'Стек1: ');
var st2:=new Stack<integer>;
FillStack(st2,Seq(9,11,10,8,4));
PrintStack(st2,'Стек2: ');
var st3:=new Stack<integer>;
while st1.Count+st2.Count>0 do begin
ToStack(st1,st3,True);
ToStack(st2,st3,False);
end;
PrintStack(st3,'Стек3: ')
end.
Результат
Стек1: 1 18 20 13 2
Стек2: 4 8 10 11 9
Стек3: 2 9 20 11 18



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для решения этой задачи на Pascal, вам нужно создать две процедуры: одну для заполнения нового стека с четными элементами из первого стека, а другую для заполнения нового стека с нечетными элементами из второго стека. Затем объедините эти процедуры, чтобы получить конечный стек.
Вот код на Pascal, решающий данную задачу:
pascalprogram MergeStacks; type TStack = record Data: array [1..100] of Integer; Top: Integer; end; procedure InitializeStack(var stack: TStack); begin stack.Top := 0; end; function IsStackEmpty(const stack: TStack): Boolean; begin Result := stack.Top = 0; end; procedure Push(var stack: TStack; value: Integer); begin if stack.Top < 100 then begin Inc(stack.Top); stack.Data[stack.Top] := value; end; end; function Pop(var stack: TStack): Integer; begin if not IsStackEmpty(stack) then begin Result := stack.Data[stack.Top]; Dec(stack.Top); end; end; procedure MergeStacksEvenOdd(var sourceStack1, sourceStack2, mergedStack: TStack); var tempStack1, tempStack2: TStack; value: Integer; begin InitializeStack(tempStack1); InitializeStack(tempStack2); // Fill tempStack1 with even elements from sourceStack1 while not IsStackEmpty(sourceStack1) do begin value := Pop(sourceStack1); if value mod 2 = 0 then Push(tempStack1, value); end; // Fill tempStack2 with odd elements from sourceStack2 while not IsStackEmpty(sourceStack2) do begin value := Pop(sourceStack2); if value mod 2 <> 0 then Push(tempStack2, value); end; // Merge both temp stacks into mergedStack while not IsStackEmpty(tempStack1) do Push(mergedStack, Pop(tempStack1)); while not IsStackEmpty(tempStack2) do Push(mergedStack, Pop(tempStack2)); end; var sourceStack1, sourceStack2, mergedStack: TStack; i: Integer; begin InitializeStack(sourceStack1); InitializeStack(sourceStack2); InitializeStack(mergedStack); // Fill sourceStack1 and sourceStack2 with the given data for i := 1 to 5 do begin Push(sourceStack1, [1, 18, 20, 13, 2][i]); Push(sourceStack2, [4, 8, 10, 11, 9][i]); end; // Merge the stacks with even and odd elements MergeStacksEvenOdd(sourceStack1, sourceStack2, mergedStack); // Output the merged stack while not IsStackEmpty(mergedStack) do Write(Pop(mergedStack), ' '); end.
Обратите внимание, что здесь используется структура данных "стек", реализованная в виде записи (record) с массивом данных и указателем на вершину стека (Top). Программа создает исходные стеки sourceStack1 и sourceStack2, заполняет их данными, а затем объединяет их с помощью процедуры MergeStacksEvenOdd, выводя результат в mergedStack. В конце программа выводит значения из mergedStack.


Похожие вопросы
Топ вопросов за вчера в категории Информатика

Информатика 572

Информатика 1113

Информатика 10

Информатика 32

Информатика 16

Информатика 578

Информатика 21
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili