Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wahrscheinlichkeit bestimmen (https://www.delphipraxis.net/59623-wahrscheinlichkeit-bestimmen.html)

PierreB 26. Dez 2005 09:37


Wahrscheinlichkeit bestimmen
 
Moin,

folgendes Problem: Per Random erzeuge ich ganz normale Zahlen von 0-4. Wenn der Zufall eine 0-2 generiert hat man verloren, bei einer 3-4 hat man gewonnen. Klappt auch alles gut soweit. Jetzt wollte ich die Wahrscheinlichkeit das man gewinnt oder verliert etwas beeinflussen, sodass die Wahrscheinlichkeit das man gewinnt höher ist. Also dachte ich mir beeinflusse ich einfach den Random-Aufruf:
Delphi-Quellcode:
function Wahrscheinlichkeit(x : Single) : Single;
begin
 result := Random(5 div x)
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
edit2.Text := FloatToStr(Wahrscheinlichkeit(StrToFloat(edit1.Text)));
end;
Zuerst hatte die Funktion Wahrscheinlichkeit einen Rückgabewert vom Typ Integer, hab ich dann x zum Beispiel den Wert 1 zugewiesen kam auch nur 0-2 heraus. Da ich aber möchte das 3-4 kommt muss ja x < 1 sein, also hab ich einen Rückgabewert vom Typ Single bestimmt. Beim Compilieren sagt mir nun Delphi "[Fehler] Unit2.pas(30): E2015 Operator ist auf diesen Operandentyp nicht anwendbar". Wo liegt mein Fehler, oder wie beeinflusst man die Wahrscheinlichkeit von Random ? Irgendwie steh ich mal wieder auf dem Schlauch...

Danke und schöne Feiertage noch,

tommie-lie 26. Dez 2005 09:41

Re: Wahrscheinlichkeit bestimmen
 
Die Operatoren div und mod sind ausschließlich auf ganzzahlige Typen anwendbar und liefern auch immer ein ganzzahliges Ergebnis. Single ist aber nichtmal ordinal.

PierreB 26. Dez 2005 09:46

Re: Wahrscheinlichkeit bestimmen
 
Zitat:

Zitat von tommie-lie
Die Operatoren div und mod sind ausschließlich auf ganzzahlige Typen anwendbar und liefern auch immer ein ganzzahliges Ergebnis. Single ist aber nichtmal ordinal.

Ah ok, dumme Frage, wie dividiert man denn nicht ganzzahlige Zahlen ? :gruebel:

Chegga 26. Dez 2005 09:49

Re: Wahrscheinlichkeit bestimmen
 
Hi,

mit /. :zwinker:

MfG Marc

PierreB 26. Dez 2005 09:53

Re: Wahrscheinlichkeit bestimmen
 
Zitat:

Zitat von Chegga
Hi,

mit /. :zwinker:

Moin Marc,

hatte ich als erstes probiert, dann bringt mir Delphi seltsamerweise den Fehler "[Fehler] Unit2.pas(30): E2250 Es gibt keine überladene Version von 'Random', die man mit diesen Argumenten aufrufen kann".... :?

Nikolas 26. Dez 2005 09:54

Re: Wahrscheinlichkeit bestimmen
 
Warum nicht einfach so:
Delphi-Quellcode:
 
prob:= real; aus [0;1]
prob:= 0.6;
if random > prob then showmessage('Ereigniss eingetreten');

PierreB 26. Dez 2005 10:03

Re: Wahrscheinlichkeit bestimmen
 
Delphi-Quellcode:
if random > prob then showmessage('Ereigniss eingetreten');
So wäre es zwar möglich, ist aber nicht unbedingt das was ich wollte. Ich möchte die per Random erzeugte Zahl direkt in ihrer Wahrscheinlichkeit beeinflussen, und das muss doch irgendwie möglich sein, oder ?

Trotzdem danke. ;)

tommie-lie 26. Dez 2005 10:04

Re: Wahrscheinlichkeit bestimmen
 
Zitat:

Zitat von PierreB
dann bringt mir Delphi seltsamerweise den Fehler "[Fehler] Unit2.pas(30): E2250 Es gibt keine überladene Version von 'Random', die man mit diesen Argumenten aufrufen kann".... :?

Das ist nicht seltsam, das ist normal, denn es gibt keine Version von Random(), die man mit Fließkommawerten aufrufen kann. Entweder Integer, oder gar kein Parameter.
Übrigens erhöhst du mit deiner Rechnung auch die Zahl der möglichen Ergebnisse, wenn du nur auf 3 oder 4 prüfst, gehen alle mit 5, 6 oder mehr verloren.
Nikolas' Vorgehen ist das richtige, um eine beliebige Wahrscheinlichkeit zu erzeugen.

Edit:
Zitat:

Zitat von PierreB
Ich möchte die per Random erzeugte Zahl direkt in ihrer Wahrscheinlichkeit beeinflussen

Du könntest ein Galton-Brett simulieren, oder ganz einfach bestimmten Bereichen zwischen 0 und 1 verschiedene Ganzzahlen zuweisen.

PierreB 26. Dez 2005 10:07

Re: Wahrscheinlichkeit bestimmen
 
Zitat:

denn es gibt keine Version von Random(), die man mit Fließkommawerten aufrufen kann.
Hm ok, schade eigentlich. Aber gut, dann mach ichs so wie von Toxman vorgeschlagen, wenns nicht direkt mit Random geht.

Also vielen Dank an alle. :cheers:


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