Размерность массива

 

Подскажите пожалуйста как правильно определить размерность массива, если не известно изначально, сколько в массиве будет строк. Знаю, что можно через ArrayResize, но как это сделать правильно?
Например в следующей функции при определении размерности массива BCC_J[MaxI,8]. Я взял размерность MaxI, а на самом деле размер массива получился меньше.

int ReadArrayData_Buy()
{
  Comment("Читаем данные из массива Buy");
  for (i=0; i<MaxI; i++)
  {
    Bar_1=BCC[i,1]; Bar_2=BCC[i,2]; Bar_3=BCC[i,3]; P_L=BCC[i,4]; P=0; L=0; Sum=1;
    if (P_L==1) P=1; if (P_L==-1) L=1;
    for (j=0; j<MaxI; j++)
    {
      if (i==j) continue;
      if (Bar_1==BCC[j,1] && Bar_2==BCC[j,2] && Bar_3==BCC[j,3] && BCC[j,4]==1) {Sum++; P++;}
      if (Bar_1==BCC[j,1] && Bar_2==BCC[j,2] && Bar_3==BCC[j,3] && BCC[j,4]==-1) {Sum++; L++;}
    }
    BCC_J[i,0]=i; BCC_J[i,1]=Bar_1; BCC_J[i,2]=Bar_2; BCC_J[i,3]=Bar_3; BCC_J[i,4]=P_L; BCC_J[i,5]=Sum; BCC_J[i,6]=P; BCC_J[i,7]=L; 
    BCC_J[i,8]=MathRound(P*100/Sum);
    Comment("Читаем Buy данные из массива и сравниваем с данными. Завершено: "+DoubleToStr(i*100.0/MaxI, 1)+"%"); 
  }
  Comment("Завершено ReadArrayData_Buy");	
  return(0);
}
 
Alfa писал(а) >>

Подскажите пожалуйста как правильно определить размерность массива, если не известно изначально, сколько в массиве будет строк. Знаю, что можно через ArrayResize, но как это сделать правильно?
Например в следующей функции при определении размерности массива BCC_J[MaxI,8]. Я взял размерность MaxI, а на самом деле размер массива получился меньше.

    int m; m=ArrayRange(Matr, 0);// количество строк
    int n; n=ArrayRange(Matr, 1);// количество столбцов
 

Prival, спасибо!

Правильно ли я понял, что теперь моя функция должна выглядеть так:

int ReadArrayData_Buy()
{
  Comment("Читаем данные из массива Buy");
  for (i=0; i<MaxI; i++)
  {
    Bar_1=BCC[i,1]; Bar_2=BCC[i,2]; Bar_3=BCC[i,3]; P_L=BCC[i,4]; P=0; L=0; Sum=1;
    if (P_L==1) P=1; if (P_L==-1) L=1;
    for (j=0; j<MaxI; j++)
    {
      if (i==j) continue;
      if (Bar_1==BCC[j,1] && Bar_2==BCC[j,2] && Bar_3==BCC[j,3] && BCC[j,4]==1) {Sum++; P++;}
      if (Bar_1==BCC[j,1] && Bar_2==BCC[j,2] && Bar_3==BCC[j,3] && BCC[j,4]==-1) {Sum++; L++;}
    }
    int m; m=ArrayRange(BCC_J,0);// количество строк
    ArrayResize(BCC_J,m++); // новое количество строк
    BCC_J[i,0]=i; BCC_J[i,1]=Bar_1; BCC_J[i,2]=Bar_2; BCC_J[i,3]=Bar_3; BCC_J[i,4]=P_L; BCC_J[i,5]=Sum; BCC_J[i,6]=P; BCC_J[i,7]=L; 
    BCC_J[i,8]=MathRound(P*100/Sum);
    Comment("Читаем Buy данные из массива и сравниваем с данными. Завершено: "+DoubleToStr(i*100.0/MaxI, 1)+"%"); 
  }
  Comment("Завершено ReadArrayData_Buy");	
  return(0);
}
Типа сосчитал количество строк в массиве и перед записью новой строки, добавил одну строку.
 

Насколько я знаю нельзя изменить количество строк в массиве. Оно задаётся жестко при объявлении.

ArrayResize меняет размер только первого измерения.

int m=ArrayRange(Matr,0);// количество элементов в строке (первое измерение)
int n=ArrayRange(Matr,1);// количество строк (второе измерение)
 
Xupypr >>:

Насколько я знаю нельзя изменить количество строк в массиве. Оно задаётся жестко при объявлении.

ArrayResize меняет размер только первого измерения.

А может наоборот, нельзя изменить количество столбцов? Вот как выглядит пример использования изменения размерности. Мне тоже нужно изменить ту размерность.

 
Alfa писал(а) >>

А может наоборот, нельзя изменить количество столбцов.

Как расположить.

Можно изменить только первую размерность.

 
Спасибо всем! С размерностью разобрался.
Причина обращения: