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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2014, 15:11   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию объявление и присвоение значения массивам

Мне необходимо создать массив из других массивов с разной длинной и сразу его заполнить (значения массива никогда не будут изменяться)

Можно создать отдельные массивы и сразу их заполнить вот так :
Код:
aa: array[1..10] of integer = (0,0,0,0,0,0,0,0,0,0);
Но мне необходимо чтобы множество таких массивов разной длинны
Что то типо такого:
Код:
aa[1]=(0,0,0,0,0,0,0,0,0,0);
aa[2]=(0,0,0,0,0,0,0,0,0,0,8,9,6,5);
и так далее.
Число массив также известно.
Как обяъвить такой массив, если вообще это возможно на delphi 7
Illusiony вне форума Ответить с цитированием
Старый 25.12.2014, 15:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Создать динамически
Код:
var a: array of array of Integer;
    i: Integer;
...
  SetLength(a,2);
  SetLength(a[0],3);
  for i:=0 to High(a[0]) do a[0,i]:=i;
  SetLength(a[1],5);
  for i:=0 to High(a[1]) do a[1,i]:=10+i;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.12.2014, 15:33   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Создать динамически
Код:
var a: array of array of Integer;
    i: Integer;
...
  SetLength(a,2);
  SetLength(a[0],3);
  for i:=0 to High(a[0]) do a[0,i]:=i;
  SetLength(a[1],5);
  for i:=0 to High(a[1]) do a[1,i]:=10+i;
Да, но важно чтобы можно было заполнить массив одной строчкой примерно такого вида, есть ли такой способ? или ручками каждый элемент отдельно вводить?:
Код:
(0,0,0,0,0,0,0,0,0,0,8,9,6,5);
число значений отдельных массив может составлять порядка сотни .

Последний раз редактировалось Illusiony; 25.12.2014 в 15:37.
Illusiony вне форума Ответить с цитированием
Старый 25.12.2014, 15:54   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Нули можно и одной строчкой циклом.
Разные значения? Держи во внешнем файле или базе и загружай в массивы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.12.2014, 16:06   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Нет там без закономерностей значения до от 0 до приблизительно 700. Не внешний файл это тоже самое что в коде, еще больше кода и так костылей хватает.
То есть более простых способов не существует?

И вообще в delphi 7 нельзя присваивать значения массивам в виде например в обработчике открытия формы
Код:
 
aa:=(0,0,0,0,0,0,0,0,0,0,8,9,6,5);
а только
Код:
aa[1]=0;
aa[2]=4;
aa[3]=56;
?

Последний раз редактировалось Illusiony; 25.12.2014 в 16:54.
Illusiony вне форума Ответить с цитированием
Старый 25.12.2014, 16:57   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
type
  am =array of integer;

var a: array[1..3] of am;

  procedure SetSubArray(i: integer; s: array of integer);
  var
    j: integer;
  begin
    Setlength(a[i], length(s));
    for j:=0 to length(a[i])-1 do
      a[i][j]:=s[j];
  end;
begin
  SetSubArray(1, [1,2,3,4] );
  SetSubArray(2, [1,3,6] );
  SetSubArray(3, [6, 8] );
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.12.2014, 17:12   #7
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

evg_m,
Большое спасибо, то что надо.
Еще раз хочу выразить благодарность форуму и его участникам. Быстро отвечаете и по делу. Без вас никак , если не учился на программиста и нужно что конкретное.

Возникла необходимость доступа к SetSubArray из модальной формы и изменения значения массивов во время работы программы
Код:
type am =array of integer;
var a: array[1..3] of am;
Как сделать глобальными?
Код:
var a: array[1..3] of am;
Можно разместить в public, но как до этого определить
Код:
 type am =array of integer;
?

Последний раз редактировалось Stilet; 31.12.2014 в 08:04.
Illusiony вне форума Ответить с цитированием
Старый 29.12.2014, 21:44   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Код:
type am =array of integer;
Такое объявление может располагаться в любом месте модуля после слова interface и до последнего end с точкой, либо до секции инициализации, если она есть в паскалевском или дельфийском виде.

Последний раз редактировалось northener; 29.12.2014 в 21:47.
northener вне форума Ответить с цитированием
Старый 30.12.2014, 20:51   #9
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Код:
type am =array of integer;
Такое объявление может располагаться в любом месте модуля после слова interface и до последнего end с точкой, либо до секции инициализации, если она есть в паскалевском или дельфийском виде.
Спасибо , но у меня сложилась следующая ситуация:

В данный момент
Код:
var a: array[1..3] of am;
объявлено сдесь
Код:
Var
Form1:TForm1
var a: array[1..3] of am;
Далее в процедуре открытия формы я с помощью SetSubArray создаю нужные массивы.
В модальной форме читаю эти массивы, все работает.

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

Но я не могу получить доступ к процедуре SetSubArray из модальной формы.

Задаю так :
Код:
Form1.SetSubArray(1, [1,2,3,4] );
Я так понимаю что раз я объявляю
Код:
var a: array[1..3] of am;
значит количество массивов я уже не могу поменять в процессе выполнения программы?

Остается только доступ к имеющимся массивам.

Последний раз редактировалось Illusiony; 30.12.2014 в 21:14.
Illusiony вне форума Ответить с цитированием
Старый 04.01.2015, 16:42   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Цитата:
Сообщение от Illusiony
значит количество массивов я уже не могу поменять в процессе выполнения программы?
так ведь
Цитата:
Сообщение от Illusiony Посмотреть сообщение
...(значения массива никогда не будут изменяться)
...
Число массив также известно.
...


------------------------------------------------------------------------
Вообще, хотя evg_m и указал на хороший способ, но если 'значения массива никогда не будут изменяться' то лучше константы не придумаешь. Почему нельзя сделать так
Код:
const
  aa_1: array [1..10] of integer = (0,0,0,0,0,0,0,0,0,0);
  aa_2: array [1..14] of integer = (0,0,0,0,0,0,0,0,0,0,8,9,6,5);
------------------------------------------------------------------------
Цитата:
Сообщение от Illusiony
число значений отдельных массив может составлять порядка сотни
Я как-то еще в универе для курсовой делал программку. Нужно было несколько таблиц из СНиП'ов и ГОСТ'ов забить в двухмерные массивы. Для прикола написал программу, которая из текстового файла делала Паскалевский модуль. Имя массива - это имя файла. Значения из
Цитата:
Сообщение от Tabl_1.txt
1 2 3 4 5
11 22 33 44 55
преобразовывались в
Код:
Tabl_1: array [1..2,1..5] of integer = ((1,2,3,4,5),(11,22,33,44,55));
------------------------------------------------------------------------
Но раз вам нужно изменять количество и содержимое массивов, то
Цитата:
Сообщение от Аватар Посмотреть сообщение
...Держи во внешнем файле или базе и загружай в массивы
А если серьезно то: БД, БД и только БД.
Вы, надеюсь, там не сложные математические выражения с матрицами вычисляете.

Последний раз редактировалось Sibedir; 04.01.2015 в 16:46.
Sibedir вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение значения. ImmortalAlexSan Общие вопросы .NET 4 03.10.2012 11:48
Присвоение значения полю IraPr Microsoft Office Access 5 29.12.2010 06:45
DateTimePicker - присвоение значения Dux Компоненты Delphi 2 14.09.2010 18:06
присвоение значения Stjernen Microsoft Office Excel 5 04.01.2010 14:44
Объявление значения SStone Microsoft Office Excel 4 06.12.2008 19:15