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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2013, 12:58   #1
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию Динамическое изменение имени массивов

Здравствуйте, положим у меня есть несколько равнозначных двухмерных массива, размер который зависит от некоего количества констант:
Код:
const
    H1 = 4;    W1 = 4;
    H2 = 5;    W2 = 5;
    H3 = 6;    W3 = 6;
var
Test1: array[1..H1, 1..W1] of byte;
Test2: array[1..H2, 1..W2] of byte;
Test3: array[1..H3, 1..W3] of byte;
И есть переменная, принимающая значение от 1 до 3, которая опирается на ряд соответствующих параметров(здесь они не важны, поэтому я их опущу).

Так вот, есть функция обрабатывающая данные массивы. Мне нужно, чтобы функция брала соответствующий массив в соответствию со значением переменной. То есть, если что-то равно чему-то, то пер.=1 и т.д и вставляла ее в ключевое имя массива:
Код:
..................................
if Test+(значение переменной от 1 до 3)[row,col] <> i then
..................................
Спасибо...
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 11.07.2013, 13:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?

Код:
const CntAllMas = 3;

const
  H : array[1..CntAllMas] of integer = (4,5,6);
  W : array[1..CntAllMas] of integer = (4,5,6);
var
  AllTests : array[1..CntAllMas] of array of array of byte;
....

var i : integer;
begin
  for i:=1 to CntAllMas do
    SetLength(AllTests[i], H[i], W[i]);
end;
Внимание. Важно! При таком подходе нумерация в массивах AllTests[i] будет от нуля!!!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2013, 14:06   #3
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так устроит?

Код:
const CntAllMas = 3;

const
  H : array[1..CntAllMas] of integer = (4,5,6);
  W : array[1..CntAllMas] of integer = (4,5,6);
var
  AllTests : array[1..CntAllMas] of array of array of byte;
....

var i : integer;
begin
  for i:=1 to CntAllMas do
    SetLength(AllTests[i], H[i], W[i]);
end;
Внимание. Важно! При таком подходе нумерация в массивах AllTests[i] будет от нуля!!!!
Хм, не совсем понятно что к чему. Можно немного поподробнее?

P.S да и не понятно, как в данном коде соблюсти условие выборки. Простой пример:

Код:
var

j:integer;

procedure ololo;
begin
if Form1.N1.Checked = true then begin
    j:=1;
end;
if Form1.N2.Checked = true then begin
    j:=2;
end;
if Form1.N3.Checked = true then begin
    j:=3;
end;
end;

 function Fin: boolean;
var
    r,c: integer;
    i: integer;
begin
    ololo;
    r :=1; c :=1;
    Fin := True;
    for i:=1 to X{зависит от j} do
    begin
       if Test{здесь j}[r,c] <> i then
       begin
            Fin:= False;
            break;
       end;
       if c < Y{зависит от j}
          then inc(c)
       else begin
          c:=1;
          inc(r);
       end;
    end;
end;
Как быть тут?

Последний раз редактировалось ZvEr_HaCkEr; 11.07.2013 в 14:12.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 11.07.2013, 14:32   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как быть тут?
не зная, что и как заполняется в Test и для чего вообще функция Fin, просто повторяя то, что у Вас написано, код можно попробовать переписать так:
Код:
function Fin: boolean;
var
    r,c,i: integer;
begin
    ololo;
    Fin := True;
    i:=1;
    for r:=1 to H[j] do
      for c:=1 to W[j] do begin
         if  AllTests[i][r-1,c-1] <> i then
         begin
            Fin:= False;
            Exit;
         end;
         inc(i);
      end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение имени dll adspro Общие вопросы C/C++ 0 03.03.2012 14:54
Изменение имени файла coNsept Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 06.12.2011 15:27
Изменение имени IdAttachmentFile dolphin705 Работа с сетью в Delphi 0 24.08.2011 19:25
изменение имени файла tiger() C++ Builder 2 21.04.2011 14:21
Динамическое формирование имени переменной... Kvinto Общие вопросы Delphi 9 17.11.2009 17:56