[Gelöst]Zufallszahlen sortieren /Macro geht nicht

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

ChristianAC_

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von ChristianAC_ » Mo, 19.11.2018 01:53

Hallo Taghor,

wenn ich das richtig sehe, solltest Du unbedingt auch noch den Zufallszahlen-Generator mit 'Randomize' initialisieren. Ich habe das so z.B. auch in der SuDoKu-Extensiondatei von Yazyk gefunden; das Schlüsselwort gehört unterhalb der Variable, in jedem Fall aber vor Deinem ersten 'Rnd', geschrieben. In meinen Schulungen habe ich das immer so gelernt, zwar nicht von StarBASIC, das wird hier aber genauso sein. Damit Deine Zufallszahlen auch wirklich maximal zufällig sind (falls es stimmt, dass der Algorithmus der Erfinder sich an der Systemuhrzeit orientiert). So, ab in die Koje...
Einen guten Wochenstart wünscht
ChristianAC

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » Mo, 19.11.2018 20:25

Mikeleb der Code is ja super :-) das problem was ich habe ist nur das er scheinbar nur zahlen von 1 bis 5 macht weil habe keine 6 in der liste.
Ob das sofort Sortieren dem Spielleiter gefällt kläre ich ab.
änder ich bei rnd *5* in 6 um macht er mir zahlen zwischen 1 und 6
aber bei 2 würfeln macht er mir zahlen zwischen 2 und 13 hmm ich doctor später da nochmal selber rum aber danke erstmal :-) .
versuche mal die nächste Lösung

Benutzeravatar
balu
********
Beiträge: 3682
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von balu » Mo, 19.11.2018 21:34

Hallo Leute,

um eine Zufällige Zahl innerhalb eines bestimmten Bereiches zu ziehen, gehe ich wie folgt vor.
Erstmal ein Pseudo-Code

Code: Alles auswählen

Cint(rnd()*(GrößteZahl-KleinsteZahl) +KleinsteZahl)
Um jetzt eine Zahl vom Würfel zu ziehen, würde das dann so aussehen.

Code: Alles auswählen

Cint(rnd()*(6-1) +1)

Zur Info.
Das hier

Code: Alles auswählen

Cint(rnd()*(6-1) *1)
ist nicht gut. Da in diesem Falle auch eine 0 (Null) gewürfelt wird, aber die 6 nicht fällt (man kann auch sagen, das die 6 entfällt).


Mehr habe ich momentan nicht zu bieten. :oops:



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D

mikeleb
******
Beiträge: 742
Registriert: Fr, 09.12.2011 16:50

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von mikeleb » Mo, 19.11.2018 22:44

Hallo,
ist ja richtig - ändere

Code: Alles auswählen

z=int(rnd()*5*n)+n+aSpalteINI(i)(0)+aSpalteINI(i)(1)+aSpalteINI(i)(2)
in

Code: Alles auswählen

z=int(rnd()*5*n+0.5)+n+aSpalteINI(i)(0)+aSpalteINI(i)(1)+aSpalteINI(i)(2)
rnd() liefert ja eine Zufallszahl aus dem Intervall [0;1] (theoretisch schön gleichverteilt). Daher sollte man meinen, dass rnd()*5 eine Zahl zwischen 0 und 5 liefert - macht es auch, aber durch das abschließende Abrunden durch int() würde nur ein einziger Zufallswert (nämlich die 5) auch zur 5 abgerundet (aus der Gleichverteilung wird eine schiefe, die Werte 0-4 treten erheblich häufiger auf als die 5). Durch die Addition einer 0,5 wird die Gleichverteilung wieder hergestellt. Es werden nun Zufallszahlen zwischen 0,5 und 5,5 erzeugt, die abgerundet die (natürlichen) Zahlen 0 bis 5 liefern.

Das Sortieren kann natürlich auch in ein extra Makro gepackt werden. Wenn aber sowieso nach jedem Würfeln sortiert werden soll, dann gleich in eines.
Gruß,
mikeleb

Taghor
**
Beiträge: 36
Registriert: So, 18.05.2014 03:08

Re: [erstmal Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von Taghor » Di, 20.11.2018 00:23

Danke
hoffe fertig
Gelöst

habe aus verschiedenen Formeln was zusammengebastelt da ich noch ne Zufallszahl eingefügt hatte.

mikeleb
******
Beiträge: 742
Registriert: Fr, 09.12.2011 16:50

Re: [Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von mikeleb » Di, 20.11.2018 14:12

Hallo,
es war natürlich teilweise Unsinn, was ich zum Zufallszahlenbereich schrieb. rnd() liefert gleichverteilte Zufallszahlen im Intervall [0;1[, d. h. ohne die 1.
rnd()*6 erzeugt somit Zufallszahlen im Intervall [0;6[ (ohne 6). Durch die Abrundung per int(rnd()*6) werden somit nur die Zahlen 0, 1, 2, 3, 4 und 5 erzeugt. Für die Zufallszahlen von 1 bis 6 muss also int(rnd()*6)+1 gerechnet werden.
Um also die ganzzahligen Zufallszahlen im Bereich [a;b] (inkl. a und b) zu erzeugen, muss man demzufolge int(rnd()*(b-a+1))+a nutzen.
Nutzt man cint() so wird math. gerundet, also wie balu schon schrieb: int(rnd()*(b-a))+a oder int(rnd()*(b-a)+a)
Also wird in meinem Makro aus:

Code: Alles auswählen

z=int(rnd()*5*n)+n+aSpalteINI(i)(0)+aSpalteINI(i)(1)+aSpalteINI(i)(2)
nun korrekterweise:

Code: Alles auswählen

z=int(rnd()*(5*n+1))+n+aSpalteINI(i)(0)+aSpalteINI(i)(1)+aSpalteINI(i)(2)
bzw.

Code: Alles auswählen

z=cint(rnd()*5*n)+n+aSpalteINI(i)(0)+aSpalteINI(i)(1)+aSpalteINI(i)(2)
Anmerkung: Die Variante mit +0,5 liefert auch Zufallszahlen im gewünschten Bereich, nur nicht gleichverteilt.
Gruß,
mikeleb

Benutzeravatar
balu
********
Beiträge: 3682
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: [Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von balu » Di, 20.11.2018 16:48

Hallo mikeleb,

jetzt weiss ich auch warum mein Kopf in den letzten Tagen so verrückt gespielt hat. Der Winter klopft an die Tür, Nass-Kalte 2° C, blöder Wind und Schneefall. *grrrr*


Bäck tho toppik.
gleichverteilte Zufallszahlen
Auch wenn diese Aussage irgendwie seine Berechtigung hat, besonders wenn man sich das hier durchliest: https://www.mathematik.tu-clausthal.de/ ... llszahlen/ , so denke ich mir mal das wir die Kirche im Dorfe lassen wollen. Für mich ist Zufall schlicht ergreifend einfach Zufall. Und wenn der Zufall gleichverteilt ist, oder wie auch immer, dann ist das für mich kein Zufall mehr sondern ein berechenbares System. Aber da können wir uns bei einem heißen Pott Glühwein unterhalten, nur nicht hier. :lol:


Du bleibst bei deiner Methode die im Grunde so aussieht.

Code: Alles auswählen

rnd()*5
Du lässt dir nicht den "Zufallsbereich" (ich nenne das jetzt mal so) ausrechnen, sondern Du gibst einen festen Wert vor. Und das mag ja auch wohl irgendwie funktionieren, weil es ja nur um den Zahlenbereich von inklusive 1 bis einschließlich 6 geht. Aber wie sieht das denn aus, wenn der Zahlenbereich von 97-123 geht?

Und deshalb hatte ich meine Methode vorgeschlagen, die wie folgt aussieht.

Code: Alles auswählen

Cint(rnd()*(GrößteZahl-KleinsteZahl) +KleinsteZahl)
An dieser Stelle eine andere Frage.
Kennst Du eigentlich meinen "Passwortgenerator" schon (Er genriert ein 8 Stelliges "Passwort")?
Den findest Du in diesem Thread: viewtopic.php?t=62016
Da steht auch warum ich meine Methode angewendet habe.


Ich zieh mich wieder zurück. Ich werd einfach nicht warm. Ab in meine "Brummelhöhle"



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D

mikeleb
******
Beiträge: 742
Registriert: Fr, 09.12.2011 16:50

Re: [Gelöst]Zufallszahlen sortieren /Macro geht nicht

Beitrag von mikeleb » Di, 20.11.2018 17:46

Hallo balu,
die allgemeine Formel ist schon so richtig.
Das

Code: Alles auswählen

cint(rnd()*5*n)+n
ist nur auf die konkrete Situation des TE angepasst, der mit n 6er Würfeln würfeln möchte und damit der Zufallsbereich von n bis 6n geht und schon sind wir bei deiner Formel ...
Gruß,
mikeleb

Antworten