Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Списки 
:(
    Опции темы
ruslandlion
Дата 21.12.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Уважаемые программистыю Я уже выучил 8 глав учебника по Delphi и все было хорошо пока не наткнулся на тему списки. Помогите пожалуста разобраться с этой темой. Заранее спасибо.
PM MAIL   Вверх
Albinos_x
Дата 21.12.2006, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



А что непонятно-то с этой темой?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Sunvas
Дата 21.12.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 7
Всего: 89



Цитата(ruslandlion @  21.12.2006,  20:24 Найти цитируемый пост)
Помогите пожалуста разобраться с этой темой. Заранее спасибо.

 smile  smile Сканируешь учебник (или в каком он там виде) и ложишь на форум. Мы тебе поможем найти место опечатки. Бы этого могу только посоветовать что с этой книгой делать дальше...  smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Guedda
Дата 21.12.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 6
Всего: 78



Код

type
  A = record
    b : string;
    c : char;
    d : Integer;
  end;

var
  E : A;

begin
  E.b := 'Hello';
  E.c := 'A';
  E.d := 123;

  ShowMessage(E.b);
  Sum := 123 + E.d;
end;


Этим кодом можно показать 80% возможностей списков. Указатели не буду трогать, так как тебе ещё рано их знать smile


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
aktuba
Дата 22.12.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Guedda - мне кажется, ты его не понял. Вероятно, он дошел в учебнике до главы о TList.

Вот пример для TList:

Код

var 
  List: tList; 
  Item: pSomeType; 
  I: Integer; 
begin 
{ Создаем список } 
  List := tList.Create; 
{ Пишем данные для списка } 
  for I := 1 to SpinEdit1.Value do 
    begin 
{ Распределяем уникальный экземпляр данных } 
      New(Item); 
      Item^ := I; 
      List.Add(Item); 
    end; 
{ Читаем данные из списка - базовый индекс списка 0, поэтому вычитаем из I единицу } 
  for I := SpinEdit1.Value downto 1 do 
    ListBox1.Items.Add('Элемент ' + 
      IntToStr(pSomeType(List.Items[I - 1])^)); 
{ Освобождаем лист } 
  for I := 1 to SpinEdit1.Value do 
    Dispose(List.Items[I - 1]); 
  List.Free;



--------------------
user posted image
PM MAIL WWW Skype   Вверх
Strell
Дата 22.12.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.12.2006

Репутация: нет
Всего: 1



А вот если надо с указателями:
Код

type    
  A = record    
    b : string;    
    c : char;    
    d : Integer;    
  end;    
PointerToA = ^A;

var P: PointerToA;

begin
  P := GetMemory(sizeof(A));
  P.b := 'sdsd';
  P.c := chr(30);
  P.d := 22;
  ShowMEssage(P.b);
  FreeMemory(P);
end;

smile
PM MAIL   Вверх
ruslandlion
Дата 22.12.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Вот прекладываемый код к книге[quote]


Код

unit dlist1_; interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit; // фамилия 
Edit2: TEdit; // имя 
Button1: TButton; // кнопка Добавить 
Button2: TButton; // кнопка Показать 
procedure ButtonlClick(Sender: TObject);
procedure Button2Click(Sender: TObject); 
private
{ Private declarations } public
{ Public declarations } 
end;

var
Form1: TForm1;

implementation


{$R *.DFM)


type

TPStudent=^TStudent; // указатель на тип TStudent 


TStudent = record
f_name:string[20]; // фамилия 
l_name: string[20]; // имя 
next: TPStudent; // следующий элемент списка 
end;


var

head: TPStudent; // начало (голова) списка 

// добавить элемент в начало списка 
procedure TForml.Button1Click(Sender: TObject);
var
curr: TPStudent; // новый элемент списка 
begin
new(curr); // выделить память для элемента списка 
curr^.f_name := Edit1.Text;
curr^.1_пате := Edit2.Text;

// добавление в начало списка 
curr^.next := head; head := curr;
// очистить поля ввода 
Edit1.text:=''; Edit2.text: = " ; 
end;

// вывести список 

procedure TForml.Button2Click(Sender: TObject); 
var
curr: TPStudent; // текущий элемент списка 
n:integer; // длина (кол-во элементов) списка 
st:string; // строковое представление списка 
begin 
n := 0; st := '';
curr := head; // указатель на первый элемент списка 

while curr <> NIL do begin
n := n + 1;

st := st + curr^.f_name + ' ' + curr^.1_name +#13; curr := curr^.next; 

// указатель на следующий элемент end;

if n <> 0
then ShowMessage('Список:' + #13 + st)
else ShowMessage('В списке нет элементов.');

end; 

end.




Это сообщение отредактировал(а) alexeis1 - 22.12.2006, 22:41
PM MAIL   Вверх
Beltar
Дата 22.12.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: нет
Всего: 7



2 Ruslandion:

На форуме есть тег "Код", заключай свой код в него, а то читать без подсветки мучение.

Код

var s:String;


На меня прям ностальгия нахлынула, я когда в инсте в BP 7 разбирался со связными списками впервые умудрился своей прогой подвесить комп. 2 Раза. smile

Просто объявляется указатель на элемент списка.
Объявляется сам элемент и одно поле в нем является указателем на следующий, а можно еще и поле с указателем на предыдущий (двухсвязный список) или даже несколько указателей (тогда получится дерево). Адрес первого элемента запоминается. Из его поля с указателем можно получить адрес второго и т. д. пока указатель следующего не nil.
В такой список можно очень быстро вставлять новые элементы, или удалять существующие, т. к. в отличие от массива не надо заново выделять память и копировать туда весь массив, но поиск в связном медленнее чем в массиве.

Кстати, у меня сейчас на столе тоже лежит учебник по Delphi. В. Фаронов "Создание компонентов Delphi" smile Глава 8 "Создание методов". А 9-я "Создание событий". smile


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Matematik
Дата 22.12.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 1
Всего: 50



И что?
 smile 
Цитата(Albinos_x @  21.12.2006,  21:14 Найти цитируемый пост)
А что непонятно-то с этой темой? 


PM MAIL WWW ICQ   Вверх
ruslandlion
Дата 22.12.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2006

Репутация: нет
Всего: нет



Спасибо Beltar что объяснил мне что да как. Я ещё не во всё въехал из этой темы. В учебнике вообще нет никакого определения списков там сразу даётся голый код и понимай как хочешь. Ты не мог бы сказать что нибудь по определению понятия список?
PM MAIL   Вверх
V.A.KeRneL
  Дата 30.12.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 7
Всего: 14



http://ru.wikipedia.org/wiki/Список_(информатика)
http://en.wikipedia.org/wiki/List_(computing)


Это сообщение отредактировал(а) V_A_KeRneL - 30.12.2006, 01:31


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0526 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.