Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на циклический список
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zam
Написал программу, но она не работает, помогите пожалуйста найти в чем дело. ( надо добавить элемент в начало циклического цикла )

Вот программа:

Program Task1641I ( input, output );
uses crt;
Type
PtrRec = ^Rec;
Rec = Record
Element : integer;
pNext : PtrRec;
End;
Var
pBegin, pEnd, pAux, pCKey: PtrRec;
R: integer;


Procedure Create_Ring (var pBegin: PtrRec);
Var pAux : PtrRec;
el : integer;
Begin
New (pBegin);
pAux := pBegin;
pAux^.pNext := Nil;
Write ('Write numbers... ');
ReadLn (el);
While el <> 0 do
Begin
New (pAux^.pNext);
pAux := pAux^.pNext;
pAux^.Element := el;
pAux^.pNext := Nil;
ReadLn (el);
End;
pAux^.pNext := pBegin^.pNext;
Writeln;
End;

Procedure Add_Elem2 (pCKey: PtrRec; R: integer);
Var pAux : PtrRec;
Begin
New (pAux);
pAux^.pNext := pCKey^.pNext;
pCKey^.pNext := pAux;
pAux^.Element := pCKey^.Element;
pCKey^.Element := R;
End;

Procedure Print_Ring (pBegin: PtrRec);
Var pAux: PtrRec;
Begin
pAux := pBegin^.pNext;
If pBegin^.pNext<>Nil Then Begin
While pAux^.pNext <> pBegin^.pNext do
Begin
Write (pAux^.Element,' ');
pAux := pAux^.pNext
End;
Writeln (pAux^.Element);
End
Else Writeln ('list is empty')
End;

begin
clrscr;
create_ring ( pBegin );
write ( 'write R...' );
read ( R );
add_elem2 ( pCKey, R );
write ( 'New list...' );
print_ring ( pBegin );
readkey;
end.
volvo
Цитата
помогите пожалуйста найти в чем дело.
В попытке разыменования нулевого указателя:
Procedure Add_Elem2 (pCKey: PtrRec; R: integer);
Var pAux : PtrRec;
Begin
New (pAux);
pAux^.pNext := pCKey^.pNext; { <--- Вот тут pCKey = nil }
...



Поищи по форуму, были темы про кольцевой список (правда, про двухсвязный, но это ничего не меняет, для реализации односвязного надо будет кое-что лишнее выбросить)...
Zam
спасибо, за указание ошибки, прогармму написал
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.