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

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

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

 
 Ответить  Открыть новую тему 
> Вывод записей из динамического списка
сообщение
Сообщение #1


Новичок
*

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

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


Здраствуйте, такой вопрос, как вывести из списка одну запись например 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;




А вот как обратиться к определенной записи непонимаю.

Сообщение отредактировано: alex457 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


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

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


Новичок
*

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

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


Ага, спасибо! И еще один небольшой вопрос. Объясни в теории как можно сделать постраничный вывод записей. Например 1,20 20,30. Как вперед листать этом понятно, указатель на next, А вот обратно вернуть к 1,20 неполучаеться чегото. буду очень благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


В теории - проще всего поменять односвязный список на двухсвязный, и ходить по нему не только next, но и prev smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Мне нужен односвязный). Гемор конечно, но нужно..

Сообщение отредактировано: alex457 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


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

Цитата
Гемор конечно, но нужно..
А потом они еще удивляются
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата(IUnknown @ 12.04.2012 13:45) *

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

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


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

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

Сообщение отредактировано: alex457 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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