[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 370

 

Добрый день!

Подскажите, пожалуйста.....

Indic_mas[]//основной массив

Indic_mas_copi[]// массив, в который копируется основной массив.

n //кол-во элементов в Indic_mas_copi[]

1. Означает ли запись Indic_mas_copi[n]=0, то что мы обнулили все элементы массива?

2. После выполнения определённых операций массив Indic_mas_copi[] изменил значения некоторых элементов,

При следующей итерации повторяется копирование Indic_mas[] в Indic_mas_copi[].

Нужно ли перед этим копированием, чтобы Indic_mas_copi[] был обнулён (или пустой)

или элементы Indic_mas[] автоматически заменят прежние элементы Indic_mas_copi[] ?

 
LOA:

Добрый день!

Подскажите, пожалуйста.....

Indic_mas[]//основной массив

Indic_mas_copi[]// массив, в который копируется основной массив.

n //кол-во элементов в Indic_mas_copi[]

1. Означает ли запись Indic_mas_copi[n]=0, то что мы обнулили все элементы массива?

2. После выполнения определённых операций массив Indic_mas_copi[] изменил значения некоторых элементов,

При следующей итерации повторяется копирование Indic_mas[] в Indic_mas_copi[].

Нужно ли перед этим копированием, чтобы Indic_mas_copi[] был обнулён (или пустой)

или элементы Indic_mas[] автоматически заменят прежние элементы Indic_mas_copi[] ?


1. Если n - это количество элементов в Indic_mas_copi[], то запись Indic_mas_copi[n] - не корректна, так как в этой записи Вы выходите за рамки массива. Не забывайте, что нумерация ячеек массива начинается с нулевой ячейки. Поэтому номер последней ячейки массива, к которой можно обратиться - это n-1

2. Будут заменеы. Проверьте это скриптом.

 
drknn:


1. Если n - это количество элементов в Indic_mas_copi[], то запись Indic_mas_copi[n] - не корректна, так как в этой записи Вы выходите за рамки массива. Не забывайте, что нумерация ячеек массива начинается с нулевой ячейки. Поэтому номер последней ячейки массива, к которой можно обратиться - это n-1

2. Будут заменеы. Проверьте это скриптом.


Спасибо большое, Владимир!

Тогда чтобы обнулить элементы массива нужно следующее?

double i;
for (i=n-1;i>=0;i--)Indic_mas_copi[i]=0; 
 
LOA:


Спасибо большое, Владимир!

Тогда чтобы обнулить элементы массива нужно следующее?


Нет - это слишком сложно. Есть путь проще.

int ArrayInitialize( double &array[], double value)
Устанавливает все элементы числового массива в одну величину. Возвращает количество инициализированных элементов.

Указываете в скобках имя массива, а вторым параметром ставите ноль. В результате все элементы массива будут обнулены.

 
LOA:


Спасибо большое, Владимир!

Тогда чтобы обнулить элементы массива нужно следующее?

ArrayInitialize(Имя_Массива,0);
 
О... Владимир опередил... :)
 
artmedia70:
ArrayInitialize(Имя_Массива,0);

Тогда уж лучше вот так: https://docs.mql4.com/ru/array/ArrayInitialize - там есть конкретный пример кода
 
drknn:


Нет - это слишком сложно. Есть путь проще.

int ArrayInitialize( double &array[], double value)
Устанавливает все элементы числового массива в одну величину. Возвращает количество инициализированных элементов.

Указываете в скобках имя массива, а вторым параметром ставите ноль. В результате все элементы массива будут обнулены.


Благодарю. Так действительно проще.

Тогда цикл можно использовать при ситуации, когда необходимо обнулить часть элементов?

Или, скажем, через один элемент.

 
LOA:

Добрый день!

Подскажите, пожалуйста.....

Indic_mas[]//основной массив

Indic_mas_copi[]// массив, в который копируется основной массив.

n //кол-во элементов в Indic_mas_copi[]

1. Означает ли запись Indic_mas_copi[n]=0, то что мы обнулили все элементы массива?

2. После выполнения определённых операций массив Indic_mas_copi[] изменил значения некоторых элементов,

При следующей итерации повторяется копирование Indic_mas[] в Indic_mas_copi[].

Нужно ли перед этим копированием, чтобы Indic_mas_copi[] был обнулён (или пустой)

или элементы Indic_mas[] автоматически заменят прежние элементы Indic_mas_copi[] ?

Нет, не обязательно. Все элементы массива Indic_mas_copi[] будут замещены скопированными с основного массива Indic_mas[]
 
LOA:


Благодарю. Так действительно проще.

Тогда цикл можно использовать при ситуации, когда необходимо обнулить часть элементов?

Или, скажем, через один элемент.


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

если значение в текущей ячейке массива менее нуля, то оно принимает значение этой ячейки массива, умноженное на два. Иначе continue

P.S.

if(massiv[i]<0){
  massiv[i]=massiv[i]*2;
}
else{
  continue;
}
Хотя с позиций работы процессора, если мы заранее знаем, что нужно именно удвоить, то лучше применить сложение, чем умножение - сложение отнимет меньше процессорного времени.
Причина обращения: