Убрать из Массива нулевые значения - страница 3

 
Alexandr Andreev:

Этож в учебниках должно быть разобрано уже много раз.... 

Свой вариант - не претендую на хорошесть

но вроде норм, один цикл и одно условие

Замечательный пример как делать не надо...

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

 
STARIJ:

Мне на днях 76 будет, а Вам?

Действительно старый... Мне всего 63.

 
Alexandr Andreev:

Этож в учебниках должно быть разобрано уже много раз.... 

Свой вариант - не претендую на хорошесть

но вроде норм, один цикл и одно условие

Пишет array out of range  вот здесь: else src[i-n]=src[i];        
 
   int n = -1, size = ArraySize(src);

      if (src[i]==0) n++;
      else src[i-n]=src[i];  // при i=0 src[i]=1 и оно копируется в src[i-n] = src[2]  и весь массив заполняется 1 единицами
 
Проще всего пользоваться СБ
#include <Arrays\ArrayInt.mqh>
void OnStart()
  {
   CArrayInt   arr;
   arr.Add(1); arr.Add(4); arr.Add(2); arr.Add(0); arr.Add(0); arr.Add(5); arr.Add(0); arr.Add(3); arr.Add(0);
   
   for(int i=0; i<arr.Total(); i++)
      if(arr.At(i)==0)
         arr.Delete(i);
   
   Print(arr.Total());   
  }
 
Valeriy Korobeynik:
Проще всего пользоваться СБ

Нерационально. При каждом удалении выполняется смещение всех оставшихся данных в массиве. 

Здесь правильный ответ уже дан во втором комменте, правда с ошибкой в коде... но там делов то, исправить.

 
Зависит от того, нужна копия без нулей, или лучше текущий править. Для копи так
#include <Arrays\ArrayInt.mqh>
void OnStart()
  {
   CArrayInt   arr,arr1;
   arr.Add(1); arr.Add(4); arr.Add(2); arr.Add(0); arr.Add(0); arr.Add(5); arr.Add(0); arr.Add(3); arr.Add(0);
   
   for(int i=0; i<arr.Total(); i++)
      if(arr.At(i)!=0)
         arr1.Add(arr.At(i));
   
   Print(arr1.Total());   
  }
 
STARIJ:
Пишет array out of range  вот здесь: else src[i-n]=src[i];        

Исправил - проверяй, повторюсь написал код с телефона, с машины

 
Alexandr Andreev:  Исправил - проверяй, повторюсь написал код с телефона, с машины

уже сыт этой задачей

 
STARIJ:

уже сыт этой задачей

Не пропустили моё сообщение, или уже не актуально?

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