Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zufallszahl mit Kommerstellen (https://www.delphipraxis.net/130379-zufallszahl-mit-kommerstellen.html)

daNiii 7. Mär 2009 14:05


Zufallszahl mit Kommerstellen
 
Was mache ich bloß falsch? Mein Ziel ist es eine Zufallszahl zu erstellen zwischen 0 und 1.
Das Ergebniss soll in Kommerstellen ausgegenen werden. (zB. 0,9786523)

Hier ist mein Programmieransatz:

Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
Zufallszahl: extended;
Wert: string;
begin

Zufallszahl:= trunc(random(1) +0);
randomize;
Wert:= FormatFloat('0.00', Zufallszahl);
showmessage(floattostr(Wert);
end;

Derzeit wird in meinem showmessage stets die Zahl 0,00 ausgegeben.
Ich hoffe mir kann jemand helfen und mich auf meinen Fehler aufmerksam machen.
Danke!

Noedel 7. Mär 2009 14:07

Re: Zufallszahl mit Kommerstellen
 
Delphi-Quellcode:
var zahl: extended;
begin
zahl := random
end;

Corpsman 7. Mär 2009 14:07

Re: Zufallszahl mit Kommerstellen
 
Das Problem ist das Trunc

es schneidet den Nachkommateil ab

deswegen kommt immer 0 raus, so dürfte es besser sein.

Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
Zufallszahl: extended;
Wert: string;
begin

Zufallszahl:= (random(1));
randomize;
Wert:= FormatFloat('0.00', Zufallszahl);
showmessage(floattostr(Wert);
end;

Noedel 7. Mär 2009 14:12

Re: Zufallszahl mit Kommerstellen
 
Zitat:

Zitat von Corpsman
Das Problem ist das Trunc

es schneidet den Nachkommateil ab

deswegen kommt immer 0 raus, so dürfte es besser sein.

Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
Zufallszahl: extended;
Wert: string;
begin

Zufallszahl:= (random(1));
randomize;
Wert:= FormatFloat('0.00', Zufallszahl);
showmessage(floattostr(Wert);
end;

meinst du nicht, dass der Vorschlag s.o. einfacher ist?

p.s: habe vergessen, dass randomize noch aufgerufen werden muss, bevor man ne zahl generiert... :D
p.p.s:KommA schreibt man nicht mir "er" :P

jaenicke 7. Mär 2009 14:13

Re: Zufallszahl mit Kommerstellen
 
Nein, wie schon geschrieben wurde: Ohne Parameter...
Random mit 1 als Parameter gibt einen Integerwert zwischen 0 und 1 ohne die 1 selbst zurück...

Random ohne Parameter gibt einen Fließkommawert zwischen 0 und 1 zurück.

himitsu 7. Mär 2009 14:20

Re: Zufallszahl mit Kommerstellen
 
Random(1) liefert doch schon einen Integer (bemnach ist Trunc da sinnlos),
allerdings im Bereich von
0 <= X < Range

also bei 1 immer eine 0, da 0 <= X < 1

Delphi-Quellcode:
Range(2)
würde da eine 0 oder 1 liefern, da 0 <= X < 2


Range ohne Parameter liefert eine Gleitkommazahl im Bereich von
0 <= X < 1

also eine Zahl von 0 bis 0,999.....

daNiii 7. Mär 2009 14:21

Re: Zufallszahl mit Kommerstellen
 
Danke für eure Zahlreichen Antworten!
vorher habe ich noch nicht gewusst, was Trunc bedeutet.
ich hatte jedoch noch einen 2. Fehler.
nämlich: Man muss zuerst randomize; schreiben bevor man die Zufallszahl bildet.
Für die Richtigstellung, hier noch einmal die richtige Lösung
Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
Zufallszahl: extended;
Wert: string;
begin

Zufallszahl:= (random(1));
randomize;
Wert:= FormatFloat('0.00', Zufallszahl);
showmessage(floattostr(Wert);
end;
Danke! :-D

himitsu 7. Mär 2009 14:23

Re: Zufallszahl mit Kommerstellen
 
Zitat:

Zitat von daNiii
ich hatte jedoch noch einen 2. Fehler.
nämlich: Man muss zuerst randomize; schreiben bevor man die Zufallszahl bildet.
Für die Richtigstellung, hier noch einmal die richtige Lösung

ließ nochmal in deiner OH unter Delphi-Referenz durchsuchenRandomize nach, da steht dann auch, daß man dieses nicht immer aufrufen soll, sondern nur einmal beim Programmstart.

Teekeks 7. Mär 2009 14:31

Re: Zufallszahl mit Kommerstellen
 
und das:
Delphi-Quellcode:
Zufallszahl:= (random(1));
randomize;
ist auch die falsche reinfolge...

Noedel 7. Mär 2009 14:33

Re: Zufallszahl mit Kommerstellen
 
Darf ich nochmal vergleichen? Deine lösung:

Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
Zufallszahl: extended;
Wert: string;
begin
Zufallszahl:= (random(1));
randomize;
Wert:= FormatFloat('0.00', Zufallszahl);
showmessage(floattostr(Wert);
end;
meine Lösung:
Delphi-Quellcode:
procedure Form1.Zufallszahl_bilden();
var
 zufallszahl: extended;
begin
  //Randomize bereits "aktiviert"
  zufallszahl := random;
  showmessage(floattostr(zahl);
end;
welche macht sich besser?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr.
Seite 1 von 4  1 23     Letzte »    

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