Вопрос задан 31.07.2023 в 14:58. Предмет Информатика. Спрашивает Моисеенко Александр.

(Pascal) Из двух стеков, создать Новый Стек Элементы брать по-очередно из исходных стеков Из

первого-четные, из ВТОРОГО Нечетные: [1,18,20,13,2] , [4, 8, 10,11,9], получили [2,9,20,11,18] (через процедуры)
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Пайвин Никита.
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
0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи на Pascal, вам нужно создать две процедуры: одну для заполнения нового стека с четными элементами из первого стека, а другую для заполнения нового стека с нечетными элементами из второго стека. Затем объедините эти процедуры, чтобы получить конечный стек.

Вот код на Pascal, решающий данную задачу:

pascal
program 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.

0 0

Похожие вопросы

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

Последние заданные вопросы в категории Информатика

Задать вопрос