![]() |
zufällige werte finden
hallo,
könnte man diesen code effizienter machen, gerade was es angeht die verteilung der werte gleichmäßiger zumachen? UGlobal.IVArt wird aus einer .ini geladen und kann folgende zustände haben, 1,2,3. Es wird jeweils nur der erste Ton (Ton1) gesucht und Ton2 wird dann mit hilfe der gewichtung (Intervall) gebildet.
Delphi-Quellcode:
procedure TFIntervalle.TonSuchen(var Ton1, Ton2: integer);
var Zufall: integer; Intervall: integer; begin Zufall:= random(100) + 1; case Zufall of 1.. 3: Intervall:= 0; 4.. 14: Intervall:= 1; 15.. 23: Intervall:= 2; 24.. 32: Intervall:= 3; 33.. 43: Intervall:= 4; 44.. 52: Intervall:= 5; 53.. 60: Intervall:= 6; 61.. 69: Intervall:= 7; 70.. 78: Intervall:= 8; 79.. 84: Intervall:= 9; 85.. 90: Intervall:= 10; 91.. 96: Intervall:= 11; 97..100: Intervall:= 12; else Intervall:= 0; end; case UGlobal.IVArt of 1: repeat begin Zufall:= random(900000) + 1; Ton1:= Zufall mod 30; Ton2:= Ton1 + Intervall; end; until (abs(Ton1-Ton2)<13) and (Ton1<=Ton2); 2: repeat begin Zufall := random(900000) + 1; Ton1:= Zufall mod 30; Ton2:= Ton1 - Intervall; end; until (abs(Ton1-Ton2)<13) and (Ton1>=Ton2); 3: repeat begin Zufall := random(900000) + 1; Ton1 := Zufall mod 30; Zufall:= random(1) + 1; case Zufall of 1: Ton2:= Ton1 + Intervall; 2: Ton2:= Ton1 - Intervall; end; end; until (abs(Ton1-Ton2)<13); end; Ton1:= Ton1 + 54; Ton2:= Ton2 + 54; end; |
Re: zufällige werte finden
Hallo Hank,
verinfachen lässt sich dein Code schon noch etwas:
Delphi-Quellcode:
Seltsame Verteilungsfunktion...
function RandomInterval: Integer;
begin case Succ(Random(100)) of 4.. 14: Result := 1; // 11 15.. 23: Result := 2; // 9 24.. 32: Result := 3; // 9 33.. 43: Result := 4; // 11 44.. 52: Result := 5; // 9 53.. 60: Result := 6; // 8 61.. 69: Result := 7; // 9 70.. 78: Result := 8; // 9 79.. 84: Result := 9; // 6 85.. 90: Result := 10; // 6 91.. 96: Result := 11; // 6 97..100: Result := 12; // 4 else {1..3} Result := 0; // 3 end; end; procedure TonSuchen(const IVArt: Integer; var Ton1, Ton2: integer); var intervall: integer; begin intervall := RandomInterval; Ton1 := Random(30) + 54; case IVArt of 1: Ton2:= Ton1 + Intervall; 2: Ton2:= Ton1 - Intervall; 3: if Odd(Random(2)) then Ton2 := Ton1 - Intervall else Ton2 := Ton1 + Intervall; end; end; Freundliche Grüße vom marabu |
Re: zufällige werte finden
danke sehr. sieht schon wesentlich besser aus.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz