Seite 1 von 2

Zufallszahlen in eine Zahlenbereich

Verfasst: 29.04.2007 22:24
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

Verfasst: 29.04.2007 22:33
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:

Verfasst: 29.04.2007 22:35
von duli
:oops: :oops: :oops: :oops: :oops: :oops: :oops:

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

:allright:

Verfasst: 30.04.2007 12:22
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.

Verfasst: 30.04.2007 13:19
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

Verfasst: 30.04.2007 13:42
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

Verfasst: 30.04.2007 13:51
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?

Verfasst: 30.04.2007 14:19
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.

Verfasst: 30.04.2007 14:27
von duli
/:-> Well....
a = ZufallszahlBereich(5,30)
jetzt müssten doch in der Variable a die Werte 5 und 30 sein oder?

Verfasst: 30.04.2007 14:30
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