![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
DOG-Paul |
![]()
Сообщение
#1
|
Гость ![]() |
Посомтрите код пожалуйста! Что не так?
Код program sort1; uses crt; type plist = ^tlist; tlist = record info: integer; link: plist; end; var first: plist; procedure sort (p: plist); {Процедура сортировки простыми вставками} var t: plist; begin while p<>nil do begin t:=p^.link; if p^.info>t^.info then begin t^.link:=p; p^.link:=t; sort (first); break; end; p:= p^.link; end; end; procedure print(p: plist); {Процедура вывода списка} begin while p <> nil do begin write(p^.info, ' '); p := p^.link; end; writeln; end; procedure vvod (var first: plist); {Процедура ввода списка} var s: integer; p, last: plist; begin last := first; repeat write('Введите следующий элемент: '); readln(s); if s <> 0 then begin new(p); p^.info := s; p^.link := nil; if first = nil then first := p else last^.link := p; last := p; end; until s = 0; end; begin clrscr; writeln('Введите список:'); first:=nil; vvod (first); sort (first); print(first); readkey; end. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
|
DOG-Pail |
![]()
Сообщение
#3
|
Гость ![]() |
Я понимаю, что пример вы приводили!
Но вот что вот в таком тексте программы не верно! Она выводит только 2 последних отсортированных! Проблема в сохранении указателя на первый элемент спика first ПОМОГИТЕ ПЛИЗ!!! Код program sort1; uses crt; type plist = ^tlist; tlist = record info: integer; link: plist; end; var first: plist; procedure sort (p: plist); {Процедура сортировки простыми вставками} var t, t2: plist; begin t:=p^.link; if t<>nil then if p^.info > t^.info then begin if first = p then first:=t; t2:= t^.link; t^.link := p; p^.link := t2; sort (first); end else sort (p^.link); end; procedure print(p: plist); {Процедура вывода списка} begin while p <> nil do begin write(p^.info, ' '); p := p^.link; end; writeln; end; procedure vvod (var first: plist); {Процедура ввода списка} var s: integer; p, last: plist; begin last := first; repeat write('Введите следующий элемент: '); readln(s); if s <> 0 then begin new(p); p^.info := s; p^.link := nil; if first = nil then first := p else last^.link := p; last := p; end; until s = 0; end; begin clrscr; writeln('Введите список:'); first:=nil; vvod (first); sort (first); print(first); readkey; end. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Смотри, что ты делаешь:
procedure sort (p: plist); {Процедура сортировки простыми вставками} ... что будет в указанном мной случае? Ты просто "отсечешь" все последующие элементы... Один элемент ты потеряешь в любом случае... Так что не надо здесь мудрить с указателями, работай с данными: procedure sort (p: plist); ![]() |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
Да всё работает!
Но это будет как думаешь считаться првильм вариантом!? Ведь у нас сортировка динамического списка? |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 7:23 |