質問

だから、私は基本的にやろうとしていることはそれが理にかなっているが、私のアプリは、アクションIのいずれかを実行していないようならば、他のいくつかは、時間の10%ずつを起こる、何かが時間の70%が起こる持っています「誰が見てみると、おそらく私にいくつかのアドバイスを与えることができる、とにかく場合、私はループ構文か何かを誤解しています推測します。

per1 := 70;
per2 := 77;
per3 := 84;
per4 := 91;
per5 := 100;
per6 := Random(2) + 1;
randomize;
RandPer:= Random(100);
randomize;
RandPer2 := Random(100);

 if RandPer2 <= 70 then begin
If RandPer <= per1 then begin
  Functiontest(1);
    end Else If RandPer <= per2 then begin
      Functiontest(3);
     end Else begin If RandPer <= per3 then begin
      Functiontest(5);
        end Else begin  If RandPer <= per4 then begin
        Functiontest(6);
          end Else begin If RandPer <= per5 then begin
          Functiontest(9);
          end;
         end;
        end;
      end;
役に立ちましたか?

解決

あなたは任意のループ構文を持っていないので、それは確かにあなたの混乱の可能性のあるソースです。

を複数回Randomize呼び出さないでください。これは、ランダムシードあなたがやるたびに再初期化し、そのシステムクロックに基づいています。あなたのコードが高速クロックの進歩よりも実行されている場合は、あなたのいくつかの呼び出しが実際にがリセットされますRandomizeするのそれは同じ値を返す繰り返しRandom呼び出し、その結果、以前と同じ値にランダムシードます。

ヘルプは、あなたのプログラムの開始時に一度だけRandomizeを呼び出すようにアドバイスします。あなたはユニットまたはコンポーネントを書いていると、あなたがプログラム全体を担当していない場合は、まったくRandomizeを呼び出すことはありません。代わりに、あなたのコードの消費者は、それ自体を呼び出す必要があることを文書化します。

あなたはDLLを書き、実行時パッケージを使用していない場合は、

、そのあなたのDLLエクスポート初期化関数でRandomizeを呼び出します。あなたのDLLの消費者は、DelphiランタイムライブラリのあなたのDLLのコピーにアクセスすることはできません。

あなたが何かは、時間の70%が起こるしたい場合も、あなたはあなたの価値があるかどうかを確認する必要があります。のより厳密に小さいRandomの可能な戻り値がゼロを含める70。結果の70%が0と69包括の間になります。許可70が実際にイベントが時間の71パーセントが起こるようになります。

最後に、時間の10パーセントのあなたの計算は私には意味がありません。あなたは3時間の7%が起こるのだろうイベント、および時間の9パーセントが起こるのだろうものを持っています。あなたが唯一の残り30%を持っている場合、それぞれが時間の10パーセントが起こる4つのイベントを持つことができません。あなたは、独立して、他の測定される各イベントの周波数のために意味するのですか?もしそうなら、elseと一緒にすべてのあなたの条件テストをリンクしません。それぞれのために完全に分離if文を使用します。

他のヒント

私はちょうどあなたが必要なものを行うためにCharlesFコードを変更しました。 CharlesFは気にしないことを願っています。

begin
  randomize;
  for i := 0 to NumberOfTimesNeed do
  begin
    R :=  Random(100);
    case R of 
       0..69  : Functiontest(1); // this will fire 70% of NumberofTimes
       70..79 : Funciotntest(2); // 10 percent 
       80..89 : Funciotntest(3); // 10 percent 
       90..94 : Funciotntest(4); //  5 percent  
       // and so on ...
    end; 
end;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top