Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Инициализация массива. [D7, XP]


Страницы:   1 2 3 4

Б ©   (2010-05-01 23:23:00) 

Здрасти!

Имеется массив, нужно его при инициализцаии заполнить специфическими константами, не хочется прописывать
типа:


 Arr[1]:= 1;         // Для наглядности взяты числа.
 Arr[2]:= 2;
 Arr[3]:= 3;
 ...........


Вопрос в том, что массив получается глобальным, а надо его запихнуть в XProc, но там проинициализировать в ручную массив нельзя.


Var
 Arr: array [0..2] of LongWord = (1, 2, 3);  // На самом деле, массив гораздо
                                             // больше.
Procedure XProc;
begin
 Arr[1]:= 72;
End;


Lyonux   (2010-05-05 12:49:00) [21]

Простите, что вмешиваюсь в ваших интеллектуальный спор, но не вижу почвы для оного) Самый первый и, я считаю, самый замечательный коментарий:

> Демо ©   (01.05.10 23:39) [1]
> > Б   (01.05.10 23:23) Программно сформировать файл с кодом
> для заполнения массива, хатем воспользоваться {$INCLUDE
> <FileName>}


И сделать на OnCreate процедурку:

var i:byte;
begin
AssignFile(File,'FileName');
reset(File);
i:=1;
While not eof do
begin
read(File,x);
arr[i]:=x;
inc(i);
end;
CloseFile(File);
end;

где arr - массив, который вы заполняете специфическими символами из файла, который можно создать вручную или в  наскоро собранной программке)
Ура?


Anatoly Podgoretsky   (2010-05-05 08:56:00) [22]


> Лишь бы ограничение Дельфи на длину литерала не мешала.

Не мешает тем, кто слышал про знак плюс.


Германн   (2010-05-05 02:36:00) [23]

Кстати. Даже если ты не знаешь термина "литерал", не пугайся.


Германн   (2010-05-05 02:01:00) [24]


> Не правда ли лучше это сделать 1-2 строками, вылезающими
> за поле видимости редактора кода, конечно?

a[1]:=17;a[2]:=30;a[3]:=45; ...

Можно и в одну строчку вместить раз тебя не пугает вылезание за "поле видимости редактора".
Лишь бы ограничение Дельфи на длину литерала не мешала.


Amoeba_   (2010-05-04 23:49:00) [25]


> Сократить код, чтобы в глаза не бросалось тупое заполнение
> массива на весь модуль...

Я плакалЪ!

P.S. Вынеси объявление этого массива и код его заполнения в отдельный модуль и болльше его никогда не открывай в редакторе. И тогда "тупое заполнение массива на весь модуль" не будет бросаться в глаза.


Anatoly Podgoretsky   (2010-05-04 22:36:00) [26]

Так тебе шашечки.


Б   (2010-05-04 22:15:00) [27]


> Anatoly Podgoretsky ©   (04.05.10 19:49) [35]


> А не надо прогрессии, так почему все таки нельзя
>
> a[1] :=17
> a[2] :=30


Опять 25...
В этом-то и заключается вопрос. Сократить код, чтобы в глаза не бросалось тупое заполнение массива на весь модуль...
Не правда ли лучше это сделать 1-2 строками, вылезающими за поле видимости редактора кода, конечно?


Anatoly Podgoretsky   (2010-05-04 19:49:00) [28]

> Б  (04.05.2010 17:26:32)  [32]

А не надо прогрессии, так почему все таки нельзя

a[1] :=17
a[2] :=30

Я уже не говорю об других методах.

a[i] := b[i]


Б   (2010-05-04 18:24:00) [29]


> Sha ©   (04.05.10 18:08) [33]


Об этом уже предупредили:
Игорь Шевченко ©   (02.05.10 23:45) [16]
Но т.к. процедура вызывается всего 1 раз, то не страшно. ;)


Sha   (2010-05-04 18:08:00) [30]

>> Что есть инициализация массива?
> Заполнение массива НЕ в begin..end.

Ясно. Однако имей в виду, что не все могут так считать.

> в разделе var, но получается только для глобального массива,
> посоветовали либо в разделе const с директивой {$J+-} - всё получилось

Если ты думаешь, что при каждом входе в твою процедуру с {$J+-}
элементам массива будут присваиваться указанные значения,
то ты ошибаешься.

Когда говорят об инициализации переменной, подразумевают,
что ее значение при работе программы может измениться.
В противном случае это просто константа, возможно типизированная.

Так вот, если ты меняешь значения элементов своего массива в процедуре,
но при каждом входе в нее тебе нужны одни и те же начальные значения
элементов массива, приготовься к сюрпризам.


Б   (2010-05-04 17:26:00) [31]


> Sha ©   (04.05.10 14:55) [30]


> Что есть инициализация массива?


Заполнение массива НЕ в begin..end.  Т.е. в разделе var, но получается только для глобального массива, посоветовали либо в разделе const с директивой {$J+-} - всё получилось.


> Anatoly Podgoretsky ©   (04.05.10 15:12) [31]


> И почему нельзя руками, ладно допустим, тогда пусть не руками
> инициализирует, а программно.


Заполнение массива циклом не прогрессия. Об этом я уже сказал.

> Темнит он что то и про задачу не хочет рассказывать

Для FSAA - её ма ё, сказано же было уже.


Anatoly Podgoretsky   (2010-05-04 15:12:00) [32]

> Sha  (04.05.2010 14:55:30)  [30]

И почему нельзя руками, ладно допустим, тогда пусть не руками инициализирует, а программно.
Темнит он что то и про задачу не хочет рассказывать


Sha   (2010-05-04 14:55:00) [33]

> Б
> ...нужно его при инициализцаии заполнить специфическими константами...
> ...но там проинициализировать в ручную массив нельзя...

Что есть инициализация массива?


Б   (2010-05-04 14:22:00) [34]


> Германн ©   (04.05.10 01:45) [28]
>
> > Иниц. внутри процедуры как const, т.е. локально? Ну так
>
> > это сделано.
>
> Теперь уже и задача X не понятна. Да и Y тоже :(


Да я уже и не сомневался. ;D


Германн   (2010-05-04 01:45:00) [35]


> Иниц. внутри процедуры как const, т.е. локально? Ну так
> это сделано.

Теперь уже и задача X не понятна. Да и Y тоже :(


Б   (2010-05-03 18:23:00) [36]


> sniknik ©   (03.05.10 18:05) [26]


Про константы сказано в самом вопросе.
Массив нужно запихать в процедуру FSAA,  он только там и используется.  Чтобы глаза не мозолил.

> заполняется в инициализации он легко
Иниц. внутри процедуры как const, т.е. локально? Ну так это сделано.


sniknik   (2010-05-03 18:05:00) [37]

> FSAA. Там нужно передавать большой заполненный константамимассив аттрибутов.
тогда зачем изменять его в процедуре? константами значит константами, тут вообще проблем нет, заполняется в инициализации он легко, и неважно глобальный или локальный.


Б   (2010-05-03 17:47:00) [38]

Удалено модератором
Примечание: Выражения выбираем, не в пивной


Демо   (2010-05-03 16:21:00) [39]


> Anatoly Podgoretsky ©   (03.05.10 10:53) [23]
> Это фоби


Да лень скорее.


Anatoly Podgoretsky   (2010-05-03 10:53:00) [40]

Это фобия


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо