Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Random zwischen zwei Zahlen (https://www.delphipraxis.net/11668-random-zwischen-zwei-zahlen.html)

Die Muhkuh 11. Nov 2003 16:11


Random zwischen zwei Zahlen
 
Hiho,

ich hab ne Frage, die wahrscheinlich sau einfach ist aber ich kommt nicht drauf :oops:

Wie kann ich ne Zufallszahl zwischen z.b 50 und 100 erzeugen.

Man könnte z.b das ja so schreiben:

Delphi-Quellcode:
var
  a: Integer;
begin
  randomize;
  a := random(50)
  a := a + 50;
end;
Um ne zufallszahl zwischen 50 und 100 bekommt

Aber es gibt doch da bestimmt ne elegantere Lösung!

Treffnix 11. Nov 2003 16:17

Re: Random zwischen zwei Zahlen
 
Das ist eigentlich die elegante Lösung

neolithos 11. Nov 2003 16:17

Re: Random zwischen zwei Zahlen
 
Mir fällt keine ein

außer vielleicht

Delphi-Quellcode:
a := Random(50)+ 50; // für zw. 50..99
a := Random(51)+ 50; // für zw. 50..100

Die Muhkuh 11. Nov 2003 16:20

Re: Random zwischen zwei Zahlen
 
hmm, gut dann kann man nix anderes machen! THX

choose 11. Nov 2003 16:25

Re: Random zwischen zwei Zahlen
 
Rein mathematisch gibt es wohl nichts "einfacheres" als eine lineare Abbildung (hier: Addition), um alle Elemente eines Intervalls eineindeutig auf ein Bildinterval zu projezieren.

Falls Du aber diesen Fall häufiger hast, könntest Du Dir eine Hilfsfunktion schreiben in der Art
Delphi-Quellcode:
function MeinIntervall(const UntereGrenze, ObereGrenze: Integer): Integer;
oder
Delphi-Quellcode:
function MeinFloatervall(const UntereGrenze, ObereGrenze: Double): Double;

Stanlay Hanks 11. Nov 2003 16:30

Re: Random zwischen zwei Zahlen
 
Hallo. In der Unit Maths gibt es eine Funktion RandomRange(Anfangswert,Endwert)
Die berechnet einen Wert zwischen Anfangswert und Endwert (irgendwo logisch :wink:)
Vielleicht hilft das weiter.

Man liest sich, Stanlay :hi:

choose 11. Nov 2003 16:37

Re: Random zwischen zwei Zahlen
 
Hallo Stanley,

wenn ich das richtig lese, verwendet Spider D5.
In der Math-Unit von D5 (Enterprise) konnte ich die Funktion nicht finden, über D6 kann ich keine Aussage treffen. In D7 (Architekt) ist sie aber vorhanden.

Die Muhkuh 11. Nov 2003 16:40

Re: Random zwischen zwei Zahlen
 
Unit Math! Wo gibt's die????


:wall: :wall: :wall: Hat gestern die Unit Math gelöscht :wall: :wall: :wall:

MrKnogge 11. Nov 2003 17:23

Re: Random zwischen zwei Zahlen
 
die wird von Delphi mitgeliefert,
wobei bei dir wohl die funktion noch
nicht verfügbar ist.

Da dürfte allerdings auch nichts anderes
drinnen stehen wie oben gepostet wurde,
von daher halte ich diesefunction für sinnlos....

Die Muhkuh 11. Nov 2003 17:31

Re: Random zwischen zwei Zahlen
 
Doch irengwo hier geistert eine Unit "Math" rum!
Und die Such ich!

MrKnogge 11. Nov 2003 17:42

Re: Random zwischen zwei Zahlen
 
die hast du schon !
(einfach math in die uses klausel hinzufügen)

aber die hat noch ncht so viele funktionen wie bei D6 oder D7.

Stanlay Hanks 11. Nov 2003 19:35

Re: Random zwischen zwei Zahlen
 
Hi Choose! Danke für die Korrektur. Mir war nicht bekannt, dass es da diese Funktion noch gibt, weil ich selber Delphi 7 verwende.

Man liest sich, Stanlay :hi:

Haegar 11. Nov 2003 20:24

Re: Random zwischen zwei Zahlen
 
gibt aber noch ne lösung, die man normal mit random machen kann!
Delphi-Quellcode:
zz:=random(51)+50;
heißt soviel wie ziehe eine zahl zwischen 0 und 50, und addiere 50 dazu! somit wäre die frage ebenfalls beantwortet ;)

ciao

Matze 11. Nov 2003 20:29

Re: Random zwischen zwei Zahlen
 
Zitat:

Zitat von neolithos
Delphi-Quellcode:
a := Random(51)+ 50; // für zw. 50..100

was das selbe wär. :mrgreen:

Haegar 11. Nov 2003 20:31

Re: Random zwischen zwei Zahlen
 
lol, verdammt hab ich überlesen :duck:

passiert halt

Matze 11. Nov 2003 20:34

Re: Random zwischen zwei Zahlen
 
Brauchst dich doch nicht zu verstecken. ;)

Ich hab vorher auch erst Mist gepostet, aber es dann noch verbessert. :D

APP 11. Nov 2003 20:35

Re: Random zwischen zwei Zahlen
 
Hallo Choose,

Zitat:

Zitat von choose
...In der Math-Unit von D5 (Enterprise) konnte ich die Funktion nicht finden, über D6 kann ich keine Aussage treffen. In D7 (Architekt) ist sie aber vorhanden.

in meinem D5 Pro zu Hause gibt es die Funktion:
Delphi-Quellcode:
{ RandG produces random numbers with Gaussian distribution about the mean.
  Useful for simulating data with sampling errors. }
function RandG(Mean, StdDev: Extended): Extended;
ist das vielleicht die Gesuchte?

Pseudemys Nelsoni 12. Nov 2003 14:49

Re: Random zwischen zwei Zahlen
 
ich wusste nichtmal das delphi ne eigene funktion hat....ich hatte sie mir damals so geschrieben:

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;

Treffnix 12. Nov 2003 15:16

Re: Random zwischen zwei Zahlen
 
:gruebel: da würdest du dir aber auch mit
Delphi-Quellcode:
Result := Random( RandTo ) + RandFrom - 1
einige sinnlose Schleifendurchläufe ( und auch Zeilen ) ersparen.

himitsu 12. Nov 2003 15:45

Re: Random zwischen zwei Zahlen
 
Zitat:

Zitat von Treffnix
:gruebel: da würdest du dir aber auch mit
Delphi-Quellcode:
Result := Random( RandTo ) + RandFrom - 1
einige sinnlose Schleifendurchläufe ( und auch Zeilen ) ersparen.

Also wenn schon, dann so:
Delphi-Quellcode:
If RandTo > RandFrom Then
  Result := RandFrom + Random(RandTo - RandFrom + 1)
Else
  Result := 0;
Dein's gibt einen Zufallswert in einem anderen Bereich zurück:
Delphi-Quellcode:
RandFrom - 1 <= Result < RandTo + RandFrom - 1

Result = (RandFrom - 1) .. (RandTo + RandFrom - 2)
so sollte es doch ausseh'n:
Delphi-Quellcode:
RandFrom <= Result <= RandTo

Result = RandFrom .. RandTo

Treffnix 12. Nov 2003 15:54

Re: Random zwischen zwei Zahlen
 
Zitat:

Zitat von himitsu
Also wenn schon, dann so:
Delphi-Quellcode:
If RandTo > RandFrom Then
  Result := RandFrom + Random(RandTo - RandFrom + 1)
Else
  Result := 0;

Ups, da haste natürlich recht :oops:

Brüggendiek 12. Nov 2003 22:44

Re: Random zwischen zwei Zahlen
 
Hallo!

@Silent: zum n+78631. Male: Das Randomize gehört nicht in die Zufalls-Ermittlungsprozedur, sondern wird nur einmal, z.B. im FormCreate, aufgerufen. Sonst gibt das merkwürdige Effekte!

Hintergrund: durch Randomize wird der Pseudo-Zufallsgenerator mit der Uhrzeit initialisiert. Bei gleicher Uhrzeit und gleichem Intervall liefert Random auch den gleichen "Zufalls"-Wert!

Deshalb hat man bei
Delphi-Quellcode:
var
  feld:Array [ 1 .. 10 ] of Integer;
  lauf:Integer
...
for lauf := 1 to 10 do
begin
  Randomize;
  feld[lauf]:=Random(50);
end;
zu fast 100% alle Array-Elemente auf demselben Wert oder erhält in den ersten Elementen einen Wert und danach im Rest den nächsten, weil der Zeitwechsel dazwischen lag (ich weiß jetzt nicht, wie genau Delphi die Uhrzeit benutzt).

Nebenbei ist es natürlich Quatsch, solange zu würfeln, bis das Ergebnis paßt. Da haben wir bei der berühmten "Ziehung der Lottozahlen" ja schon ausreichend Erfahrung mit doppelten Zahlen und ihrer Vermeidung.

Gruß

Dietmar Brüggendiek

Pseudemys Nelsoni 13. Nov 2003 07:27

Re: Random zwischen zwei Zahlen
 
ich führ das randomize ja auch nicht 10 mal in einer prozedur aus wie in deinem beispiel, sondern ledliglich 1mal davor... und "Komische" ergebnisse hab ich keine...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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