Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zufällige werte finden (https://www.delphipraxis.net/61937-zufaellige-werte-finden.html)

fwsp 28. Jan 2006 11:51


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;

marabu 28. Jan 2006 14:29

Re: zufällige werte finden
 
Hallo Hank,

verinfachen lässt sich dein Code schon noch etwas:

Delphi-Quellcode:
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;
Seltsame Verteilungsfunktion...

Freundliche Grüße vom marabu

fwsp 29. Jan 2006 12:44

Re: zufällige werte finden
 
danke sehr. sieht schon wesentlich besser aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz