Подскажите про массивы - страница 2

 
Andrei Fandeev:
Я Вам дал ссылку на очень понятное изложение понятия Массивы, и как с ними работать. Тут ведь не важно МТ4 или МТ5 для понимания сути.
Вам же дают ключевую подсказку - Скопировать массив в промежуточный, сдвиньте его, в освободившуюся клетку добавьте новое значение. Скопируйте обратно.
И каким образом копировать и сдвигать тоже подсказали. Вариантов несколько. Через Копи, через Цикл перебором, и тд

боже, зачем тут промежуточный?

 
Alexey Volchanskiy:

боже, зачем тут промежуточный?


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

 
Alexey Volchanskiy:

боже, зачем тут промежуточный?


Или имел в виду такой вариант:

//+------------------------------------------------------------------+
//|                                                  Array shift.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int array[5]={0,1,2,3,4};
   ArrayPrint(array);
   for(int i=0;i<5-1;i++)
      array[i]=array[i+1];
   ArrayPrint(array);
   array[4]=8;
   ArrayPrint(array);
  }
//+------------------------------------------------------------------+

и результат работы:

2017.12.01 11:18:12.867 0 1 2 3 4
2017.12.01 11:18:12.867 1 2 3 4 4
2017.12.01 11:18:12.867 1 2 3 4 8

ds

Файлы:
 

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

пс. а лучше возьмите себе функцию (как в МТ4) iTime

 
Alexey Volchanskiy:

боже, зачем тут промежуточный?


так быстрее и проще.

 
Vladimir Karputov:

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


Да с какой стати? В данном случае все до боли примитивно. См. мой код, фактически, нам надо сдвинуть массив влево на 1 и в элемент 9 записать новое значение.

Где тут неопределенность-то?

double dt[10];

void ShiftAndPutData(double data)
{
   for(int n = 0; n < 9; n++) //shift left
      dt[n] = dt[n+1];
   dt[9] = data;
}
 

Мое мнение, раз человек изучает массивы, надо не функции копирования ему давать, а пусть ручками цикл пишет, чтобы понять суть.

А то потом появляются "эффективные программисты", которым надо выбрать в массиве каждый 3-й элемент, а они плачут, что не могут найти такую функцию )
 
Alexey Volchanskiy:

Да с какой стати? В данном случае все до боли примитивно. См. мой код, фактически, нам надо сдвинуть массив влево на 1 и в элемент 9 записать новое значение.

Где тут неопределенность-то?

Не нужно выкусывать фразу из контекста. Я давал четко ответ про функцию ArrayCopy: при использовании ArrayCopy нельзя копировать массив сам в себя, так как результат такого копированиях будет неопределённый.
 
Taras Slobodyanik:

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

пс. а лучше возьмите себе функцию (как в МТ4) iTime


а с чего вы взяли, что он с барами работает? задача общего плана и не стоит выеденного яйца, но набрала 19 откликов

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

всем срочно начать принимать глицин!

 
Vladimir Karputov:
Не нужно выкусывать фразу из контекста. Я давал четко ответ про функцию ArrayCopy: при использовании ArrayCopy нельзя копировать массив сам в себя, так как результат такого копированиях будет неопределённый.

Ну извини, не протелепатил )))

Vladimir Karputov 2017.12.01 12:12     EN
Alexey Volchanskiy:

боже, зачем тут промежуточный?


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


Причина обращения: