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

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

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

> Закольцевание двусвязан. спис. Проблемы с выводом, Проблемы с выводом элементов кольца
сообщение
Сообщение #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).
 К началу страницы 
+ Ответить 

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


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

 





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