Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Запустили испанскую и португальскую версии сайта. Оцени сам!
roman epifanov
579
roman epifanov 2012.01.29 10:50 

Сложная задача.. сам себе мозги кручу. Делаю эксперт по паттернам свечным. И надо создать массив данных, где строка будет принимать значения тела свечи от 1 до 5. А два следующих столбца тени верхняя тень 0.1 до 100 и нижняя тень от 0.1 до 100 Вид массива должен получиться такой massiv[][][], если я не ошибаюсь

Как расчитать размерность и как заполнить его ? Сколько там должно быть элементов. Это не сложно, но с трехмерными массивами мой мозг сел за ночь бессоницы ... теперь я вообще ничего не соображаю

Dmitry Fedoseev
41247
Dmitry Fedoseev 2012.01.29 11:04  
Двухмерный массив нужен. Обычная таблица. Первое измерение это строки, второе - столбцы.
roman epifanov
579
roman epifanov 2012.01.29 17:25  
в двумерный три значения не укладываются. с размерностью я разобрался.. но осталось цикл правильно написать.
Рустам
3604
Рустам 2012.01.29 17:43  

Глупости, двухмерного массива вполне хватит: arr[строки][столбцы]

Да и зачем вам массив - вы же не вручную его собираетесь заполнять ?

рассчитывайте коэффициенты на лету и применяйте.

Anatoli Kazharski
52006
Anatoli Kazharski 2012.01.29 17:46  
openlive:
в двумерный три значения не укладываются. с размерностью я разобрался.. но осталось цикл правильно написать.

А покажите, как Вы пытаетесь заполнить 3-ёх мерный массив? Или просто 3 массива создайте и в одном цикле по индексу проверяйте значения.
Комбинатор
15650
Комбинатор 2012.01.29 18:26  

Размерность 5*1000*1000

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

double D1Min = 1;
double D1Max = 5;
#define D1RANGE 5

double D2Min = 0.1;
double D2Max = 100;
#define D2RANGE 1000

double D3Min = 0.1;
double D3Max = 100;
#define D3RANGE 1000

double arr[D1RANGE][D2RANGE][D3RANGE];

double Get(double v1, double v2, double v3)
{
   int i1 = (v1 - D1Min)/(D1Max - D1Min)*(D1RANGE - 0.5);
   int i2 = (v2 - D2Min)/(D2Max - D2Min)*(D1RANGE - 0.5);
   int i3 = (v3 - D3Min)/(D3Max - D3Min)*(D1RANGE - 0.5);
   
   // assert (i1 >= 0 && i1 < D1RANGE);
   // assert (i2 >= 0 && i2 < D2RANGE);
   // assert (i3 >= 0 && i3 < D3RANGE);
   
   return (arr[i1][i2][i3]);
}

int start()
{
   ArrayInitialize(arr, 0);
   
   //... заполняем массив статистикой
   
   Print(Get(1,0.1,0.1));
}
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий