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;


sniknik   (2010-05-03 10:34:00) [41]

> то нафиг нужен константный массив.
для упрощения записи только, чтобы не писать кучу
 Arr[1]:= 1;
 Arr[2]:= 2;
 Arr[3]:= 3;
 ...

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

вообще, можно многое, может можно и от массива избавиться... если бы знать "что делается", а не исправлять "как делается".


Anatoly Podgoretsky   (2010-05-03 10:28:00) [42]

> sniknik  (03.05.2010 09:58:20)  [20]

А раз нужно инициализировать, то нафиг нужен константный массив.


sniknik   (2010-05-03 09:58:00) [43]

> Задача X озвучена. Задача Y вроде понятна. А вот задача Z...
вот вот. всегда озвучивают то что они делают, проблемы на этом пути, а вот чего пытаются этим добиться, реальную задачу...

> Но инициализировать заново массив при входе в процедуру всё равно придётся делать ручками.
сложность прям неимоверная... ага
procedure TForm1.Button1Click(Sender: TObject);

 procedure XProc;
 type
   TArr = array [0..2] of LongWord;
 const
   MArr: TArr = (1, 2, 3);
 var
   Arr: TArr;
 begin
    Arr:= MArr;

   Arr[1]:= Arr[1] + 72;
 end;

begin
 XProc;
end;


Германн   (2010-05-03 02:20:00) [44]

Но инициализировать заново массив при входе в процедуру всё равно придётся делать ручками.


Германн   (2010-05-03 02:08:00) [45]

Хотя фиг его знает, что может помочь ОРД.
Задача X озвучена. Задача Y вроде понятна. А вот задача Z...


Германн   (2010-05-03 01:42:00) [46]

Я уже и не помню с какой версии Борланд стал предупреждать о том, что типизированные константы могут более не поддерживаться и их не стоит использовать в новых проектах.


> Б   (02.05.10 19:20) [12]
>
>
> > sniknik ©   (02.05.10 15:45) [11]
>
>
> Да вроде бы нет:
>

Проверь Игорь Шевченко ©   (02.05.10 23:45) [16]

Ответ Демо ©   (01.05.10 23:39) [1] может помочь, если выкинуть из него бред. :)


Игорь Шевченко   (2010-05-02 23:45:00) [47]


> Почему массив становится глобальным? Вроде бы нет.


потому что слово const.

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


sniknik   (2010-05-02 22:20:00) [48]

точно да. в хелпе так написано...


Б   (2010-05-02 20:22:00) [49]

Почему массив становится глобальным? Вроде бы нет.


sniknik   (2010-05-02 20:13:00) [50]

> Да вроде бы нет:
что нет? не смущает?


Б   (2010-05-02 19:20:00) [51]


> sniknik ©   (02.05.10 15:45) [11]


Да вроде бы нет:


Procedure XProc;
{$J+}
Const
 Arr: array [0..2] of LongWord = (1, 2, 3);
{$J-}
begin
 Arr[1]:= 72;
End;


sniknik   (2010-05-02 15:45:00) [52]

> Вопрос в том, что массив получается глобальным
...
> Спасибо!
не смущает, что массив по сути так и остался глобальным?


Б   (2010-05-02 15:08:00) [53]


> sniknik ©   (02.05.10 15:01) [9]


Спасибо!
Хотя сейчас только вспомнил, что константы могут вести себя как переменные.


sniknik   (2010-05-02 15:01:00) [54]

> Блин, столько любителей не по сути вопроса советовать, а то, что они об этом думают.
а сам уверен что ответил "по сути"? это вопросы так задают не то что нужно а то о чем думают нужно.

вариант
procedure TForm1.Button1Click(Sender: TObject);

 {$J+}
 procedure XProc;
 const
   Arr: array [0..2] of LongWord = (1, 2, 3); // На самом деле, массив гораздо
                                              // больше.
 begin
   Arr[1]:= 72;
 end;
 {$J-}

begin
 XProc;
end;


Демо   (2010-05-02 14:37:00) [55]


> Anatoly Podgoretsky ©   (02.05.10 13:38) [6]
> Ну и в чем же ограниченность применения в данном случае?
>



> Так ведь массив заполняется спец. константами, самых разных
> значений,  которые нельзя найти прогрессией в цикле. Об
> этом сказано в комментарии:


О чём и было сказано.

Блин, столько любителей не по сути вопроса советовать, а то, что они об этом думают.


Б   (2010-05-02 14:29:00) [56]


> Германн ©   (02.05.10 02:34) [2]


Дык, инициализировать при объявления массивы в подпрограммах нельзя.


> Vitalts   (02.05.10 10:55) [3]


Так ведь массив заполняется спец. константами, самых разных значений,
 которые нельзя найти прогрессией в цикле. Об этом сказано в комментарии:

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


Anatoly Podgoretsky   (2010-05-02 13:38:00) [57]

Ну и в чем же ограниченность применения в данном случае?


Демо   (2010-05-02 12:50:00) [58]


> Vitalts   (02.05.10 10:55) [3]
> > Так в чём проблема? Или я чего-то не понимаю?Видимо незнание
> автора топика о существовании циклов


Не надо предполагать то, чего не знаешь.
Циклы имеют ограниченное применение.


Vitalts   (2010-05-02 10:59:00) [59]

Б,
http://yandex.ru/yandsearch?text=delphi+%D1%86%D0%B8%D0%BA%D0%BB%D1%8B&clid=14585&lr=179


Vitalts   (2010-05-02 10:55:00) [60]


> Так в чём проблема? Или я чего-то не понимаю?

Видимо незнание автора топика о существовании циклов


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

Наверх

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