Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обращение к элементам массива


Автор: neweraser 14.3.2008, 20:00
господа программисты!
мож чуть нетак тему описал, ни как не может дойти до меня обращение с массивами, ситуация у меня такая:
есть массив (двумерный), я записываю в него значения из 2-х листбоксов, делаю я это так
Код

procedure TMainForm.Button1Click(Sender: TObject);
var
  mas: array[1..1000, 1..1000];
  i, j: integer;
begin  
  for i:= 0 to listbox1.Items.Count - 1 do
  Mas[1000, i]:= (listbox1.Items[i]);
  for j:= 0 to listbox2.Items.Count - 1 do
  Mas[j, 1000]:= (listbox2.Items[j]);
end;

вопрос: можно по-другому обращаться к массиву? а то 
Код

Mas[1000, i]:= (listbox1.Items[i]);

как-то страшно выглядит

Автор: bems 14.3.2008, 20:17
Цитата(neweraser @  14.3.2008,  20:00 Найти цитируемый пост)
mas: array[1..1000, 1..1000];
это точно работает?

Автор: ivan219 14.3.2008, 20:20
neweraser, У тебя массив 1000 * 1000 элементв т.е. 1000000 а ты используешь всего 2000 зачем остальные smile 
Да и тип у массива не указал smile 
Код

procedure TMainForm.Button1Click(Sender: TObject);
var
  mas: array[0..1, 0..999] of {Твой тип};
  i, j: integer;
begin  
  for i:= 0 to listbox1.Items.Count - 1 do
   Mas[0, i]:= (listbox1.Items[i]);
  for j:= 0 to listbox2.Items.Count - 1 do
   Mas[1, j]:= (listbox2.Items[j]);
end;

P.S. но лучше всего использовать данамический массив.

Автор: neweraser 14.3.2008, 21:13
тип массива забыл дописать string  smile , так вроде работает, у меня в i записываются размеры файлов, а в j пути к ним. а это точно будет работать
Цитата(ivan219 @  14.3.2008,  20:20 Найти цитируемый пост)
mas: array[0..1, 0..999]
?

Автор: ivan219 14.3.2008, 21:35
Цитата(neweraser @  14.3.2008,  21:13 Найти цитируемый пост)
это точно будет работать

Я лишь подправил твой! Алгоритм.
Но работать будет smile 

Автор: ivan219 14.3.2008, 21:51
Цитата(neweraser @  14.3.2008,  21:13 Найти цитируемый пост)
у меня в i записываются размеры файлов, а в j пути к ним.

Если они одинакового размера т.е. число размеров файлов = числу путей к этим файлам то можно и так:
Код

procedure TMainForm.Button1Click(Sender: TObject);
var
  mas: array[0..1, 0..999] of String;
  i: integer;
begin  
 {При условии что ListBox1.Items.Count = ListBox2.Items.Count }
 if ListBox1.Items.Count <= 1000 then
  for I := 0 to listbox1.Items.Count - 1 do
   begin
    Mas[0, I]:= (listbox1.Items[I]);
    Mas[1, I]:= (listbox2.Items[I]);
   end;
end;


Добавлено через 2 минуты и 57 секунд
P.S.  mas это локальная переменная и по завершению процедуры Button1Click она исчезнет так что если тебе нужен кней постоянный доступ зделай её глобальной.
Код

var
  Form1: TForm;
  mas: .....

Автор: Albinos_x 14.3.2008, 22:16
Цитата(neweraser @  14.3.2008,  21:13 Найти цитируемый пост)
?


Цитата(neweraser @  14.3.2008,  20:00 Найти цитируемый пост)
procedure TMainForm.Button1Click(Sender: TObject);var  mas: array[1..1000, 1..1000];  i, j: integer;begin    for i:= 0 to listbox1.Items.Count - 1 do  Mas[1000, i]:= (listbox1.Items[i]);  for j:= 0 to listbox2.Items.Count - 1 do  Mas[j, 1000]:= (listbox2.Items[j]);end;

это про то. что у тебя массив с 1, а обращаешся с 0...

Автор: neweraser 15.3.2008, 01:45
Спасибо!
во всем разобрался и все получается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)