Zufallszahlen kleiner als 0

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Zufallszahlen kleiner als 0

Beitrag von SoS »

Ich weiss nicht ob es das schon gab aber ich habe dazu nichts gefunden und brauchte das gerade dringend.

Code: Alles auswählen

Procedure Rnd(Min.l, Max.l) 
  Repeat
    result.l=(Random(Max-Min)+Min)-(Random(Max-Min)+Min) 
  Until result <= Max And result >= Min
  ProcedureReturn result 
EndProcedure

For X= 1 To 20
  Debug  Rnd ( -60,60 )
Next
Zuletzt geändert von SoS am 09.09.2005 12:01, insgesamt 1-mal geändert.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Re: Zufallszahlen kleiner als 0

Beitrag von Deeem2031 »

Man könnt ja auch einfach Random(120)-60 nehmen ...
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

Hm...

Man könnte es auch so machen:
Das wäre dann noch besser aus meiner Sicht:

Code: Alles auswählen

zufallsbereich=1000

Select Random(1)
  Case 1
    zufallszahl=Random(zufallsbereich)*-1
  Case 0
    zufallszahl=Random(zufallsbereich)
EndSelect
Debug zufallszahl
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
code2nil
Beiträge: 9
Registriert: 17.09.2004 09:39
Wohnort: Nähe K/BN/SU/GM

Beitrag von code2nil »

Allgemein liefert Random(max-min)+min eine ZZ im Intervall [min; max], wobei min, max mit min<=max beliebige ganze Zahlen sein dürfen.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: Zufallszahlen kleiner als 0

Beitrag von SoS »

Deeem2031 hat geschrieben:Man könnt ja auch einfach Random(120)-60 nehmen ...
nur

Code: Alles auswählen

Debug  Rnd ( -60,60 )
ist nur ein Beispiel und ich kann da eingeben was ich will :D

z.b.

Code: Alles auswählen

Procedure Rnd(Min.l, Max.l) 
  Repeat 
    result.l=(Random(Max-Min)+Min)-(Random(Max-Min)+Min) 
  Until result <= Max And result >= Min 
  ProcedureReturn result 
EndProcedure 

For X= 1 To 20 
  Debug  Rnd ( -14311,-123 )
  Debug  Rnd ( 60,6000 )
  Debug  Rnd ( -60,60 )
  Debug  Rnd ( -100,0 )
  Debug  Rnd ( -14311,14311 )
  Debug ""
Next
code2nil
Beiträge: 9
Registriert: 17.09.2004 09:39
Wohnort: Nähe K/BN/SU/GM

Beitrag von code2nil »

Wie gesagt

Code: Alles auswählen

Procedure Rnd(Min.l, Max.l)
  result.l=Random(Max-Min)+Min)
  ProcedureReturn result
EndProcedure

For X= 1 To 20
  Debug  Rnd ( -14311,-123 )
  Debug  Rnd ( 60,6000 )
  Debug  Rnd ( -60,60 )
  Debug  Rnd ( -100,0 )
  Debug  Rnd ( -14311,14311 )
  Debug ""
Next
sollte klappen...
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

hmm,stimmt. (Bis auf das ")" hinter Min :) )

Ich habe das scheinbar zu verkompliziert . :mrgreen:
code2nil
Beiträge: 9
Registriert: 17.09.2004 09:39
Wohnort: Nähe K/BN/SU/GM

Beitrag von code2nil »

hmm,stimmt. (Bis auf das ")" hinter Min Smile )
Äh, genau - hatte das nur so reingetipselt ;-)
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Code: Alles auswählen

bla.l = Random(2000)
!NEG dword[v_bla]
Wenn ich da jetzt nicht was falsch verstanden habe, sollte das helfen...
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

:D Da will jemand seine ASM Kentnisse zeigen..

ein einfaches a = -Random(2000) würds auch tun

und

du hast es falsch verstanden^^ mein Code oben ist auch falsch
Antworten