Domanda

Quindi quello che sto essenzialmente cercando di fare è avere qualcosa accada il 70% del tempo, un altro paio di cose accadono il 10% del tempo di ciascuna se questo ha un senso, ma la mia applicazione non sembra fare una qualsiasi delle azioni che 'm indovinando sto fraintendendo la sintassi loop o qualcosa, comunque se qualcuno potesse dare un'occhiata e magari darmi qualche consiglio

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;
È stato utile?

Soluzione

Non è necessario alcuna sintassi ciclo, in modo che è certamente una possibile fonte di vostra confusione.

Non chiamare Randomize più volte. Si reinizializza il seme casuale ogni volta che si fa, e che si basa su l'orologio di sistema. Se il codice viene eseguito più velocemente di quanto i progressi di clock, allora le vostre diverse chiamate al Random sarà effettivamente Ripristina il seme casuale per lo stesso valore che aveva prima, con conseguente ripetuto else chiamate in restituire lo stesso valore .

L'aiuto consiglia di chiamare if solo una volta all'inizio del programma. Se si sta scrivendo un'unità o di un componente e non siete a capo di tutto il programma, quindi non chiamare <=> affatto. Invece, documentano che i consumatori del codice dovrebbero chiamare loro stessi.

Se si sta scrivendo una DLL e non utilizzando i pacchetti di run-time, quindi chiamare <=> in una funzione di inizializzazione che le vostre esportazioni DLL; consumatori di DLL non avranno accesso alla copia della DLL della libreria di runtime Delphi.

Inoltre, se si desidera qualcosa accada il 70 per cento del tempo, allora si dovrebbe verificare se il valore è strettamente minore di 70. I possibili valori di ritorno di <=> includono zero; 70 per cento dei risultati sarà compreso tra 0 e 69 inclusi. Permettendo 70 sarà effettivamente rendere l'evento accada 71 per cento del tempo.

Infine, i calcoli del 10 per cento del tempo non hanno senso per me. Hai tre eventi che accadranno il 7 per cento del tempo, e uno che accadrà il 9 per cento del tempo. Non si può avere quattro eventi che ogni accadere il 10 per cento del tempo quando si hanno solo il 30 per cento restante. Vuoi dire per la frequenza di ogni evento da misurare indipendentemente dagli altri? Se è così, allora non collegare tutti i test condizionali insieme <=>; Utilizzare completamente un separato <=> dichiarazione per ciascuno di essi.

Altri suggerimenti

Ho appena modificato il codice CharlesF per fare quello che ti serve. Spero CharlesF non mente.

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top