Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на циклический список
Форум «Всё о Паскале» > 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
спасибо, за указание ошибки, прогармму написал
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.