Delphi (2006) Aiuto Loop
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;
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;