MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 144

 
Vitaly Muzichenko :

zaten kafam karıştı)

Bir diziniz var:

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

‌İşlev sonunda ne döndürmeli ve neden? Her sayı için eşleşme sayısı veya belirli bir maksimum sayı veya ... Bir şey yazdım , ama muhtemelen öyle değil, öyle değil mi?

Nasıl anlatacağımı bilmiyorum...

Bir dizi görüyoruz: ‌ 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3,
Aynı sayıları aynı renkle işaretleriz (sayı tek bir kopyadaysa, bunun için çift yoktur - gerekli değildir):
1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
Farklı renge sahip sayıları sayıyoruz: 3 - sonuç bu.

 
fxsaber :
Eski kodu kontrol ettiniz mi? Tekrar kontrol et .
İşte ... Ben biraz garipim ... Oradan aldım, ama başka bir yerden çıktı
 
Artyom Trishkin :

Nasıl anlatacağımı bilmiyorum...

Bir dizi görüyoruz: ‌ 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3,
Aynı sayıları aynı renkle işaretleriz (sayı tek bir kopyadaysa, bunun için çift yoktur - gerekli değildir):
1 2 3 1 2 1 2 2 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3
Farklı renge sahip sayıları sayıyoruz: 3 - sonuç bu.

Belki)

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 :
İşte ... Ben biraz garipim ... Oradan aldım, ama başka bir yerden çıktı
genelleştirilmiş
// Возвращает количество различных элементов массива, которых не меньше 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 :
genelleştirilmiş
///
Teşekkür ederim. Her şey süper - bir gün geçirirdim ...
 
Vitaly Muzichenko :

Belki)


Teşekkürler, dizileri atmadan daha kolay;)
 
fxsaber :
genelleştirilmiş
// если будут структуры, то есть более универсальная запись
ilginç
 
Artyom Trishkin :
ilginç
       if (_R(Array[i - 1 ]) != Array[i]) // TypeToBytes.mqh

Böyle bir gösterimle, Array yalnızca sayısal bir tür değil, aynı zamanda herhangi bir basit yapı olabilir.

‌

Başka bir şey de, yapılar için ArraySort'un elbette çalışmamasıdır.

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

Böyle bir gösterimle, Array yalnızca sayısal bir tür değil, aynı zamanda herhangi bir basit yapı olabilir.

‌

Başka bir şey de, yapılar için ArraySort'un elbette çalışmamasıdır.

İşte bu kadar ... Ve yapılar genellikle karmaşıktır. Ve hala sıralanmaları gerekiyor ...
 
Artyom Trishkin :
İşte bu kadar ... Ve yapılar genellikle karmaşıktır. Ve hala sıralanmaları gerekiyor ...

Karmaşık olanlar nesneler içerir (örneğin dizeler).

M‌qlTick basit bir yapıdır.

MqlTradeRequest karmaşıktır.

‌

ArraySort ve basit yapılar için yazmak kolaydır.