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

 
fxsaber :
그대로 출시됨
template < typename T>
int Strange( const T &InArray[] )
{
   int Res = 1 ;  
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Tmp = 1 ;
    
    ArrayPrint(Array);
    
     for ( int i = 1 ; i < Size; i++)
    {
       if (Array[i - 1 ] != Array[i])
      {
         if (Tmp > Res)
          Res = Tmp;
        
        Tmp = 0 ;
      }
        
      Tmp++;
    }
  }

   return (Res);
}

void OnStart ()
{
   int Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 };
  
   Print (Strange(Array));
}
쟁기.

출력은 다음과 같습니다.

2017.03 . 07 14 : 42 : 44.141 1 1 1 2 2 2 2 3
2017.03 . 07 14 : 42 : 44.141 4

상단 라인은 정렬된 입력 배열이고 하단 라인은 Strange() 함수의 결과입니다.

정렬된 배열과 색상이 일치하는 것을 주의 깊게 살펴보고 동일한 색상으로 하나 이상의 숫자를 계산하면 다음과 같은 결과가 나타납니다.

1 1 1 2 2 2 2 3 ‌ - 합계, 2 를 반환해야 함

그리고 함수는 4를 반환했습니다. 하지만 - 또한 진행도 - 항상 1을 반환했지만 - 나는 그것이 어떻게 되었는지 이해하지 못했습니다.

 
Artyom Trishkin :

1 1 1 2 2 2 2 3 ‌ - 합계, 2 를 반환해야 함

그리고 함수는 4를 반환했습니다. 하지만 - 또한 진행도 - 항상 1을 반환했지만 - 나는 그것이 어떻게 되었는지 이해하지 못했습니다.

따라서 숫자 또는 가장 자주 사용되는 요소를 반환해야 합니까? 두 번째라면,
template < typename T>
int Strange( const T &InArray[] )
{
   int Res = 0 ;
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Max = 0 ;
     int Tmp = 0 ;
    
    ArrayPrint(Array);
    
     for ( int i = 0 ; i < Size - 1 ; i++)
    {
      Tmp++;
      
       if ((Array[i] != Array[i + 1 ]) || (i == Size - 2 ))
      {
         if (Tmp > Max)
        {
          Max = Tmp;
          
          Res = Array[i];
        }
        
        Tmp = 0 ;
      }        
    }
  }

   return (Res);
}

void OnStart ()
{
   int Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
  
   Print (Strange(Array));
}
 
fxsaber :
따라서 숫자 또는 가장 자주 사용되는 요소를 반환해야 합니까?

다른 중복의 수입니다.

그리고 당신의 함수는 무엇을 반환합니까? 대부분의 경기는? 또한 유용한...

 
Artyom Trishkin :

다른 중복의 수입니다.

당신은 그것을 이상하게 표현합니다. "0, 0, 1, 1, 2, 2" - 3?

그리고 당신의 함수는 무엇을 반환합니까? 대부분의 경기는?

네.
 
fxsaber :

당신은 그것을 이상하게 표현합니다. "0, 0, 1, 1, 2, 2" - 3?

예 - 세 개의 다른 숫자가 세 번 일치합니다.
 
Artyom Trishkin :
예 - 세 개의 다른 숫자가 세 번 일치합니다.
template < typename T>
int Strange( const T &InArray[] )
{
   int Res = 0 ;  
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Tmp = 1 ;
    
    ArrayPrint(Array);
    
     for ( int i = 1 ; i < Size; i++, Tmp++)
       if (Array[i - 1 ] != Array[i])
      {
         if (Tmp > 1 )
          Res++;
        
        Tmp = 0 ;
      }
      
     if (Tmp > 1 )    
      Res++;
  }

   return (Res);
}

void OnStart ()
{
   int Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 3 , 4 , 4 };
  
   Print (Strange(Array));
}
 
fxsaber :
따라서 숫자 또는 가장 자주 사용되는 요소를 반환해야 합니까? 두 번째라면,
template < typename T>
int Strange( const T &InArray[] )
{
   int Res = 0 ;
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Max = 0 ;
     int Tmp = 0 ;
    
    ArrayPrint(Array);
    
     for ( int i = 0 ; i < Size - 1 ; i++)
    {
      Tmp++;
      
       if ((Array[i] != Array[i + 1 ]) || (i == Size - 2 ))
      {
         if (Tmp > Max)
        {
          Max = Tmp;
          
          Res = Array[i];
        }
        
        Tmp = 0 ;
      }        
    }
  }

   return (Res);
}

void OnStart ()
{
   int Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
  
   Print (Strange(Array));
}

엄청난. 그러나 조금 다르게 - 이것은 템플릿 함수이므로 다음과 같습니다.

template < typename T>
T Strange( const T &InArray[] )
{
  T Res = 0 ;
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Max = 0 ;
     int Tmp = 0 ;
    
    ArrayPrint(Array);
    
     for ( int i = 0 ; i < Size - 1 ; i++)
    {
      Tmp++;
      
       if ((Array[i] != Array[i + 1 ]) || (i == Size - 2 ))
      {
         if (Tmp > Max)
        {
          Max = Tmp;
          
          Res = Array[i];
        }
        
        Tmp = 0 ;
      }        
    }
  }

   return (Res);
}

void OnStart ()
{
   double Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
  
   Print (Strange(Array));
}

 
fxsaber :
template < typename T>
int Strange( const T &InArray[] )
{
   int Res = 0 ;  
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Tmp = 1 ;
    
    ArrayPrint(Array);
    
     for ( int i = 1 ; i < Size; i++)
    {
       if (Array[i - 1 ] != Array[i])
      {
         if (Tmp > 1 )
          Res++;
        
        Tmp = 0 ;
      }
        
      Tmp++;
    }
  }

   return (Res);
}

void OnStart ()
{
   int Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 };
  
   Print (Strange(Array));
}

이것은 무엇을 반환합니까?

어레이가 다르게 만들어지면 그것은 사실이 아닙니다:‌‌

template < typename T>
int Strange( const T &InArray[] )
{
   int Res = 0 ;  
  
  T Array[];
  
   const int Size = ArraySize (InArray);
  
   if (( ArrayCopy (Array, InArray) == Size) && ArraySort (Array))
  {    
     int Tmp = 1 ;
    
    ArrayPrint(Array);
    
     for ( int i = 1 ; i < Size; i++)
    {
       if (Array[i - 1 ] != Array[i])
      {
         if (Tmp > 1 )
          Res++;
        
        Tmp = 0 ;
      }
        
      Tmp++;
    }
  }

   return (Res);
}

void OnStart ()
{
   int Array[] = { 1 , 2 , 3 , 1 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
  
   Print (Strange(Array));
}

보고

2017.03 . 07 15 : 48 : 26.985 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3
2017.03 . 07 15 : 48 : 26.985 2

‌배열에서 일치하는 숫자의 수를 정확히 찾고 있습니까? 아니면 당신이 다른 일을 했을 수도 있고, 나는 오류를 찾을 것입니다.

 

난 이미 혼란스러워)

다음과 같은 배열이 있습니다.

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

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

 
Artyom Trishkin :

‌배열에서 일치하는 숫자의 수를 정확히 찾고 있습니까? 아니면 당신이 다른 일을 했을 수도 있고, 나는 오류를 찾을 것입니다.

이전 코드를 확인 했습니까? 재확인 .