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älliger Integer-Wert zwischen zwei zahlen (https://www.delphipraxis.net/22872-zufaelliger-integer-wert-zwischen-zwei-zahlen.html)

NikoMitDaMacht 25. Mai 2004 15:11


Zufälliger Integer-Wert zwischen zwei zahlen
 
Hi mir ist diese frage etwas peinlich:

Wie kann man einen zufälligen integer wert inerhalb von zwei zahlen erstllen?

Basic-Master 25. Mai 2004 15:16

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
z.b. so :)
Delphi-Quellcode:
Randomize;
a := Random(maximum) + minimum;

Stevie 25. Mai 2004 15:19

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von Basic-Master
z.b. so :)
Delphi-Quellcode:
Randomize;
a := Random(maximum) + minimum;

Nicht ganz... :wink:
Delphi-Quellcode:
Random(Succ(High-Low)) + Low;

NikoMitDaMacht 25. Mai 2004 15:19

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
ne das klappt nich so recht:
Delphi-Quellcode:
Randomize;
a := Random(100) + 80;
da kommen werte über hundert raus!

Jens Schumann 25. Mai 2004 15:20

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Hallo,
Code:
Random(11)+10
liefert Dir Zufallszahlen von [10 bis 20]

[edit]siehe Stevie[/edit]

Pseudemys Nelsoni 25. Mai 2004 15:21

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Delphi-Quellcode:
function Rand(RandFrom, RandTo: integer): integer;
begin
  if RandTo > RandFrom then
  begin
    Randomize;
    Repeat
      Result := Random(RandTo);
    until Result > RandFrom-1;
  end
  else Result := 0;
end;

kannste dann aufrufen mit:

Delphi-Quellcode:
Var := Rand(minimum, maximum);

NikoMitDaMacht 25. Mai 2004 15:22

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Danke
Delphi-Quellcode:
Random(Succ(High-Low)) + Low;
doch für was steht das Succ

Jens Schumann 25. Mai 2004 15:23

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von Pseudemys Nelsoni
Delphi-Quellcode:
function Rand(RandFrom, RandTo: integer): integer;
begin
  if RandTo > RandFrom then
  begin
    Randomize;
    Repeat
      Result := Random(RandTo);
    until Result > RandFrom-1;
  end
  else Result := 0;
end;

kannste dann aufrufen mit:

Delphi-Quellcode:
Var := Rand(minimum, maximum);

Das ist völlig unbrauchbar. 1. viel zu viel Code 2. viel zu langsam. 3. Randomize sollte nur einmal im Programm aufgerufen werden. z.B. beim Programmstart

Matze 25. Mai 2004 15:24

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von NikoMitDaMacht
doch für was steht das Succ

OH ;)

@Pseudemys Nelsoni:
Diese function ist aber nicht so toll, man sollte randomize nur einmal aufrufen, sonst kann es schlechte Auswirkungen haben, auch wenn's zuerst nicht so ausschaut... ;)

sakura 25. Mai 2004 15:38

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Und ab Delphi 6

Delphi-Quellcode:
uses
  Math;

...
// function RandomRange(const AFrom, ATo: Integer): Integer;
Wert := RandomRange(1000, 2000);
...:cat:...

eroe 25. Mai 2004 23:48

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Im Endeffekt wollten dir die ganzen Delphi-Cracks hier nur sagen, dass du mit der Funktion

Delphi-Quellcode:
randomize;
den Zufallsgenerator praktisch initialisierst und mit der Funktion

Delphi-Quellcode:
random(bereich)+minimum;
den Bereich angibst, in dem die Zahl liegen soll .. Weiterhin wird vom Minimum ab gezählt, sprich, wenn du eine Zahl zwischen 100 und 200 haben willst (das sind 100 Zahlen --> bereich = 100) nimmst du folgenden Befehl :

Delphi-Quellcode:
random(100)+101; // ja, eigentlich müsste das Minimum 100 sein, jedoch hat Delphi doch seine Standard-Krankheit dass immer und überall von 0 ab gezählt wird, nicht von 1 ;)

Stimmts Jungs ? :D

Pseudemys Nelsoni 26. Mai 2004 09:10

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
wie soll das denn gehen mit + minimum?

Sagen wir mal ich habe es so:

Delphi-Quellcode:
procedure irgendwas;
var
  Minimum, Maximum: integer;
  Ergebnis: integer;
begin
  Randomize;
  Minimum := 20;
  Maximum := 100;
  Ergebnis := Random(Maximum)+Minimum;
end;
So, toll, was ist wenn Random(Maximum) bereits 90 rauskommt? dann wird Minimum(20) dazugerechnet, und dann ist es ÜBER dem Maximum, nämlich 110.... :roll:


Zitat:

doch für was steht das Succ
Succ(Successor) gibt dir den Nachfolger eines Elements im Typ. Pred gibt dir den Vorgänger

Matze 26. Mai 2004 09:11

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von Stevie
Delphi-Quellcode:
Random(Succ(High-Low)) + Low;

Wenn, dann geht es so. ;)

yankee 26. Mai 2004 09:54

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Ach, hör mal: Die Funktion Random(x) liefert dir einen zufälligen Wert. Dieser Wert ist >=0 und <x.
Wenn du jetzt eine Zahl haben willst, zwischen 80 und 100, dann lässt du dir einfach eine Zufallszahl zwischen 0 und 20 ausgeben und addierst am Ende noch 80 hinzu.

Stevie 26. Mai 2004 10:00

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von yankee
Ach, hör mal: Die Funktion Random(x) liefert dir einen zufälligen Wert. Dieser Wert ist >=0 und <x.
Wenn du jetzt eine Zahl haben willst, zwischen 80 und 100, dann lässt du dir einfach eine Zufallszahl zwischen 0 und 20 ausgeben und addierst am Ende noch 80 hinzu.

Was meinst du denn, was
Delphi-Quellcode:
Random(Succ(High-Low)) + Low;
macht? :lol:
Wenn du also Random(20) eingibst, was kommt raus? Richtig, Zahlen im Bereich von 0-19, deshalb Succ (Nachfolger) davon plus der untere Wert.

iaby 26. Mai 2004 10:18

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Delphi-Quellcode:
function zahl(von, bis: integer): integer;
begin
result:= random(bis - (von + 1)) + von + 1;
end;
funkt nur, wenn "von" kleiner als "bis" ist.
kannst ja noch ne abfrage reinmachen.
rarndomize dann halt im onCreate oder so.

gruss,
iaby

Stevie 26. Mai 2004 10:25

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von sakura
Und ab Delphi 6

Delphi-Quellcode:
uses
  Math;

...
// function RandomRange(const AFrom, ATo: Integer): Integer;
Wert := RandomRange(1000, 2000);
...:cat:...

Und hier die Definition dieser Funktion:
Delphi-Quellcode:
function RandomRange(const AFrom, ATo: Integer): Integer;
begin
  if AFrom > ATo then
    Result := Random(AFrom - ATo) + ATo
  else
    Result := Random(ATo - AFrom) + AFrom;
end;

yankee 26. Mai 2004 10:35

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
@Stevie Ist ja gut, ich wollte es ja nur verständlicher darstellen...

Stevie 26. Mai 2004 10:39

Re: Zufälliger Integer-Wert zwischen zwei zahlen
 
Zitat:

Zitat von yankee
@Stevie Ist ja gut, ich wollte es ja nur verständlicher darstellen...

Ich wollte nur vermeiden, dass das +/-1-Problem auftaucht, hatte ich schon oft: "Da kommt ja überhaupt nie 20 raus, obwohl ich Random(20) eingegeben habe!" :wall: :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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 by Thomas Breitkreuz