![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 06.05.2012
Сообщений: 1
|
![]()
Здравствуйте!
Как бы мне стыдно не было признаваться - но я реально не могу понять даже на логическом уровне как строятся динамические списки и как они именно работают Там очень много циклов, присваиваний по 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; |
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Вот пример правильной работы с динамическими списками.
Теперь краткое объяснение: PDan - тип указателя (адрес) на место, где хранится следующий элемент списка (запись). Нам нужно правильно выделять место для каждой записи и связывать с другими записями. First указывает на голову списка. Last - на конец списка. Мы выделяем командой new(tmp) память под элемент списка. Заполняем поля этой записи, обращаясь по указателю tmp^. Теперь правильно привешиваем элемент к списку: Если список пуст, то fisrt и last должны указывать на только что созданный элемент. Если список не пуст, то last^.next:=tmp привешивает элемент к последнему в списке и ставит last:=tmp указатель на конец списка.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 08.05.2012 в 18:10. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Динамические списки | МихаилС | Паскаль, 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 |