Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1920

 
И собственно, развивая дальше, можно объединить циклы 1 и 2, копируя в ArrayJ только несовпадающие с ArrayI элементы.
 
x572intraday #:

 Простенькая задачка: нужно выпихнуть из массива ArrayJ все элементы, совпадающие по индексу и значению с элементами массива ArrayI:

 Выделена ключевая строка. Результат:

ожидалось:

 ArrayJ динамический, с ним как будто что-то не так... но статический мне и не нужен.

 Сломал себе весь ум. ЧЯДНТ? Или неужто это аналог старой песни:

https://www.mql5.com/ru/forum/1111/page3141#comment_27152680

и

https://www.mql5.com/ru/forum/1111/page3142#comment_27371998

про именованные константы?

У Вас лишний цикл.

Вот правильный вариант:

void OnStart()
{
   int CommonArray[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13};
   int ArrayI[20]=   {0, 0, 0, 0, 0, 0, 0, 8, 9, 10,  0, 12, 13, 13, 13, 13,  0,  0, 13,  0};
   int ArrayJ[];

   for(int j=0; j<ArraySize(ArrayI); j++)
   {
      ArrayResize(ArrayJ,j+1);
      ArrayJ[j]=CommonArray[j];
   }

   ArrayPrint(ArrayI);
   ArrayPrint(ArrayJ);

        for( int i = ArraySize( ArrayI )-1; i >= 0; i-- ){
                if( ArrayI[i] > 0 && ArrayI[i] == ArrayJ[i] ){
                        ArrayRemove( ArrayJ, i, 1 );
                }
        }

   ArrayPrint( ArrayJ );
//---
}
 
EVGENII SHELIPOV #:

Не рвите себя Александр

Почему Александр? Я Андрей.

" Не рвите себя" - поясните.

 
Koldun Zloy #:

У Вас лишний цикл.

Вот правильный вариант:

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

 JRandomTrader, результат удивил: сплошь нули. Позже перепроверю.

 

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

JRandomTrader
JRandomTrader
  • 2018.10.28
  • www.mql5.com
Профиль трейдера
 
int CommonArray[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13};
int ArrayI[20]=   {0, 0, 0, 0, 0, 0, 0, 8, 9, 10,  0, 12, 13, 13, 13, 13,  0,  0, 13,  0};
int ArrayJ[];

int CommonOffset=0; // или сколько надо

ArrayResize(ArrayJ,ArraySize(ArrayI));
int k=0;
for(int j=0; j<ArraySize(ArrayI); j++)
   if(ArrayI[j]!=CommonArray[j+CommonOffset])
      ArrayJ[k++]=CommonArray[j+CommonOffset];
ArrayResize(ArrayJ,k);

Вот как-то так.

А нули - мой косяк, там надо:

int k=0; // объявляем до цикла - чтобы использовать после
for(int i=0; i<ArraySize(ArrayI); i++) // после предыдущего кода (1) размеры ArrayI и ArrayJ равны
  if(ArrayI[i]!=ArrayJ[i])
    {
     -ArrayJ[k++]=ArrayI[i];
     +ArrayJ[k++]=ArrayJ[i];
    }
ArrayResize(ArrayJ,k);


 
Tretyakov Rostyslav #:
  

Эй

 
Tretyakov Rostyslav #:

Уважаемый!

Не ту информацию используете.

 
Vitaly Muzichenko #:

Уважаемый!

Не ту информацию используете.

А какую надо?
 
Tretyakov Rostyslav #:
А какую надо?

Другую

 
Tretyakov Rostyslav #:
А какую надо?

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

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