Помогите с массивами.

 
Где найти статьи по работе с массивами?
Rosh кажется что-то писал на эту тему, но найти не могу.

Всем спасибо.
 
qee:
Где найти статьи по работе с массивами?
Rosh кажется что-то писал на эту тему, но найти не могу.

Всем спасибо.
https://docs.mql4.com/ru/array
 
dmitriy писал (а):
qee:
Где найти статьи по работе с массивами?
Rosh кажется что-то писал на эту тему, но найти не могу.

Всем спасибо.
https://docs.mql4.com/ru/array


Интересуют примеры.
 
Тогда ищи в codebase. Там большинство серьёзных проектов - работа с массивами.
 
qee:
Где найти статьи по работе с массивами?
Rosh кажется что-то писал на эту тему, но найти не могу.

Всем спасибо.

Краткий обзор здесь - 'Обзор статей Rosh'а: эксперты в MetaTrader 4' . А так? действительно, много чего в CodeBase . везде, где требуется обрабатывать единообразно большие объемы информации.
 
Rosh писал (а):
qee:
Где найти статьи по работе с массивами?
Rosh кажется что-то писал на эту тему, но найти не могу.

Всем спасибо.

Краткий обзор здесь - 'Обзор статей Rosh'а: эксперты в MetaTrader 4' . А так? действительно, много чего в CodeBase . везде, где требуется обрабатывать единообразно большие объемы информации.

В указанной ссылке, нет самих статей.

   А проблема такая: требуется создать массив произвольной размерности с элементами равными нулю.
 
Создать массив произвольной размерности нельзя. Если массив не инициализирован, то и присвить значения его элементам нельзя.
Смотри https://docs.mql4.com/ru/array

К сожалению, до конца ссылки на форуме Альпари не попрпавили после ребрендинга, вот эта ведет на первую страницу - http://www.alpari-idc.ru/ru/experts/articles/
 

А проблема такая: требуется создать массив произвольной размерности с элементами равными нулю.


  1. Допускаются не более чем четырехмерные массивы. ©Отсюда
  2. Если размерность от 1 до 4-х - видимо, объявлять все возможные варианты. Что-то типа:
    //объявление
    double Arr1[],Arr2[][],Arr3[][][],Arr4[][][][];
     
    //использование
    switch (proizvolnaya_razmernost) {
        case 1: //работаем с Arr1;
                break;
        case 2: //работаем с Arr2;
                break;
        case 3: //работаем с Arr3;
                break;
        case 4: //работаем с Arr4;
                break;
        default: Print("Ничего себе - произвольная размерность!");
    }
  3. Обнулить все элементы - применить ArrayInitialize к каждой нижней размерности массива. Только перед этим - ArrayResize.


 
Rosh писал (а):
Создать массив произвольной размерности нельзя. Если массив не инициализирован, то и присвить значения его элементам нельзя.
Смотри https://docs.mql4.com/ru/array

К сожалению, до конца ссылки на форуме Альпари не попрпавили после ребрендинга, вот эта ведет на первую страницу - http://www.alpari-idc.ru/ru/experts/articles/


За ссылку спасибо - работает.

    А если мы узнаем размер массива, как обнулить все его элементы?
 

Читаем документацию. Чтобы обнулить все элементы массива, необязательно знать его размер.
Есть такая функция ArrayInitialize

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

Например, пусть 0 <= i < L, 0 <= j < M, 0 <= k < N. Тогда:
1-dim: p = i; 0 <= p < L : (псевдо)одномерный массив;
2-dim: p = i + j * L; 0 <= p < L * M : псевдодвумерный массив;
3-dim: p = i + j * L + k * L * M; 0 <= p < L * M * N : псевдотрехмерный массив и т. д.
Для массива более высокой размерности правило легко обобщается по индукции. Доступ можно организовать с использованием вложенных циклов.

Например, пусть задан трехмерный массив Array3Dim[L][M][N]; 0 <= i < L, 0 <= j < M, 0 <= k < N. Обозначим p - индекс соответствующего одномерного массива Array1Dim[L*M*N]. Тогда:
...
for (i = 0; i < L; i++)
{
for (j = 0; j < M; j++)
{
for (k = 0; k < N; k++)
{
p = i + j * L + k * L * M;
// ToDo: Array1Dim[p] = some_value;
}
}
}
...
Инициализация:
...
dim_size = L * M * N;
ArrayResize(Array1Dim, dim_size);
ArrayInitialize(Array1Dim, init_value);
...

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