Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1920

 
x572intraday elementos do ArrayI:

O fio condutor é destacado. Resultado:

Esperado:

O ArrayJ é dinâmico, parece haver algo de errado com ele. Mas eu também não preciso de um estático.

Partiu-me a cabeça. O QUE ESTÁ ACONTECENDO? Ou será este o equivalente da velha canção:

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

и

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

sobre constantes nomeadas?

Você tem um laço extra.

Aqui está a variante correta:

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

Não se rasgue, Alexander.

Por que Alexander? Eu sou Andrei.

"Não se rasgue" - esclareça.

 
Koldun Zloy #:

Você tem um ciclo extra.

Esta é a opção certa:

Sobre o laço extra... Pode ser inapropriado aqui, mas é necessário em um grande código, por isso foi mudado para cá. Não tenho recursos para verificar a correção do algoritmo no momento, mas formalmente ele funciona como pretendido.

JRandomTrader, o resultado foi surpreendente: todos os zeros. Verificarei novamente mais tarde.

Obrigado a todos vocês.

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

É assim.

E os zeros são minha culpa, eles deveriam estar lá:

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

Hey

 
Tretyakov Rostyslav #:

Prezado!

Você está usando as informações erradas.

 
Vitaly Muzichenko #:

Prezado!

Você está usando as informações erradas.

Qual deles você quer?
 
Tretyakov Rostyslav #:
Qual deles você quer?

O outro

 
Tretyakov Rostyslav #:
Qual deles é?

Você é um programador, não um taxista, você precisa procurar a causa, não o efeito, então tudo se encaixa no lugar.

 
Vitaly Muzichenko #:

Você é um programador, não um motorista de táxi, você deve estar procurando a causa, não o efeito, então tudo se encaixa no lugar.

Conte-nos a causa. Nada de teorias de conspiração, por favor.

Razão: