Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 144

 
Vitaly Muzichenko:

Je suis déjà confus)

Vous avez un tableau :

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

Que doit retourner la fonction et pourquoi ? Le nombre de correspondances pour chaque numéro, ou un nombre maximum spécifique, ou ... J'ai écrit quelque chose, mais ça doit être faux, et faux ?

Je ne sais pas comment expliquer...

Nous voyons un tableau :1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
Nous marquons les nombres identiques avec la même couleur (s'il n'y a qu'un seul nombre, il n'y a pas de doublon pour lui - il n'est pas nécessaire) :
1, 2, 3, 1, 2, 1 , 2 , 2, 1, 1 , 1 , 3, 3, 3 , 3 , 3 , 3 , 3,3, 3, 3, 3,
Comptez le nombre de nombres de couleurs différentes : 3 - voici le résultat.

 
fxsaber:
Vous avez vérifié l'ancien code. Vérifiez-le deux fois.
Ici... Je suis un peu bizarre... ...et puis je l'ai trouvé ailleurs.
 
Artyom Trishkin:

Je ne sais pas comment expliquer...

Nous voyons un tableau :1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
On marque les nombres identiques avec la même couleur (s'il n'y a qu'un seul nombre, il n'y a pas de double pour lui - il n'est pas nécessaire) :
1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3 , 3, 3 , 3 , 3 , 3, 3 ,3, 3, 3, 3,
Comptez le nombre de nombres de couleurs différentes : 3 - voici le résultat.

Peut-être)

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:
Il y a... Je suis bizarre... Je pensais que ça venait de là, mais ça venait d'ailleurs.
Généralisé
// Возвращает количество различных элементов массива, которых не меньше 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:
Résumé
///
Merci. Tous super - je passerais une journée...
 
Vitaly Muzichenko:

Peut-être)


Merci, c'est quand même plus facile sans le retournement de tableau ;)
 
fxsaber:
Résumés par
// если будут структуры, то есть более универсальная запись
Voilà qui est intéressant.
 
Artyom Trishkin:
C'est intéressant
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

Avec cette notation, un tableau peut non seulement être un type numérique, mais aussi toute structure simple.

Une autre chose est que ArraySort pour les structures, bien sûr, ne fonctionne pas.

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

Avec cette notation, un tableau peut non seulement être un type numérique, mais aussi toute structure simple.

Une autre chose est que ArraySort pour les structures, bien sûr, ne fonctionne pas.

C'est vrai... Mais les structures sont généralement complexes. Et ils doivent encore être triés...
 
Artyom Trishkin:
Exactement... Mais les structures sont généralement très complexes. Et ils doivent encore être triés...

Les complexes contiennent des objets (des chaînes de caractères, par exemple).

MqlTick est une structure simple.

MqlTradeRequest - complexe.

ArraySort peut facilement être écrit pour des structures simples.

Raison: