Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод записей из динамического списка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
alex457
Здраствуйте, такой вопрос, как вывести из списка одну запись например 3 из 100.
Создание списка происходит так:

Assign(Data,Path);
Reset(Data);
l:=nil;
i:=0;
while not eof(Data) do
begin
inc(i);
Seek(Data,i);
Read(Data, Symbol);
new(t);
t^.key := i;
t^.row := Symbol;
t^.next := l;
l:=t;
end;
CountRecords := i;
Close(Data);




Вывод всех записей:

while ( t <> nil) do
begin

write(t^.row.SurName);
write(t^.row.Name);
write(t^.row.FullName);
write(t^.row.BhirtDay);
writeln(t^.row.Identity);
t:=t^.Next;
end;
end;




А вот как обратиться к определенной записи непонимаю.
IUnknown
Это не "продвинутое программирование". Не должна программа обращаться к элементам списка по порядковому номеру.

t := head; // Указатель - на НАЧАЛО списка (которое ты, кстати, не запоминаешь)
index := 3; // Порядковый номер нужного элемента
while (t <> nil) and (index > 1) do
begin
dec(index);
t := t^.next;
end;

if t = nil then writeln('Нет столько элементов в списке')
else
// Выводишь содержимое элемента, на который указывает t
Или просто (раз уж ты хранишь в поле Key порядковый номер записи) беги по списку, когда это поле станет равным нужному значению - напечатаешь данные.
alex457
Ага, спасибо! И еще один небольшой вопрос. Объясни в теории как можно сделать постраничный вывод записей. Например 1,20 20,30. Как вперед листать этом понятно, указатель на next, А вот обратно вернуть к 1,20 неполучаеться чегото. буду очень благодарен.
IUnknown
В теории - проще всего поменять односвязный список на двухсвязный, и ходить по нему не только next, но и prev smile.gif
alex457
Мне нужен односвязный). Гемор конечно, но нужно..
IUnknown
Ну, нужно - так делай. Как найти элемент с номером X, ты знаешь, запоминай, с какого элемента списка начинается "текущая страница" на экране, при следующем обновлении страницы отсчитывай от начала X - 20, и выводи 20 записей.

Цитата
Гемор конечно, но нужно..
А потом они еще удивляются
alex457
Цитата(IUnknown @ 12.04.2012 13:45) *

Ну, нужно - так делай. Как найти элемент с номером X, ты знаешь, запоминай, с какого элемента списка начинается "текущая страница" на экране, при следующем обновлении страницы отсчитывай от начала X - 20, и выводи 20 записей.

А потом они еще удивляются


Такое решение не очень по одной простой причине:
Скорость обработки вообще никакая.
Вместо того что бы перебрать 20 записей, вы каждый раз собираетесь перебирать все 100.

Принцип как это сделать я знаю. У меня только вопросы по указателям, как их сделать
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.