Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1921

 
Y, de hecho, es posible combinar los ciclos 1 y 2 copiando sólo los elementos no coincidentes de la matrizI en la matrizJ.
 
x572intraday los elementos de la matriz I:

La cadena de claves está resaltada. Resultado:

Se espera:

ArrayJ es dinámico, parece que hay algo que no funciona... Pero tampoco necesito una estática.

Me ha roto la cabeza. ¿QUÉ PASA? ¿O es el equivalente a la vieja canción

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

и

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

sobre las constantes con nombre?

Tienes un bucle extra.

Aquí está la variante correcta:

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 #:

No te destroces, Alexander.

¿Por qué Alejandro? Soy Andrei.

"No te destroces" - aclara.

 
Koldun Zloy #:

Tienes un ciclo extra.

Esta es la opción correcta:

Sobre el bucle extra... Puede ser inapropiado aquí, pero es necesario en un código grande, por lo que se trasladó aquí. No tengo recursos para comprobar la corrección del algoritmo en este momento, pero formalmente funciona como se pretende.

JRandomTrader, el resultado fue sorprendente: todo ceros. Lo comprobaré más tarde.

Gracias a todos.

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);

Es así.

Y los ceros son culpa mía, deberían estar ahí:

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 #:

Hola

 
Tretyakov Rostyslav #:

¡Cariño!

Está utilizando información errónea.

 
Vitaly Muzichenko #:

¡Querida!

Estás utilizando información errónea.

¿Cuál quieres?
 
Tretyakov Rostyslav #:
¿Cuál quieres?

El otro

 
Tretyakov Rostyslav #:
¿Cuál es?

Eres un programador, no un taxista, tienes que buscar la causa, no el efecto, entonces todo encajará.