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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Вывод дунаправленого динамического списка с последнего элемента, немного неправильная реализация... нужна помощь с доведением до ума
сообщение
Сообщение #1


Новичок
*

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

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


народ, я застрял... нужно написать просмотр двунаправленого динамического списка с последнего элемента...
я написал следующее

procedure TForm1.Button8Click(Sender: TObject);
var i:integer;
begin
new(p2);
p:=head;
While P <> Nil Do
Begin
p^.pred:=p;
if p^.sled=nil then
last:=p;
p:=p^.sled;

End;


Label9.Caption:=''; Label10.Caption:='';
Label11.Caption:=''; Label12.Caption:=''; Label14.Caption:='';
i:=1; p:=last;
While P <> Nil Do
Begin
Label9.Caption:=Label9.Caption+chr(13)+P^.shifr;
Label10.Caption:=Label10.Caption+chr(13)+P^.naim;
Label11.Caption:=Label11.Caption+chr(13)+P^.cena;
Label12.Caption:=Label12.Caption+chr(13)+P^.ves;
Label14.Caption:=Label14.Caption+chr(13)+IntToStr(i);
p:=head^.pred; inc(i);
End;
end;

но оно зацикливается на последнем элементе....

в архиве весь проект...
нид хелп... в понедельник сдавать, а без этого препод не принимает(((

Сообщение отредактировано: krox -


Прикрепленные файлы
Прикрепленный файл  ____2.rar ( 9.33 килобайт ) Кол-во скачиваний: 193
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






А я тебя не предупреждал? Двунаправленный список(Delphi) Читай внимательно последнюю фразу...

Все дело в сортировке. Она просто изначально предназначена для работы с односвязным списком, и неправильно заполняет поле Prev, а сделать так, чтобы было проще я тебе предлагал - ты отказался... И потом: у тебя там что-то накручено с добавлением элемента... В общем, все, что я изменил, чтобы программа работала прилично:

// Обрати внимание, идем с последнего к первому, и не надо никаких выкрутасов
procedure TForm1.Button8Click(Sender: TObject);
var i:integer;
begin
p := last;
Label9.Caption:=''; Label10.Caption:='';
Label11.Caption:=''; Label12.Caption:=''; Label14.Caption:='';
i := 1;
while P <> nil do begin
Label9.Caption := Label9.Caption+chr(13)+P^.shifr;
Label10.Caption := Label10.Caption+chr(13)+P^.naim;
Label11.Caption := Label11.Caption+chr(13)+P^.cena;
Label12.Caption := Label12.Caption+chr(13)+P^.ves;
Label14.Caption := Label14.Caption+chr(13)+IntToStr(i);
p := p^.pred; inc(i);
end;
end;

// Сама сортировка тоже изменена:
procedure TForm1.Button7Click(Sender: TObject);

// Не захотел отделить данные от указателей - получай доп. процедуру копирования
procedure CopyTo(var Dest: telem; Src: telem);
begin
Dest.shifr := Src.shifr;
Dest.naim := Src.naim;
Dest.cena := Src.cena;
Dest.ves := Src.ves;
end;

procedure SortVst(var first: pelem);
var
i, j: pelem;
T: telem;
begin
i := first;
while i <> nil do begin
T := i^;
j := i^.pred;
while (j <> nil) and (T.shifr < j^.shifr) do begin
CopyTo(j^.sled^, j^);
j := j^.pred;
end;

if j = nil then CopyTo(first^, T)
else CopyTo(j^.sled^, T);

i := i^.sled;
end;
end;

begin

if head <> nil then begin
SortVst(head);
end
else begin
ShowMessage('Список пуст');
end;

end;

// Ну, и добавление элемента в список, как я и говорил:
procedure TForm1.Button1Click(Sender: TObject);
begin
New(p);
p^.shifr:=Edit1.Text;
p^.naim:=Edit2.text;
p^.cena:=Edit3.Text;
p^.ves:=Edit4.Text;

p^.sled := head; p^.pred := nil;
if head = nil then last := p
else head^.pred := p;

head := p;
end;
Вроде ничего не забыл... В аттаче проект, но у меня D2009, предупреждаю сразу...


Прикрепленные файлы
Прикрепленный файл  project.zip ( 7.71 килобайт ) Кол-во скачиваний: 183
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


спасибо) под 7ой запустилось, иначе бы продолжил работать под 9ой, а потом админов бы уломал, чтобы на 1 комп поставили бы)

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

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


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

 





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