IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на циклический список, Добавление элемента в начало списка
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Написал программу, но она не работает, помогите пожалуйста найти в чем дело. ( надо добавить элемент в начало циклического цикла )

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

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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
сообщение
Сообщение #2


Гость






Цитата
помогите пожалуйста найти в чем дело.
В попытке разыменования нулевого указателя:
Procedure Add_Elem2 (pCKey: PtrRec; R: integer);
Var pAux : PtrRec;
Begin
New (pAux);
pAux^.pNext := pCKey^.pNext; { <--- Вот тут pCKey = nil }
...



Поищи по форуму, были темы про кольцевой список (правда, про двухсвязный, но это ничего не меняет, для реализации односвязного надо будет кое-что лишнее выбросить)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


спасибо, за указание ошибки, прогармму написал
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 20:27
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name