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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2009, 18:36   #1
Irin@
 
Регистрация: 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.
Irin@ вне форума Ответить с цитированием
Старый 02.04.2009, 20:31   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

p не инициализировано перед циклом:

new(q); q^.info:=e1; q^.next:=nil; p:=l;
alexBlack вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку! 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