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

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

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

 
 Ответить  Открыть новую тему 
> Задача на циклический список, Добавление элемента в начало списка
Zam
сообщение 8.12.2007 22:52
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.12.2007 1:44
Сообщение #2


Гость






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



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





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

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


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

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

 



- Текстовая версия 20.07.2025 10:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"