![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.04.2008
Сообщений: 24
|
![]()
Дорешите,пожалуйста задачи:
1)Даны два списка L1 и L2. Считая,что элементы списков упорядочены по неубыванию,вставить элементы списка L2 в список L1 так,чтобы он остался упорядоченным по неубыванию. Вот мои наработки: эта программа только выводит и сортирует один список,а как вывести второй и соединить-я не знаю(((( Uses Crt; Type Index = real; Index2 = integer; PList2 = ^TList2; TList2 = record info: Real; pred, next : PList2; end; Var head : PList2; n : index2; {Процедура формирования односвязного списка} Procedure MakeList (Var Head:PList2; Var n:index2); Var I : Index2; p : PList2; Begin {MakeList} Writeln('Введите количествоэлементов списка*'); Readln(n); Randomize; {Формирование списка*} New(head); {Сторож-головной элемент} Head^.next:=head; Head^.pred:=head; writeln('Введите последовательно элементы списка*'); For i:=1 to n do Begin New(p); p^.info:=Random(1000)/10; p^.next:=head; p^.pred:=head^.pred; p^.pred^.next:=p; head^.pred:=p; End; End; {Print} {Процедура выводит элементы списка на экран} Procedure Print ( Head:PList2); Var p : PList2; Begin {Print} {Вывод списка на экран} p:=head^.next; while p<>head do begin write(p^.info:5:1); p:=p^.next; end; writeln; End; {Print} {Процедура обменивает ссылочные части элемента p и следующего за ним} Procedure SwapList (P :PList2); Begin {Swaplist} p^.next^.next^.pred:=p^.next^.pred; p^.pred^.next:=p^.next; P^.next^.pred:=p^.pred; P^.pred:=p^.next; p^.next:=p^.pred^.next; p^.pred^.next:=p^.next^.pred; End; {Swaplist} {Сортировка методом пузырька (оптимизированная)} Procedure Sorting (Head:PList2); Var p,t,bound:Plist2; Begin {Sorting} Bound:=head^.pred; Repeat p:=head^.next; T:=nil; While (p<>bound) and (p^.next<>head) do If (p^.info>p^.next^.info) then Begin SwapList (p); T:=p^.pred^.next; End Else p:=p^.next; bound:=t; Until (t=nil) End; {Sorting} Begin {Program} Clrscr; Writeln ('Программа сортирует созданный линейный список из n элементов'); Writeln; MakeList(head,n); Print(head); Sorting (Head); Writeln; Writeln ('Отсортированный список'); Print(head); Writeln('Нажмите любую клавишу'); Repeat Until KeyPressed; End. {Program} 2)Дан список из n целых чисел. Исключить из списка элементы с минимальным значением: Вот мой алгоритм...его нужно подчистить:минимальный элемент находится некорректно, а когда даешь программе команду удалить его, она вообще зацикливается... ![]() program L01; uses crt; type PList = ^TList; TList = record info: integer; a: integer; next : PList; end; var head: PList; z: integer; {Формирование списка} procedure MakeList(var head:PList); var p,q : PList; n,i : integer; begin writeln('Введите количество элементов списка*'); readln(n); randomize; {Формирование списка} new(head); {Сторож-головной элемент} head^.next:=nil; p:=head; for I:=1 to n do begin new(q); q^.a:=random(100); q^.next:=nil; p^.next:=q; p:=q; end; end; {Вывод списка на экран} procedure WriteList(var head:PList); var p: PList; begin p:=head^.next; while p<>nil do begin write(p^.a:6); p:=p^.next; end; end; {Процедура нахождения минимального элемента*} procedure Minim(var head:PList); var p : PList; min : integer; begin p:=head^.next; min:=p^.info; while p<>nil do begin if p^.info < min then min:=p^.info; p:=p^.next; end; writeln(min); end; {Процедура удаления мин. элемента*} procedure Delete(var head:PList); var min:integer; p,q:PList; begin q:=head; p:=head^.next; while p<>nil do begin if p^.info = min then begin q^.next:=p^.next; dispose(p); p:=q^.next; end; end; end; begin clrscr; MakeList(head); WriteList(head); writeln; Minim(head); writeln; writeln('Введите 1,чтобы удалить минимальный элемент:'); read(z); if z=1 then Delete(PList); repeat until keypressed; end. ********СПАСИБО******** |
![]() |
![]() |
![]() |
#2 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Сначала по второй:
Цитата:
поля при создании списка нет. Удаление по логике должно вызываться delete(head). Вы удаляете минимальный элемент, а переменная min у Вас локальна и ее значение неопределено. Сделайте ее глобальной. Нет вывода списка после удаления. В самом удалении Вы теряете элементы. Посмотрите на это: Код:
Вы уже задавали этот вопрос. Теперь хотя-бы есть какие-то наработки. Зачем Вы делаете двухсвязный список ? В задании по-моему про это не сказано. Почему-бы не взять из второй задачи заполнение списка. Про сортировку в задании то-же ничего не сказано. Можно сразу взять два отсортированных списка. В чем проблема со слиянием ? Сделайте хотя-бы заполнение двух списков. |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 24.04.2008
Сообщений: 24
|
![]()
А...по второй задачке по поводу того,что минимальный элемент находится некорректно...Можно уточнить вплоть до алгоритма? пожалуйста...
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 24.04.2008
Сообщений: 24
|
![]()
А по первой...преподаватель все же придирается и требует сортировать список автоматически...
|
![]() |
![]() |
![]() |
#5 | ||
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]() Цитата:
Код:
Цитата:
Введите две головы: head1 и head2. Для каждой вызовите процедуры ввода и сортировки. С этим-то, надеюсь, разберетесь. |
||
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 24.04.2008
Сообщений: 24
|
![]()
Спасибо! Программа почти работает,но после нажатия "1",найденный элемент всеже не удаляется...
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 24.04.2008
Сообщений: 24
|
![]()
Всё!!!!!!Со второй задачей расправился!!!!
Спасибо вам огромное!!))))))) Щас сяду за первую.... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ПАСКАЛЬ.помогите пожалуйста срочно сделать задачу, завтра зачет. | Absent | Помощь студентам | 14 | 15.06.2009 19:50 |
Срочно,пожалуйста...паскаль динамич. списки | Никита35 | Помощь студентам | 2 | 07.05.2008 22:48 |
Списки. Паскаль | Demyrg | Помощь студентам | 2 | 10.04.2008 08:20 |
Списки(помогите срочно) | Coach2 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 30.03.2008 20:32 |
Паскаль. Списки | Freem | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 11.05.2007 14:22 |