Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2013, 19:39   #1
Sёker
Пользователь
 
Регистрация: 30.09.2011
Сообщений: 27
По умолчанию Список записей

Пытаюсь сформировать список записей, каждая из которых содержит длину одномерного массива и сам массив. Получается не то, что я ожидаю. Прошу, укажите мне на ошибку.
Вот такой код:
Код:
  TArray = array of Integer;
  TRec = ^PRec;
  PRec = record
    Leng: Integer;
    M:TArray;
    end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,Len:Integer;
RecList:TList;
Rec:TRec;
s:String;
begin
Memo1.Clear;
RecList:=TList.Create;
  new(Rec);
try
for i:=0 to 9 do
  begin

  Rec.Leng:=i+1;
  SetLength(Rec.M,Rec.Leng);
   for j:=0 to Rec.Leng-1 do
     Rec.M[j]:=j+10*i;
  RecList.Add(Rec);

  end;

for i:=0 to RecList.Count-1 do
  begin

  Rec:=RecList.Items[i];
  s:='';
  for j:=0 to Rec.Leng-1 do
    s:=s+IntToStr(Rec.M[j])+' ';
  Memo1.Lines.Add(s);

  end;

finally
RecList.Free;
end;
Rec.M:=Nil;
  dispose(Rec);
end;
Вот, что имею в Memo1:
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99
90 91 92 93 94 95 96 97 98 99

Хотел получить:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

Последний раз редактировалось Sёker; 13.06.2013 в 19:42.
Sёker вне форума Ответить с цитированием
Старый 13.06.2013, 21:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Хотел получить
Здесь кто-нибудь понял как автор это получил?
Цитата:
каждая из которых содержит длину одномерного массива и сам массив
90 - длина
91 92 93 94 95 96 97 98 99 - сам массив.

Я чего-то не понимаю?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2013, 22:12   #3
Sёker
Пользователь
 
Регистрация: 30.09.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Здесь кто-нибудь понял как автор это получил?

90 - длина
91 92 93 94 95 96 97 98 99 - сам массив.

Я чего-то не понимаю?
Почему 90? максимальная длина на последнем шаге 10. А вообще каюсь, это я начинал пробовать разные варианты, хотя, но результат результат тот-же. А изначально, делал вот так:
Код:
for i:=0 to 9 do
  begin
  Rec.Leng:=10;
  SetLength(Rec.M,Rec.Leng);
Догоняю, что создал список ссылок на одну и ту же запись. Но как тогда получить желаемое:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
Sёker вне форума Ответить с цитированием
Старый 13.06.2013, 23:57   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А может вы исходную задачу опишите?
Человек_Борща вне форума Ответить с цитированием
Старый 14.06.2013, 10:11   #5
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Вы один раз выделяете область памяти под Rec и потом в цикле переписываете одну и туже запись (область памяти) добавляя в список ссылку на одну и туже запись в итоге у вас в tlist список из 10 ссылок на одну и туже запись.
То бишь у Вас должно быть 10 вызовов процедуры New а не одна
astecenko вне форума Ответить с цитированием
Старый 14.06.2013, 15:30   #6
Sёker
Пользователь
 
Регистрация: 30.09.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
Вы один раз выделяете область памяти под Rec и потом в цикле переписываете одну и туже запись (область памяти) добавляя в список ссылку на одну и туже запись в итоге у вас в tlist список из 10 ссылок на одну и туже запись.
То бишь у Вас должно быть 10 вызовов процедуры New а не одна
Уже пробовал поместить процедуру New в тело цикла, но и про dispose не забыл. Произошла ошибка. Сейчас всё работает. Огромное вам спасибо за то, что поняли мою просьбу (которая была ясно описана в моём стартовом сообщении). И, особенно, благодарю вас за помощь)
Sёker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать связанный список из записей, содержащих сведения о жильцах (№ квартиры, фамилия, количество проживающих), реализовать о Шархан Паскаль, Turbo Pascal, PascalABC.NET 2 07.04.2013 09:45
Создать массив записей в соответствии с заданной структурой. Количество записей не больше 10. zulja Паскаль, Turbo Pascal, PascalABC.NET 0 21.05.2012 07:50
Добавление записей через выпадающий список OldMajor Microsoft Office Excel 9 23.11.2011 14:19
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29
Список последних записей ГОСЕАН БД в Delphi 9 10.12.2007 19:46