IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Объединение 2 упорядоченных списков, работа со списками
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Помогите составить программу, которая объединяет 2 упорядоченных по убыванию списка в один, тоже упорядоченный по убыванию. После к-того элемента вставить max элемент списка.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Поиск -> Сортировка слияниями


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Искал я сортировку слияниями в поиске. Близкого к моей задаче ничего не нашёл. Подскажите алгоритм: как выбирать позицию для вставки элемента из 2 списка в 1 список или другие путь решения моей задачи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Отредактировано

Начинаем:

1:

если оба списка пусты, завершаем программу, иначе

Если один из списков пуст, закидываем в третий список остввшиеся элементы из второго списка, если он конечно не пуст, завершаем программу иначе

Если Текущий элемент списка1 >= текущего элемента списка2, то в список3 заносим текущий элемент списка1 и список1 := список1.NEXT иначе заносим текущий элемент списка2 в третий список и список2 := списо2.NEXT

GOTO 1 smile.gif

ps метки использовать не надо smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Алгоритм понял и прогу прикрепил, но тогда приходится создавать 1-й элемент для 3 списка.
Можно ли решить эту задачу не используя 3 список, а делая действия над двумя данными?


Прикрепленные файлы
Прикрепленный файл  XM.PAS ( 1.58 килобайт ) Кол-во скачиваний: 420
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Не нужен никакой третий список... Все прекрасно делается с двумя:


{ Объявляешь доп. переменные }
var
p1, p2, T: spisok;
first: boolean;

... { Здесь - ввод списков }

{
Проверяешь, в каком списке стартовый элемент больший...
Этот список для тебя - ПЕРВЫЙ
}
if begqa^.inf > begqb^.inf then begin
p1 := begqa; p2 := begqb;
first := true;
end
else begin
p1 := begqb; p2 := begqa;
first := false;
end;

{
Дальше - сам алгоритм
}
while (p1 <> nil) and (p2 <> nil) do begin

while (p1^.link <> nil) and (p1^.link^.inf > p2^.inf) do p1 := p1^.link;
if p1.link <> nil then begin

T := p2^.link;

p2^.link := p1^.link;
p1^.link := p2;

p2 := T;
end;
T := p1;
p1 := p1^.link;

end;

{
Не забываем "прилепить" к концу первого списка остаток второго, если он есть
}
T^.link := p2;

{
ну, и распечатыаем соответственно тот список, который ПЕРВЫЙ (см. выше)
}
if first then p := begqa
else p := begqb;

while p<>nil do begin
write(' ',p^.inf); p:=p^.link;
end;
writeln;



Добавлено через 1 мин.
Тестировалось на
<17, 15, 9, 1, 0>
и
<14, 7, 6, 2, -2>

Вроде работает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Не подскажите почему на паскале 7.0 отрицательные числа не проходят, а на 7.1 проходят


Прикрепленные файлы
Прикрепленный файл  SPISKI_reshenie.PAS ( 2.1 килобайт ) Кол-во скачиваний: 409
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
почему на паскале 7.0 отрицательные числа не проходят
Обратил внимание, я привел тебе тестовую последовательность с отрицательными числами... Проверялось именно на TP 7.0... Что ты вводил?

Добавлено через 4 мин.
Кстати, зачем ты делаешь
i,k,max:byte;
? А если будет два отрицательных числа в начале обоих списков? Проблема... Описывай как Integer...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 23:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name