Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 16:15   #1
prohorp
Новичок
Джуниор
 
Регистрация: 06.05.2012
Сообщений: 1
Сообщение Delphi, динамические списки

Здравствуйте!
Как бы мне стыдно не было признаваться - но я реально не могу понять даже на логическом уровне как строятся динамические списки и как они именно работают
Там очень много циклов, присваиваний по 3 раза одной и тойже величины, что заблуждает меня совсем
Я примерно понял что такое динамические списки, но не совсем понял что делает у меня мой код,
Он вроде работает, но добавление записей толи перезатирает предыдущий, потому что запись у меня конечная выводится только.
Как работать с типизированными файлами я разобрался, а вот с динамическими списками не могу(что-то схожее есть но логика там разная)

вот мой код, опишите под каждой строчкой пожалуйста что она делает, ОЧЕНЬ ВАС ПРОШУ:

type
PDan = ^Dan;
Dan = record
shifr: integer;
name: string[10];
price: integer;
mass: integer;
next: PDan;
end;

var
Form1: TForm1;
prev, dobav: PDan;
i: integer;
ldan: Dan;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
New(dobav);
dobav^.next:= nil;
with dobav^ do begin

shifr:= StrToInt(Edit1.Text);
name:= Edit2.Text;
price:= StrToInt(Edit3.Text);
mass:= StrToInt(Edit4.Text);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
for i:= 0 to sizeof(next) do begin
Label1.Caption:= Label1.Caption + #13#10 + IntToStr(dobav^.shifr) + '___' + dobav^.name + '___' + IntToStr(dobav^.price) + '___' + IntToStr(dobav^.mass);
end;
end;
prohorp вне форума Ответить с цитированием
Старый 08.05.2012, 18:04   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Вот пример правильной работы с динамическими списками.
Теперь краткое объяснение:
PDan - тип указателя (адрес) на место, где хранится следующий элемент списка (запись).
Нам нужно правильно выделять место для каждой записи и связывать с другими записями.
First указывает на голову списка.
Last - на конец списка.
Мы выделяем командой new(tmp) память под элемент списка.
Заполняем поля этой записи, обращаясь по указателю tmp^.
Теперь правильно привешиваем элемент к списку:
Если список пуст, то fisrt и last должны указывать на только что созданный элемент.
Если список не пуст, то last^.next:=tmp привешивает элемент к последнему в списке и ставит last:=tmp указатель на конец списка.
Вложения
Тип файла: zip Project1.zip (222.5 Кб, 17 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 08.05.2012 в 18:10.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические списки МихаилС Паскаль, Turbo Pascal, PascalABC.NET 0 30.01.2011 16:55
Динамические списки. Светусик Паскаль, Turbo Pascal, PascalABC.NET 0 22.12.2010 17:50
Динамические списки Saawa Помощь студентам 4 02.12.2009 18:35
Динамические списки tgig Паскаль, Turbo Pascal, PascalABC.NET 6 30.06.2009 14:53
Динамические списки MyQwErTy Помощь студентам 3 14.04.2009 20:08