Seite 2 von 2

Verfasst: 09.09.2005 14:17
von SoS
AndyX hat geschrieben:
Wenn ich da jetzt nicht was falsch verstanden habe, sollte das helfen...
nicht das Ihr euch hier vergaloppiert ,auch ob der Wert positiv oder negativ ist sollte per Zufall enschieden werden . :)

Gesucht war ein zufälliger Wert zwischen -x und +x

Verfasst: 09.09.2005 18:02
von AndyX
Achsoooo, positiv oder negativ...

Für die VB'ler

Verfasst: 14.01.2006 19:58
von S-terix
Hi,

sorry dass ich den alten Thread hochhole aber ich denke es ist für die Leute die von VB kommen und ihre Programme portieren möchten von bedeutung die mit RND() arbeiten.

Da in VB die Funktion im Bereich von >0 und <=1 liegt kann man sich die einfach nachschreiben:

Code: Alles auswählen

Procedure.f RND()
  ProcedureReturn ( 0.01 * (Random(99) + 1) )
EndProcedure
und jetzt ein beispiel zum Topic, wie schon meine Vorgänger beschrieben, eben nur die "VB" RND funktion implementiert

Code: Alles auswählen

Procedure.f RND_EX(floatMin.f, floatMax.f)
  ProcedureReturn (floatMax - floatMin) * (0.01 * (Random(99) + 1)) + floatMin
EndProcedure
Viele Grüße

Verfasst: 14.01.2006 21:01
von NicTheQuick
@S-terix: Wieso nur eine Genauigkeit von 0.01? Ist das in VB auch so?

Also wieso nicht so?

Code: Alles auswählen

Procedure.f RND_EX(floatMin.f, floatMax.f) 
  ProcedureReturn (floatMax - floatMin) * (0.00000001 * (Random(99999999) + 1)) + floatMin 
EndProcedure

Verfasst: 15.01.2006 00:01
von nco2k
warum nicht einfach so:

Code: Alles auswählen

Procedure MyRandom(Limit.l)
  Result.l = Random(1) ;hier wird entschieden ob positiv oder negativ
  If Result = 1 ;positive zahlen
    Result = Random(Limit)
  ElseIf Result = 0 ;negative zahlen
    Result = -Random(Limit)
  EndIf
  ProcedureReturn Result
EndProcedure

Debug MyRandom(10) ; gibt eine zufällige zahl zurück zwischen -10 und +10
c ya,
nco2k

Verfasst: 15.01.2006 01:25
von Batze

Code: Alles auswählen

Procedure MyRandom(Limit.l)
ProcedureReturn Random(Limit << 1) - Limit
EndProcedure

Verfasst: 15.01.2006 03:20
von S-terix
@NicTheQuick: Du hast natürlich recht, daran hab ich jetzt nicht gedacht. Ich hatte erst vor kurzem eine RND Funktion gebraucht - für mich waren die Werte ausreichend.

@nco2k: Ich finde dein Beispiel ist nicht falsch aber kann man sich meiner meinung nach auch sparen.

Hier aus der MSDN:
Verwenden Sie die folgende Formel, um ganzzahlige Zufallszahlen innerhalb eines bestimmten Bereichs zu erzeugen:

Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)

Obergrenze steht hier für die größte Zahl des Bereichs und Untergrenze für die kleinste Zahl des Bereichs.
[edit]
Zudem möchte man vielleicht auch nur werte zwichen 50 und 100 oder -50 bis 20 haben. Mir fällt auch auf dass du 2 mal Random aufrufst was mir persönlich nicht gefällt
[/edit]

Aber war ja nur ein Vorschlag :)

Viele Grüße

Verfasst: 15.01.2006 11:51
von Batze

Code: Alles auswählen

Procedure MyRandom(Min.l, Max.l)
ProcedureReturn Random(Max - Min) + Min
EndProcedure
Das sollte deine Anforderungen erfüllen. :allright:

Edit: Oh es geht noch leichter als ich dachte.

Verfasst: 15.01.2006 12:18
von ts-soft
S-terix hat geschrieben: Hier aus der MSDN:
Verwenden Sie die folgende Formel, um ganzzahlige Zufallszahlen innerhalb eines bestimmten Bereichs zu erzeugen:

Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Willste uns damit sagen, Rnd sei eine API-Funktion?
Oder was hat PB mit VB-Runtime zu tun :mrgreen:

Verfasst: 15.01.2006 18:29
von S-terix
Hallo,

@All : ich glaube wir reden aneinander vorbei :mrgreen: . Das Zitat aus der MSDN hat natürlich nichts mit einer API und schon gar nichts mit PB zu tun.

Wie schon gesagt ist das eine RND Funktion von VB, und hat einen minimalen Wert >0 und maximalen Wert <= 1 und sind float-Werte!

Das Beispiel aus der MSDN zeigt ja nur wie man auch negative Werte erhalten kann, durch das Int davor eben nur Ganzzahlen weil die RND funktion eben float-Werte (im oben genannten Wertebereich) zurückgibt.

Ich wollte eigentlich auch nur einen Tip für die VB'ler geben die gewechselt sind oder wechseln werden.

Viele Grüße