Zufallszahl zwischen a und b

Anfängerfragen zum Programmieren mit PureBasic.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Zufallszahl zwischen a und b

Beitrag von Dare Devil »

Hallo.
Gibt es einen Trick eine Zufallszahl zwischen zwei bestimmten Zahlen zu ermitteln. Random() ermittelt ja nur eine Zufallszahl zwischen 0 und einer Zahl, ich moechte diese Anfangsposition aber selbst bestimmen koennen - z.B. eine Zufallszahl zwischen -100 und 100. Gibts da irgendeine Loesung?
Bild + Bild

Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

Debug -100 + Random(200)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Entweder im Forum suchen oder schnell selbst überlegen.

Ein Wert zwischen -100 und 100 sind ingesamt 201 Möglichkeiten und es beginnt mit -100.

Also berechnet man die entsprechende Zufallszahl mit Random(200) - 100.

Wenn deine Grenzen allgemein min und max sind, geht es mit Random(max - min) + min.
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Funktioniert einwandfrei - dankeschoen :)
Bild + Bild

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

falls du später noch "andere" Zufallszahlen brauchst, kann ich dir dieses Macro geben:

Code: Alles auswählen

Macro RandomArea(StartValue, EndValue, StepValue=1) 
 ( Random(Int(((EndValue)-(StartValue))/(StepValue)))*(StepValue)+(StartValue) ) 
EndMacro
damit könntest du dann auch deinen Fall machen :
RandomArea(-100, 100)

oder zum Beispiel nur gerade Zahlen von 10 bis 20:
RandomArea(10, 20, 2)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

STARGÅTE hat geschrieben:falls du später noch "andere" Zufallszahlen brauchst, kann ich dir dieses Macro geben:

Code: Alles auswählen

Macro RandomArea(StartValue, EndValue, StepValue=1) 
 ( Random(Int(((EndValue)-(StartValue))/(StepValue)))*(StepValue)+(StartValue) ) 
EndMacro
damit könntest du dann auch deinen Fall machen :
RandomArea(-100, 100)

oder zum Beispiel nur gerade Zahlen von 10 bis 20:
RandomArea(10, 20, 2)
Das koennte mir sehr nuetzlich werden, danke fuer deine Muehe :allright:
Bild + Bild

Bild
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Beitrag von DrNo »

Hab da auch noch eine Frage dazu, also zu Random() :roll:

Wie kann ich in Random festlegen was für zeichen und wie viele benutzt werden?
Also nur Zahlen, oder auch Buchstaben oder Sonderzeichen und so.

Es gibt ja Random(#FFFF) aber das versteh ich nicht...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Random($FFFF) ist einfach nur Random(65535), nur in Hex-schreibweise.

wenn du bestimmte zeichen erzeugen willst, musst du deren ASCII-codes erzeugen.

z.b. erzeugt Chr(Random(9)+48) die ziffern 0-9
für zahlen und großbuchstaben musst du etwas tricksen, um die zwei bereiche abzudecken:

Code: Alles auswählen

a = Random( 35 )
If a > 9
  a + 55
Else
  a + 48
EndIf
wenn du eine unregelmäßige reihe von buchstaben erzeugen willst, benutzt du am besten ein Array:

Code: Alles auswählen

Dim ascii$(19)

For n=0 To 19
  Read ascii$( n )
Next

DataSection
Data.s "0", "1", "3", "5", "6", "8", "A", "C", "D", "F", "H", "L", "M", "N", "P", "Q", "R", "S", "T", "U"
EndDataSection

For n=0 To 50
Debug ascii$( Random( 19 ) )
Next
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Kaeru Gaman hat geschrieben:
wenn du eine unregelmäßige reihe von buchstaben erzeugen willst, benutzt du am besten ein Array:

Code: Alles auswählen

Dim ascii$(19)

For n=0 To 19
  Read ascii$( n )
Next

DataSection
Data.s "0", "1", "3", "5", "6", "8", "A", "C", "D", "F", "H", "L", "M", "N", "P", "Q", "R", "S", "T", "U"
EndDataSection

For n=0 To 50
Debug ascii$( Random( 19 ) )
Next
Man sollte nicht unerwähnt lassen, dass dieser Code nicht mehr so unter PB4.3 funktioniert.
(Da heisst es dann Read.s ascii$( n ))
Antworten