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,1,1,3,3,3,3,3,
同じ数字には同じ色で印をつける(数字が一つしかない場合は重複しない-必要ない)。
1
,2,3,1,2,1 , 2 , 1 , 1 , 3 , 3 , 3 , 3 , 3 , 3,3
色の違う数字の数を数える:3 - これがその結果です。

 
fxsaber:
古いコードを確認されたのですね。ダブルチェック する。
ここで...なんだか変な感じ...。...と思ったら、どこかから持ってきたんです。
 
Artyom Trishkin:

どう説明したらいいのか...。

配列が見える。1,2,3,1,2,1,2,1,1,3,3,3, 3,3,
同じ数字には同じ色で印をつける(数字が一つしかない場合、その倍はない-必要ない)。
1
,2,3,1,2,1 , 2 , 1 , 1 , 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は、単純な構造に対して簡単に書くことができます。