Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 144

 
Vitaly Muzichenko:

Ich bin schon verwirrt)

Sie haben ein Array:

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

Was sollte die Funktion letztendlich zurückgeben und warum? Die Anzahl der Treffer für jede Zahl oder eine bestimmte Höchstzahl oder ... Habe ich etwas geschrieben, aber es muss falsch sein, und falsch?

Ich weiß nicht, wie ich es erklären soll...

Wir sehen ein Array:1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
Wir markieren identische Zahlen mit der gleichen Farbe (wenn es nur eine Zahl gibt, gibt es kein Doppel dafür - es wird nicht benötigt):
1, 2, 3, 1, 2, 1 , 2 , 2, 1 , 1 , 1, 3 , 3 , 3, 3 , 3 , 3, 3 , 3 , 3, 3, 3, 3,3
Zähle die Anzahl der Zahlen mit verschiedenen Farben: 3 - das ist das Ergebnis.

 
fxsaber:
Sie haben den alten Code überprüft. Überprüfen Sie es doppelt.
Hier... Ich bin irgendwie komisch... ...und dann habe ich es von irgendwo anders her.
 
Artyom Trishkin:

Ich weiß nicht, wie ich es erklären soll...

Wir sehen ein Array:1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
Wir markieren identische Zahlen mit der gleichen Farbe (wenn es nur eine Zahl gibt, gibt es kein Doppel dafür - es wird nicht benötigt):
1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3 , 3 , 3, 3 , 3 , 3, 3, 3 , 3, 3, 3, 3,3
Zähle die Anzahl der Zahlen mit verschiedenen Farben: 3 - das ist das Ergebnis.

Vielleicht)

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:
Dort ... Ich bin ein komischer Kauz... Ich dachte, es käme von dort, aber es kam von woanders.
Verallgemeinert
// Возвращает количество различных элементов массива, которых не меньше 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:
Zusammenfassend
///
Ich danke Ihnen. Alles super - ich würde einen Tag damit verbringen...
 
Vitaly Muzichenko:

Vielleicht)


Danke, ohne Array-Flipping ist es noch einfacher ;)
 
fxsaber:
Zusammengefasst von
// если будут структуры, то есть более универсальная запись
Das ist sehr interessant.
 
Artyom Trishkin:
Das ist interessant
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

Mit dieser Notation kann ein Array nicht nur ein numerischer Typ sein, sondern eine beliebige einfache Struktur.

Eine andere Sache ist, dass ArraySort für Strukturen, natürlich, nicht funktioniert.

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

Mit dieser Notation kann ein Array nicht nur ein numerischer Typ sein, sondern eine beliebige einfache Struktur.

Eine andere Sache ist, dass ArraySort für Strukturen, natürlich, nicht funktioniert.

Das ist richtig... Aber Strukturen sind in der Regel komplex. Und die müssen noch sortiert werden...
 
Artyom Trishkin:
Ganz genau... Aber die Strukturen sind in der Regel sehr komplex. Und die müssen noch sortiert werden...

Komplexe enthalten Objekte (z. B. Zeichenketten).

MqlTick ist eine einfache Struktur.

MqlTradeRequest - komplex.

ArraySort kann leicht für einfache Strukturen geschrieben werden.

Grund der Beschwerde: