![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Инициализация массива. [D7, XP]
Б © (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]Это фобия