|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.04.2009, 18:36 | #1 |
Регистрация: 12.03.2009
Сообщений: 5
|
Помогите пожалуйста исправить ошибку!!!Please!!!
Здравствуйте! Задача звучит так: Используя линейные списки для хранения последовательности чисел. Опишите процедуру,которая вставляет:
а) новый элемент Е1 перед первым вхождением элемента Е, если Е входит в список; б) новый элемент Е перед последним элементом непустого списка; У меня не идет второе условие, не знаю где исправить(procedure pos). вот код: type telem=0..999; list=^node; node=record info:telem; next:list; end; var s,l:list; x,e,e1:telem; n,i:integer; procedure insert(l:list; e,e1:telem); {новый элемент перед первым вхождением} var p,q:list; eq:boolean; begin p:=l; eq:=false; while (p<>nil) and not eq do if p^.info=e then eq:=true else p:=p^.next; if eq then begin p^.info:=e1; new(q); q^.info:=e; q^.next:=p^.next; p^.next:=q; end; end; procedure pos(l:list; e1:telem); {новый элемент перед последним элементом} var p,q:list; begin new(q); q^.info:=e1; q^.next:=nil; q:=l; while p^.next<>nil do p:=p^.next; p^.next:=q; end; procedure out_spisok(l:list); {выводит список на экран*} begin while l<>nil do begin s:=l^.next; write(l^.info, ''); l:=s; end; writeln; readln; end; begin {формируем список} s:=nil; writeln ('Введите количество элементов списка*: '); readln(n); for i:=1 to n do begin new(l); l^.next:=s; readln (x); l^.info:=x; s:=l; end; writeln ('Список: '); out_spisok(l); writeln ('Введите элемент перед которым хотите вставить: '); readln(e); writeln ('Введите элемент который хотите вставить: '); readln(e1); insert(l,e,e1); writeln ('Полученный список: '); out_spisok(l); writeln ('Введите элемент который хотите вставить: '); readln(e1); writeln('Список: '); pos(l,e1); out_spisok(l); while l<>nil do {Освобождаем динамическую память} begin s:=l^.next; dispose(l); l:=s; end; end. |
02.04.2009, 20:31 | #2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
p не инициализировано перед циклом:
new(q); q^.info:=e1; q^.next:=nil; p:=l; |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите исправить ошибку! | samuex | Microsoft Office Word | 1 | 24.02.2009 22:05 |
Помогите исправить ошибку | sergoss | Общие вопросы Delphi | 2 | 14.02.2009 09:59 |
Помогите пожалуйста найти и исправить ошибку | Sam04 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 10.06.2008 08:28 |
Пожалуйста срочно помочь мне исправить ошибку в задаче | Vladislav_87 | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 20.05.2008 20:46 |
Помогите исправить ошибку | Булат | Общие вопросы Delphi | 3 | 25.04.2008 10:01 |