MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 144

 
Vitaly Muzichenko :

난 이미 혼란스러워)

배열이 있습니다.

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

‌함수는 결국 무엇을 반환해야 하며 그 이유는 무엇입니까? 각 숫자에 대한 일치 수, 또는 특정 최대 숫자, 또는 ... 내가 뭔가를 썼지 만 아마도 그렇지 않을 것입니다.

나는 뭐라고 설명 해야할지 모르겠어...

다음 같은 배열 보입니다 . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 삼,
동일한 색상으로 동일한 숫자를 표시합니다(숫자가 단일 사본에 있는 경우 이중 중복이 없습니다. 필요하지 않음).
1 2 3 1 2 1 2 2 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3
색상이 다른 숫자의 수를 계산합니다. 3 - 이것이 결과입니다.

 
fxsaber :
이전 코드를 확인 했습니까? 재확인 .
여기 ... 내가 좀 이상해 ... 나는 거기에서 일종의 가져 갔다. 그러나 그것은 다른 곳에서 나왔다.
 
Artyom Trishkin :

나는 뭐라고 설명 해야할지 모르겠어...

다음 같은 배열 보입니다 . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 삼,
동일한 색상으로 동일한 숫자를 표시합니다(숫자가 단일 사본에 있는 경우 이중 중복이 없습니다. 필요하지 않음).
1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3
색상이 다른 숫자의 수를 계산합니다. 3 - 이것이 결과입니다.

아마도)

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 :
여기 ... 내가 좀 이상해 ... 나는 거기에서 일종의 가져 갔다. 그러나 그것은 다른 곳에서 나왔다.
일반화
// Возвращает количество различных элементов массива, которых не меньше 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 :
일반화
///
고맙습니다. 모든 것이 최고입니다. 나는 하루를 보낼 것입니다 ...
 
Vitaly Muzichenko :

아마도)


감사합니다. 배열을 거치지 않고 더 쉽습니다.)
 
fxsaber :
일반화
// если будут структуры, то есть более универсальная запись
그 흥미 롭군요
 
Artyom Trishkin :
그 흥미 롭군요
       if (_R(Array[i - 1 ]) != Array[i]) // TypeToBytes.mqh

이러한 표기법을 사용하면 Array는 숫자 유형일 뿐만 아니라 모든 단순 구조 가 될 수 있습니다.

또 다른 점은 구조체용 ArraySort는 물론 작동하지 않는다는 것입니다.

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

이러한 표기법을 사용하면 Array는 숫자 유형일 뿐만 아니라 모든 단순 구조 가 될 수 있습니다.

또 다른 점은 구조체용 ArraySort는 물론 작동하지 않는다는 것입니다.

그게 다야 ... 그리고 구조는 일반적으로 복잡합니다. 그리고 그들은 여전히 정렬해야합니다 ...
 
Artyom Trishkin :
그게 다야 ... 그리고 구조는 일반적으로 복잡합니다. 그리고 그들은 여전히 정렬해야합니다 ...

복잡한 것은 객체를 포함합니다(예: 문자열).

MQlTick은 간단한 구조입니다.

MqlTradeRequest 는 복잡합니다.

ArraySort 및 간단한 구조의 경우 작성하기 쉽습니다.