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

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

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

> Закольцевание двусвязан. спис. Проблемы с выводом, Проблемы с выводом элементов кольца
Insel
сообщение 23.10.2005 19:35
Сообщение #1


Гость






Здравствуйте.
Помогите, пожалуйста, разобраться с этой задачей: создать двусвязанный список из целых чисел. Преобразовать его в кольцо. Предусмотреть возможность движения по кольцу в обе стороны с отображением местоположения текущего элемента.

Пользуясь материалом различный FAQ и форумов состряпал представленный ниже код. Добавление элементов в список и закольевание списка в кольцо проходит вроде нормально. Проблема возникает при выводе элементов.
Помогите, пожалуйста, разобраться, почему элементы не выводятся? И если есть ли где ошибки логики?
program Project1_1;

uses
SysUtils;

{$APPTYPE CONSOLE}
type TipElement=Integer;
svqz=^Zveno;
Zveno=Record
sled:svqz;
pred:svqz;
element:TipElement;
end;

var
start:svqz; {nachal'nyi element spiska}
kon:svqz; {konechnyi element spiska}
p:svqz; //!!!


{Добавление в начало списка}
Procedure AddToBegin(a: TipElement);
var
p: svqz;
Begin
New(p);
p^.Element:=a;
If (start=NIL) and (kon=NIL) Then
Begin
p^.pred:=NIL;
p^.sled:=NIL;
start:=p;
kon:=p;
End
Else
Begin
p^.sled:=start;
start^.pred:=p;
p^.pred:=NIL;
start:=p;
End;
End;

{Добавление в конец списка}
Procedure AddToEnd(a: TipElement);
var
p:svqz;
Begin
new(p);
p^.Element:=a;
If (start=NIL) and (kon=NIL) Then
Begin
p^.pred:=NIL;
p^.sled:=NIL;
start:=p;
End
Else
Begin
p^.sled:=NIL;
p^.pred:=kon;
kon^.sled:=p;
End;
kon:=p;
End;

procedure Vyvod_Forward(p:svqz);
var
UkZv:svqz;
Begin
UkZv:=p^.sled;
if p^.sled=p then
writeln('Koltso pusto')
else
begin
while UkZv<>p do
begin
Write (UkZv^.element, ' ');
ukzv:=ukzv^.sled;
end;
writeln;
end;
End;

procedure vyvod_back(p:svqz);
var
ukzv:svqz;
begin
ukzv:=p^.pred;
if p^.sled=p then
writeln('Koltso pusto')
else begin
while ukzv<>p do
begin
write(ukzv^.element, ' ');
ukzv:=ukzv^.pred;
end;
writeln;
end
End;
//----------------------
{Закольцовывание списка}
Procedure ToRing;
Begin
kon^.sled:=start;
start^.pred:=kon;
End;
//----------------------
{var
a:svqz;}
BEGIN
start:=NIL;
kon:=NIL;

AddToBegin(5);
AddToBegin(9);
AddToBegin(-6);
{AddToBegin(12);}
ToRing;

vyvod_back(p);

readln;
readln;
END.


Для написания использовался Delphi (Console Application).
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Insel
сообщение 24.10.2005 23:15
Сообщение #2


Гость






Volvo большое спасибо за помощь. smile.gif
У меня только маленький вопрос, фраза из условия “Предусмотреть возможность движения по кольцу в обе стороны”, подразумевает на Ваш взгляд такую (или примерно такую) реализацию, как мои процедуры Vyvod_Forward и Vyvod_Back или препод имел в виду что-то другое?
Ещё раз спасибо, что помогли с задачей и нашли ошибку! smile.gif
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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