Zufallszahlen in eine Zahlenbereich

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Zufallszahlen in eine Zahlenbereich

Beitrag von duli »

:oops: Uf da bin ich schon wieder. Ich hab mich noch durch das Thema der Zufallszahlen gewältzt. Also ich brauche für mein kleines Programm eine Zufallszahl welche ich ja bereits schon habe.

Code: Alles auswählen

TextGadget(#StringZahl1,20,30,20,20,Str(Random(10)))
Und mein Problem ist nicht das ich eine wirklich wahre Zufallszahl bekomme, aber ich würde gerne Zahlen in einem Bereich haben z.B. nur 2 bis 10 .
Muss ich dafür eine Prozedur schreiben die so lange Zufallszahlen erzeugt bis sie meinen Kriterien entpsricht, oder gibt es da Anweisungen die das direckt erzeugt? :freak:

Danke für euer Hilfe und mit Denken.

Duli
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

>>oder gibt es da Anweisungen die das direckt erzeugt?

Keine Anweisung, sondern simple Mathematik ;)

Code: Alles auswählen

TextGadget(#StringZahl1,20,30,20,20,Str(Random(8) + 2))
:allright:
-.-"
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

:oops: :oops: :oops: :oops: :oops: :oops: :oops:

Mann bin ich blöd, klar doch so einfach und so gut. Danke vielmals

:allright:
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Du kannst dir das aber als eigene Anweisung basteln, wenn du möchtest. Ist einfacher und nimmt einem Denkarbeit ab.
Und zwar einfach als Prozedur. Wenn du dich schon mit Macros auskennst würde ich an deiner Stelle auf jeden Fall Macros nehmen.

Hier als Prozedur für Neulinge: :)

Code: Alles auswählen

Procedure ZufallszahlBereich(von, bis)
	ProcedureReturn Random(bis-von)+von
EndProcedure
Hier als Macro für nicht-mehr-ganz-Neulinge: :D

Code: Alles auswählen

Procedure ZufallszahlBereich(von, bis)
	(Random(bis-von)+von)
EndProcedure
Beide Dinger lassen sich gleich handhaben, du merkst beim Programmieren also nicht den Unterschied.
Der Unterscheid liegt jedoch in der Performance.
Du kannst ja selber nachlesen, was der Unterschied zwischen Macros und Procedures sind. Nur ganz kurz: In diesem Fall sind Macros eindeutig vorzuziehen, sie sind (im Programm hinterher) schneller.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

Hallo AND51
Danke für die Anregung, habe über Macros in der Hilfe nachgelesen, aber ich habe nicht alles begriffen.

Also das mit dem Speicherplatz und der Performance habe ich noch nicht ganz so begriffen, immer wieder erhalte ich Hinweise sorgsam mit dem Speicher oder der Performance zu sein. Ich dachte das sei Geschichte und bei der heutigen Hardware uninteresant? Doch wenn so viele Fachleute bei fast allen Fragen von mir die ich hatte, mich darauf hinwissen wirds wohl wichtig sein, oder? Nun weiss ich nicht ob es hier um gute sparsamme Gewohnheite geht, oder eher um Tratition, und versteh mich nicht falsch das Richtige von Anfang an zu tun ist immer was Gutes. Nur, ich dachte ich Frag mal nach.

Weiter habe ich mal in der Hilfe nachgelesen, irre ich mich oder hast Du dich da verhauen. Dein Beispielcode war..
AND51 hat geschrieben: Hier als Prozedur für Neulinge: :)

Code: Alles auswählen

Procedure ZufallszahlBereich(von, bis)
	ProcedureReturn Random(bis-von)+von
EndProcedure
:o Meiner Meinung nach, wenn ich das richtig verstanden habe so müsste es nicht wie folgt aussehen, ehrlich gesagt habe keine Ahnung ob das was ich hier schreibe stimmt. Aber das wenige was ich Verstand brachte mich auf diesen Gedanken.
Weiter weis ich nicht wo die Variabeln von und bis deklariert werden müssen und wie es gemacht werden soll mit welcher art von Variable.
Auch ist mir nicht klar wie ich dieses Macro, wo aufrufe?

Code: Alles auswählen

Macro ZufallszahlBereich(von, bis)
   ProcedureReturn Random(bis-von)+von
  EndMacro
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

Hallo duli,

auf die Performance solltest du bei diesem Code erst achten, wenn er mehrere Male aufgerufen werden soll. Bei einer geringen Aufrufanzahl liegt die Dauer in einem niedrigen Millisekundenbereich. Bei sehr vielen Aufrufen hintereinander summiert sich die niedrige Dauer und kann sich schon in den Sekundenbereich bewegen, deshalb wäre es in diesem Fall besser die schnellere Methode zu verwenden, um die Dauer trotz der vielen Aufrufe immer noch gering zu halten.

Beim Macro ist dem AND51 ein Fehler unterlaufen. Korrekt wäre dies:

Code: Alles auswählen

Macro ZufallszahlBereich(von, bis)
   (Random(bis-von)+von)
EndMacro
Beide Codes (Macro bzw. Prozedur) können wie folgt aufgerufen werden:

Code: Alles auswählen

a = ZufallszahlBereich(5,30)
Der Variable "a" wird durch diesen Code eine Zahl zwischen "5" und "30" zugewissen. Du kannst also nun immer den Befehl "ZufallszahlBereich" verwenden, anstatt immer wieder die Formel "(Random(bis-von)+von)" zu schreiben.

Mfg DerProgger
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

:o Ich bin geplättet, wisst ihr, so langsam raucht mein Gehirn, aber es macht spass.

Was ich nicht verstehe wieso weis der den das a zwei Werte enthält die beide angewandt werden müssen. Ist das einfach eine vorgabe von der allgemeinen Programmierkunst, oder etwas was einfach in PureBasic so ist?
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Also das, was "derProgger" da gepostet hat- da steht dioch nur EIN Wert drin? Also in der Variable a?
Oder wie meinst du das jetzt :?

"Random(zahl1,zahl2)" ist ein Purebasic-Befehl.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

/:-> Well....
a = ZufallszahlBereich(5,30)
jetzt müssten doch in der Variable a die Werte 5 und 30 sein oder?
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Das Programm weiß nicht das a 2 Werte "ENTHÄLT" weil a nur eine Wert "ERHÄLT"

Ich benenn "a" jetzt erstmal um in "Zufallszahl"

Code: Alles auswählen

Zufallszahl = ZufallszahlBereich(5,30)
Auf Deutsch:
Der Variable "Zufallszahl" wird der Returnwert der Procedure "ZufallszahlBereich" zugewiesen.

- Starte Procedure ZufallszahlBereich(von, bis)
- Übergabeparameter von = 5 , bis = 30

Code: Alles auswählen

ZufallszahlBereich(5,30)
- Innerhalb der Procedure wird ProcedureReturn Random(bis-von)+von ausgeführt mit den übergebenen Werten von = 5 , bis = 30

Code: Alles auswählen

ProcedureReturn Random(30-5)+5
- Der Rückgabewerte der Procedure (ProcedureReturn) ist also eine Zahl zwischen 5 und 30
- Der Rückgabewert der Procedure wird der Variable Zufallszahl zugewiesen

Code: Alles auswählen

Zufallszahl = ZufallszahlBereich(5,30)
- Die Variable Zufallszahlt hat jetzt also einen Wert der irgendwo zwischen 5 und 30 liegt

Hoffe das war verständlich genug ausgedrückt und ging nicht an deiner Frage vorbei ;)

P.S. Ich sollte aufhören nebenbei zu chatten dann brauch ich kein 10 mins für'n Post
Antworten