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

 
Vitaly Muzichenko:

Eu já estou confuso)

Você tem uma matriz:

Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};

O que a função deve eventualmente retornar e por quê? O número de correspondências para cada número, ou um número máximo específico, ou ... Escrevi alguma coisa, mas deve estar errada, e errada?

Eu não sei como explicar...

Vemos uma matriz:1, 2, 3, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
Marcamos números idênticos com a mesma cor (se houver apenas um número, não há duplo para ele - não é necessário):
1, 2, 3, 1, 2, 1 , 2 , 2, 2, 1, 1, 1, 1, 3 , 3, 3 , 3 , 3 , 3, 3 , 3, 3, 3, 3,3
Conte o número de números com cores diferentes: 3 - este é o resultado.

 
fxsaber:
Você verificou o código antigo. Verifique novamente.
Aqui... Sou meio esquisito... ...e depois consegui-o de outro lugar.
 
Artyom Trishkin:

Eu não sei como explicar...

Vemos uma matriz:1, 2, 3, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
Marcamos números idênticos com a mesma cor (se houver apenas um número, não há duplo para ele - não é necessário):
1, 2, 3, 1, 2, 1 , 2 , 2, 2, 1, 1, 1, 1, 3 , 3, 3 , 3 , 3, 3 , 3 , 3, 3, 3, 3,3
Conte o número de números com cores diferentes: 3 - este é o resultado.

Talvez)

void OnTick()
{
int Arr[]={1, 2, 3, 1, 2, 1, 2, 2, 1, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
Comment( GetM(Arr) );
}

int GetM(int &Mas[])
{
int MasTemp[][2]; // Временный массив
int c=0,t=0;

ArraySort(Mas);
int ArrSize= ArraySize(Mas);
  for(int i=0; i<ArrSize; i++) {
    for(int x=i; x<ArrSize; x++) {
     if(Mas[i]==Mas[ArrayMinimum(Mas,WHOLE_ARRAY,x)]) {
      c++;
     }
    }
  
   if(c>0) {
     t++;
     ArrayResize(MasTemp,t);
     MasTemp[t-1][0]= c;
     MasTemp[t-1][1]= Mas[i];
   }
   c=0;
  }
  
  int ArrRange=ArrayRange(MasTemp,0);
  if(ArrRange>0) {
    ArraySort(MasTemp);
  // Comment("Цифра: ",MasTemp[ArrRange-1][1],", Количество: ",MasTemp[ArrRange-1][0]);
    return( MasTemp[ArrRange-1][1] );
  }
  
  return(-1);
}
 
Artyom Trishkin:
Lá ... Eu sou um esquisito... Pensei que tivesse vindo de lá, mas veio de outro lugar.
Generalizado
// Возвращает количество различных элементов массива, которых не меньше Repeat
template <typename T>
int Strange( const T &InArray[], const int Repeat = 2 )
{
  int Res = 0;  
  
  T Array[];
  
  const int Size = ArraySize(InArray);
  
  if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
  {    
    int Tmp = 1;
    
    for (int i = 1; i < Size; i++, Tmp++)
      if (Array[i - 1] != Array[i]) // если будут структуры, то есть более универсальная запись
      {
        if (Tmp >= Repeat)
          Res++;
        
        Tmp = 0;
      }
      
    if (Tmp >= Repeat)    
      Res++;
  }

  return(Res);
}

void OnStart()
{
  int Array[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
  
  for (int i = 1; i <= 4; i++)
    Print(Strange(Array, i));
}
 
fxsaber:
Resumido
///
Obrigado. Tudo super - eu passaria um dia...
 
Vitaly Muzichenko:

Talvez)


Obrigada, ainda é mais fácil sem a troca de matriz ;)
 
fxsaber:
Resumido por
// если будут структуры, то есть более универсальная запись
Isso é interessante.
 
Artyom Trishkin:
Isto é interessante
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

Com esta notação, um Array não pode ser apenas um tipo numérico, mas qualquer estrutura simples.

Outra coisa é que o ArraySort para estruturas, é claro, não funciona.

 
fxsaber:
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

Com esta notação, um Array não pode ser apenas um tipo numérico, mas qualquer estrutura simples.

Outra coisa é que o ArraySort para estruturas, é claro, não funciona.

Isso mesmo... Mas as estruturas geralmente são complexas. E ainda têm de ser classificados...
 
Artyom Trishkin:
Exatamente... Mas as estruturas são geralmente muito complexas. E ainda têm de ser classificados...

Os complexos contêm objetos (cordas, por exemplo).

O MqlTick é uma estrutura simples.

MqlTradeRequest - complexo.

O ArraySort pode ser facilmente escrito para estruturas simples.

Razão: