初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1260

 
Vitaly Muzichenko:

何を書けば6桁のランダムな数字が出るのか、教えてください。

void OnStart()
{
   srand(GetTickCount());
   for(int i = 0; i < 10; i++)
   {
      uint random = rand_32() % 1000000;  // %1000000 --> ограничим 6-ю знаками 
      printf("random = %u", random);
   }
}
//+------------------------------------------------------------------+
uint rand_32()
{
   return(((uint)rand()) << 16 | rand());
}
//+------------------------------------------------------------------+
 
Alexey Viktorov:

そして、その結果はどうだったのでしょうか。無謬性を主張しているわけではないのですが...))

結果、6文字に満たなかったため、そのままにしていました

if(v>=min && v<=max)

イゴール・マカヌ

今晩試してみます。

 
Igor Makanu:

5桁のものがすり抜ける


とにかく、問題は解決しました。皆さん、ありがとうございました

 
Vitaly Muzichenko:

5桁の数字が抜けている

ええ、そうでしょう。

は、6桁のチャレンジしかないと思っていました。

オプションとして、1桁目を rand()%10 で生成することもできます。

 
Igor Makanu:

はい、そうなります。

タスクは6桁までしかないと思っていた。

オプションとして、最初の文字を rand()%10 で生成することもできます。

コードに戻してください。

if(v>=min && v<=max)

この機能は1日に何度も呼び出されるから、それで十分 だ。

 
Vitaly Muzichenko:

コードに戻してください。

この機能は一日に 何度も呼び出されます。

ノー

たんじゅんこうほう

そう書く

uint random = (rand() % 9 + 1) * 1000000 +   // первый знак
                    rand_32() % 100000;      // ограничим 5-ю знаками
 
Igor Makanu:

ノー

もっと単純な話です。

ということで、書いてみてください。

まあ、それぞれの看板(6枚)をランダムにダイヤルして、番号を集めるというのもありですが)

 
Valeriy Yastremskiy:

まあ、各キャラクター(6枚)をランダムにダイヤルして番号を集めるとか)

はい、しかし、それはおそらく悪いランドである - あなたはテストする必要があります。

16ビットのrand()をシフトして、さらに下位ビットにrand()を追加して32ビットとするのが簡単だと思います。

 
Igor Makanu:

はい、しかし、それはおそらく悪いランドである - 私はテストする必要があります。

16ビットのrand()をシフトして、下位ビットに別のrand()を加える=32ビットのrand_32()を得るのが簡単だと思うのですが、私の例ですと

テストするか、ジェネレーターのロジックを調整するか、どちらかですが、通常、タスクより高くつきます。

 
Valeriy Yastremskiy:

私もそう思います。 テストをするか、ジェネレーターのロジックをいじるか、大抵は目の前の課題よりも高くつきますね。

)

理由: