Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2015, 16:34   #1
Ovenvan
Пользователь
 
Регистрация: 09.06.2015
Сообщений: 21
По умолчанию Delphi (Lazarus). Слияние двух отсортированных стека.

Добрый день. В задаче нужно слить два отсортированных стека, так чтобы получился новый третий отсортированный стек. Не особо разобрался в стеках. Буду рад помощи.
Ovenvan вне форума Ответить с цитированием
Старый 10.06.2015, 16:47   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Код:
x := stack1.pop();
y := stack2.pop();
if x <= y then
begin
  stack3.push(x);
  stack3.push(y);
end
else
begin
  stack3.push(y);
  stack3.push(x);
end
Реализацию стека в различных варианта в инете или книгаз не найдет только идиот.
p51x вне форума Ответить с цитированием
Старый 10.06.2015, 17:13   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Код:
  stack3.push(x);
  stack3.push(y);
а если новое(следующее) значение в stack1 снова окажется меньше УЖЕ внесенного из второго стека (stack3.push(y))
stack1 2 3 4
stack2 5 6 7
stack3 4 7 3 6 2 5 !!!!
Код:
// ВНИМАНИЕ!!  используется допущение! для ПУСТОГО стека pop() возвращает nil !!!
a:=x.pop();
b:=y.pop();
while a<>nil or b<>nil do 
  if a=nil then 
  begin 
   z.push(b); 
   b:=y.pop();
  end
  else if b=nil then 
  begin
   z.push(a);
   a:=pop();
  end
  else if a<b then 
  begin
   z.push(a);
   a:=pop();
  end
  else {if a>=b then} 
  begin 
   z.push(b);
   b:=pop();
  end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.06.2015 в 17:16.
evg_m вне форума Ответить с цитированием
Старый 10.06.2015, 17:40   #4
Ovenvan
Пользователь
 
Регистрация: 09.06.2015
Сообщений: 21
По умолчанию

Не могли бы Вы поподробнее объяснить код? Как я понял, push и pop реализуются как функции. А вот как они используются...
Ovenvan вне форума Ответить с цитированием
Старый 10.06.2015, 17:58   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Похоже это Ханойские башни.
https://ru.wikipedia.org/wiki/Ханойская_башня
Только не в стартовой позиции. Я бы озадачился написанием своего фреймворка на стеках (типа нахождение наибольшего из двух стеков и помещения в третий).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 10.06.2015 в 18:01.
Utkin вне форума Ответить с цитированием
Старый 13.06.2015, 17:24   #6
Ovenvan
Пользователь
 
Регистрация: 09.06.2015
Сообщений: 21
По умолчанию

Спасибо за помощь, задача выполнена.
Ovenvan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние двух массивов в Delphi sauron99 Помощь студентам 17 03.04.2016 09:37
Слияние двух массивов Anubys Общие вопросы C/C++ 5 28.03.2011 10:07
Слияние двух массивов Anubys Помощь студентам 0 26.03.2011 16:12
Слияние двух файлов в один hen Общие вопросы C/C++ 1 07.10.2009 22:59
как из двух отсортированных по возрастанию одномерных массивов сформировать третий Тоха Рыжов Общие вопросы C/C++ 1 07.10.2007 01:43