Supportnet / Forum / Tabellenkalkulation
Lotto-System für Excel97
Frage
Noch ´n Lotto-Problem:
ne zufallszahl kann ich ja bilden (zufallsbereich 1;49). aber beim richtigen lotto ist es ja so, dass nach der ersten zahl in der trommel ja nur noch 48 kugeln sind usw. also irgendwie so:
a1= zufallsbereich 1;49
a2= zufallsbereich 1;49 ohne den wert in a1
a3= zufallsbereich 1;49 ohne den wert in a1 und a2
....
Antwort 1 von nighty
hi :)
wer lesen kann ist klar im vorteil,kurz weiter unten selbe thema,daher kopiert und eingefuegt grrrr
kleines beispiel :)
es werden 10 zahlen generiert und bei doppelten treffern neu gezogen,ausgabe erfolgt a1-a10.
gruss nighty
Sub makro01()
Randomize Timer
Dim zahl(10)
For t = 1 To 10
zahl(t) = Int(Rnd * 49) + 1
For t1 = 1 To t - 1
If zahl(t) = zahl(t1) Then
t1 = t - 1
t = t - 1
End If
Next t1
Range("A" & t) = zahl(t)
Next t
End Sub
wer lesen kann ist klar im vorteil,kurz weiter unten selbe thema,daher kopiert und eingefuegt grrrr
kleines beispiel :)
es werden 10 zahlen generiert und bei doppelten treffern neu gezogen,ausgabe erfolgt a1-a10.
gruss nighty
Sub makro01()
Randomize Timer
Dim zahl(10)
For t = 1 To 10
zahl(t) = Int(Rnd * 49) + 1
For t1 = 1 To t - 1
If zahl(t) = zahl(t1) Then
t1 = t - 1
t = t - 1
End If
Next t1
Range("A" & t) = zahl(t)
Next t
End Sub
Antwort 2 von nighty
hi :)
in den zeilen ist deine max zahl zur zeit die 10 bzw. zehn zahlen,wenn du sie auf 6 oder 7 haben wolltest immer beide zu aendern sind .
gruss nighty
Dim zahl(10)
For t = 1 To 10
in den zeilen ist deine max zahl zur zeit die 10 bzw. zehn zahlen,wenn du sie auf 6 oder 7 haben wolltest immer beide zu aendern sind .
gruss nighty
Dim zahl(10)
For t = 1 To 10
Antwort 3 von Frank1
Recht hat er – deswegen auch keine Klassenkeile!
Ok, programmtechnisch ist das, was oben steht soweit ok, stimmt aber mit dem Verhalten des Zufalls beim Ziehen der Lottozahlen nicht überein (und das hat Klassenkeile sehr schön erkannt):
Wir machen mal folgendes Gedankenexperiment:
Es soll erreicht werden, die Zahlenfolge 1 2 3 4 5 zu ziehen – ok? (wie die Zahlen heißen, ist ja egal)
Die Wahrscheinlichkeit, dass eine der Zahlen bei der ersten Ziehung gezogen wird, ist 5/49 (günstig zu gleichmöglich). Bei der zweiten Ziehung beträgt sie (schon schlechter) 4/48. Die erste gezogene Kugel ist ja schon raus usw.
Damit ergibt sich eine Wahrscheinlichkeit, dass 1 2 3 4 5 gezogen wird von ca. 5,25 x 10 hoch –7
Bei der hier vorgestellte Berechnung verhält es sich aber völlig anders – es sind ja immer wieder alle Kugeln im Pott, was beim Lotto nicht geht. Die Wahrscheinlichkeit, eine dieser Zahlen zu ziehen, beträgt also immer 1/49 (doppelt gezogene lasse ich jetzt mal absichtlich weg – sonst wird’s zu akademisch)
Damit ergibt sich eine Wahrscheinlichkeit von 3,54 x 10 hoch –9
Das Ergebnis fällt also deutlich schlechter aus (für den Lottospieler), die hier gezogene Kombination wird deutlich seltener vorkommen. Aber: Noch einen Satz zur Statistik (und bevor ich zerfleischt werde): Schaut bitte auf die Zehnerpotenzen! Das alles realisiert sich natürlich nur bei der entsprechenden Anzahl von Versuchen!
Wer das richtige Ziehen (programmtechnisch) nachempfinden will, sollte anders vorgehen:
Ein Array aus 49 Zahlen bilden – Nicht die Zahl ziehen, sondern den Pointer, der auf die Zahl zeigt (!) – das Array entsprechend verkleinern (wie beim richtigen Lotto) wieder den Pointer würfeln, auf das Array zeigen, die Zahl auslesen usw. usw.) Wie man das in purem Excel macht, keine Ahnung, sollte man dann doch in VBA oder so machen.
mfg frank
übrigens – alles was ich geschrieben habe meint Lotto – nicht irgendwie voneinander verschiedene Zahlen zufällig zu erzeugen....
und @Nachthemd: Wer Mathe kann auch!
mfg frank
Ok, programmtechnisch ist das, was oben steht soweit ok, stimmt aber mit dem Verhalten des Zufalls beim Ziehen der Lottozahlen nicht überein (und das hat Klassenkeile sehr schön erkannt):
Wir machen mal folgendes Gedankenexperiment:
Es soll erreicht werden, die Zahlenfolge 1 2 3 4 5 zu ziehen – ok? (wie die Zahlen heißen, ist ja egal)
Die Wahrscheinlichkeit, dass eine der Zahlen bei der ersten Ziehung gezogen wird, ist 5/49 (günstig zu gleichmöglich). Bei der zweiten Ziehung beträgt sie (schon schlechter) 4/48. Die erste gezogene Kugel ist ja schon raus usw.
Damit ergibt sich eine Wahrscheinlichkeit, dass 1 2 3 4 5 gezogen wird von ca. 5,25 x 10 hoch –7
Bei der hier vorgestellte Berechnung verhält es sich aber völlig anders – es sind ja immer wieder alle Kugeln im Pott, was beim Lotto nicht geht. Die Wahrscheinlichkeit, eine dieser Zahlen zu ziehen, beträgt also immer 1/49 (doppelt gezogene lasse ich jetzt mal absichtlich weg – sonst wird’s zu akademisch)
Damit ergibt sich eine Wahrscheinlichkeit von 3,54 x 10 hoch –9
Das Ergebnis fällt also deutlich schlechter aus (für den Lottospieler), die hier gezogene Kombination wird deutlich seltener vorkommen. Aber: Noch einen Satz zur Statistik (und bevor ich zerfleischt werde): Schaut bitte auf die Zehnerpotenzen! Das alles realisiert sich natürlich nur bei der entsprechenden Anzahl von Versuchen!
Wer das richtige Ziehen (programmtechnisch) nachempfinden will, sollte anders vorgehen:
Ein Array aus 49 Zahlen bilden – Nicht die Zahl ziehen, sondern den Pointer, der auf die Zahl zeigt (!) – das Array entsprechend verkleinern (wie beim richtigen Lotto) wieder den Pointer würfeln, auf das Array zeigen, die Zahl auslesen usw. usw.) Wie man das in purem Excel macht, keine Ahnung, sollte man dann doch in VBA oder so machen.
mfg frank
übrigens – alles was ich geschrieben habe meint Lotto – nicht irgendwie voneinander verschiedene Zahlen zufällig zu erzeugen....
und @Nachthemd: Wer Mathe kann auch!
mfg frank
Antwort 4 von Arnim
Hallo,
wie ich sehe, sind hier hochkarätige Mathematiker am Werk. Wenn dies ausdiskutiert ist, werde ich die Lösung sofort anwenden, um endlich auch einmal reich zu werden. Bisher habe ich die unterschiedlichsten Excel-Lösungen gesehen und auch selbst daran gebastelt. Im Endeffekt kommt es bei der Ziehung - wie bereits bemerkt - darauf an, dass nicht eine Zahl doppelt gezogen wird - daher die "Entnahmen". Wer dann gewinnt, ist eben glücklich oder weniger glücklich - je nach Rang oder Niete.
Hier mal ein Beispiel aus den excel-formeln:
Aufgabe
Es soll eine Lottoziehung 6 aus 49 simuliert werden.
Lösung
In A1 steht
=ZUFALLSZAHL()
diese Formel bis A49 runterkopieren.
In B1 steht:
=VERGLEICH(KKLEINSTE(A$1:A$49;ZEILE());A$1:A$49;0)
diese Formel bis B6 runterkopieren
noch kürzer, in B1 steht
=RANG(A1;A$1:A$49)
diese Formel bis B6 runterkopieren
Erläuterung
Bei diesem Verfahren, besteht eine kaum messbare Wahrscheinlichkeit (eins zu einer Billiarde), daß eine Wiederholung vorkommt. Soll es absolut wasserdicht sein, schreibt man von B1 bis B49 die Zahlen 1 bis 49 und läßt nach Spalte A sortieren. Die Zahlen von B1 bis B6
Viel Spaß beim Gewinnen!
Gruß Arnim
@Frank1: Klasse Homepage - aber um Gottes Willen nicht für weibliche Teenager :-(
wie ich sehe, sind hier hochkarätige Mathematiker am Werk. Wenn dies ausdiskutiert ist, werde ich die Lösung sofort anwenden, um endlich auch einmal reich zu werden. Bisher habe ich die unterschiedlichsten Excel-Lösungen gesehen und auch selbst daran gebastelt. Im Endeffekt kommt es bei der Ziehung - wie bereits bemerkt - darauf an, dass nicht eine Zahl doppelt gezogen wird - daher die "Entnahmen". Wer dann gewinnt, ist eben glücklich oder weniger glücklich - je nach Rang oder Niete.
Hier mal ein Beispiel aus den excel-formeln:
Aufgabe
Es soll eine Lottoziehung 6 aus 49 simuliert werden.
Lösung
In A1 steht
=ZUFALLSZAHL()
diese Formel bis A49 runterkopieren.
In B1 steht:
=VERGLEICH(KKLEINSTE(A$1:A$49;ZEILE());A$1:A$49;0)
diese Formel bis B6 runterkopieren
noch kürzer, in B1 steht
=RANG(A1;A$1:A$49)
diese Formel bis B6 runterkopieren
Erläuterung
Bei diesem Verfahren, besteht eine kaum messbare Wahrscheinlichkeit (eins zu einer Billiarde), daß eine Wiederholung vorkommt. Soll es absolut wasserdicht sein, schreibt man von B1 bis B49 die Zahlen 1 bis 49 und läßt nach Spalte A sortieren. Die Zahlen von B1 bis B6
Viel Spaß beim Gewinnen!
Gruß Arnim
@Frank1: Klasse Homepage - aber um Gottes Willen nicht für weibliche Teenager :-(
Antwort 5 von thomasn1975
Zitat:
Ok, programmtechnisch ist das, was oben steht soweit ok, stimmt aber mit dem Verhalten des Zufalls beim Ziehen der Lottozahlen nicht überein
Ok, programmtechnisch ist das, was oben steht soweit ok, stimmt aber mit dem Verhalten des Zufalls beim Ziehen der Lottozahlen nicht überein
Hmmm, es stimmt eben doch überein. Die Verringerung der Wahrscheinlichkeit, dass eine bestimmte Zahl gezogen wird erreicht der Code ja dadurch, dass beim "Ziehen" einer bereits gezogenen Zahl erneut gezogen wird.
Die Wahrscheinlichkeit beim zweiten Durchlauf ist 4:48! Denn der Zug wird ja ignoriert.
Antwort 6 von Frank1
um jetzt Irrtümern vorzubeugen: Ich habe keine eigene Homepage (wirklich), Klasse Matehmatiker - gibts hier bestimmt - ich gehöre nicht dazu - naja -eher nur Schulmathematik...
Und ich bestehe darauf: Ich wollte nur den mathematischen Apparat für eine Lotto-Ziehung nachbilden - Die Gewinnmöglichkeiten sind dann eigentlich genau definiert :-) Und von mir (leider) nicht zu beeinflussen....
mfg frank
Und ich bestehe darauf: Ich wollte nur den mathematischen Apparat für eine Lotto-Ziehung nachbilden - Die Gewinnmöglichkeiten sind dann eigentlich genau definiert :-) Und von mir (leider) nicht zu beeinflussen....
mfg frank
Antwort 7 von Frank1
vielleicht wirds ja das Forum für Lotto-Millionäre :-)
Bitte als Diskussion - ich hab extra vorhin den akademischen Aspekt rauslassen wollen
@thomas: über die 4/48 hab ich auch nachgedacht...
also: erstens: wenn schon, dann nur 4/49 - alle Kugeln wieder im Spiel ok?
Man müßte dann betrachten, wie groß die Wahrscheinlichkeit einer Wiederholung des Ergebnisses der ersten Ziehung ist - ? deshalb wollte ich es nicht weiter ausführen - ändert aber nix - denk ich, bin aber, da Hobby-Mathematiker an weiteren Beiträgen im Interesse von Klassenkeile interessiert - der hat hier das Ding mit einer sehr interessanten ! Frage eröffnet
mfg frank
Bitte als Diskussion - ich hab extra vorhin den akademischen Aspekt rauslassen wollen
@thomas: über die 4/48 hab ich auch nachgedacht...
also: erstens: wenn schon, dann nur 4/49 - alle Kugeln wieder im Spiel ok?
Man müßte dann betrachten, wie groß die Wahrscheinlichkeit einer Wiederholung des Ergebnisses der ersten Ziehung ist - ? deshalb wollte ich es nicht weiter ausführen - ändert aber nix - denk ich, bin aber, da Hobby-Mathematiker an weiteren Beiträgen im Interesse von Klassenkeile interessiert - der hat hier das Ding mit einer sehr interessanten ! Frage eröffnet
mfg frank
Antwort 8 von thomasn1975
Zitat:
wenn schon, dann nur 4/49 - alle Kugeln wieder im Spiel ok?
wenn schon, dann nur 4/49 - alle Kugeln wieder im Spiel ok?
es sind nicht wieder alle kugeln im spiel. wenn alle kugeln wieder im spiel wären, könnte auch eine nummer zweimal fallen.
Antwort 9 von Frank1
Das ist ja die Krux bei dieser Formel Der Zug wird nicht ignoriert sondern so lange wiederholt, bis ein gewünschtes - programmiertes Ergebnis eintritt. Damit tritt jeder Zufall außer Funktion - oder bin ich da auf dem falschen Dampfer und lass mich gerne belehren!
mfg frank
mfg frank
Antwort 10 von Frank1
nochmal für alle:
Meine Argumenatation bezieht sich immer auf die Formel aus Antwort 1 - auch wenns blöd klingt
mfg frank
Meine Argumenatation bezieht sich immer auf die Formel aus Antwort 1 - auch wenns blöd klingt
mfg frank
Antwort 11 von thomasn1975
Ich werd mal philosophisch ;)
Naja, eigentlich wird der Zug so lange wiederholt, solange ein unerwünschtes Ergebnis zustandekommt.
Um aber alle zufrieden zu stellen würde ich folgenden Lösungsansatz vorschlagen:
Man nehme ein Array mit 49 Zellen und fülle dieses aufsteigend mit den Zahlen 1 bis 49. Nun durchlaufe man dieses Array mehrere Male von vorn nach hinten und berechne bei jedem Schritt eine Zufallszahl zwischen 1 und 49, die als Index für das Array-Element gilt, mit dem man das aktuelle Element tauscht. Die 6 Zahlen, die schließlich am Anfang des Arrays stehen sind wunderbare, pseudozufällige, sich nicht wiederholende 6 aus 49 Zahlen. :)
Zitat:
so lange wiederholt, bis ein gewünschtes - programmiertes Ergebnis eintritt.
so lange wiederholt, bis ein gewünschtes - programmiertes Ergebnis eintritt.
Naja, eigentlich wird der Zug so lange wiederholt, solange ein unerwünschtes Ergebnis zustandekommt.
Um aber alle zufrieden zu stellen würde ich folgenden Lösungsansatz vorschlagen:
Man nehme ein Array mit 49 Zellen und fülle dieses aufsteigend mit den Zahlen 1 bis 49. Nun durchlaufe man dieses Array mehrere Male von vorn nach hinten und berechne bei jedem Schritt eine Zufallszahl zwischen 1 und 49, die als Index für das Array-Element gilt, mit dem man das aktuelle Element tauscht. Die 6 Zahlen, die schließlich am Anfang des Arrays stehen sind wunderbare, pseudozufällige, sich nicht wiederholende 6 aus 49 Zahlen. :)
Antwort 12 von nighty
hi alle :)
genau so einfach :)
gruss nighty
Sub makro01()
Randomize Timer
Dim lottozahl(49)
Dim zahl(7)
zahl1 = 49
For z = 1 To 49
lottozahl(z) = z
Next z
For t = 1 To 7
zahl(t) = lottozahl(Int(Rnd * zahl1) + 1)
lottozahl(zahl(t)) = lottozahl(zahl1)
zahl1 = zahl1 - 1
Range("A" & t) = zahl(t)
Next t
End Sub
genau so einfach :)
gruss nighty
Sub makro01()
Randomize Timer
Dim lottozahl(49)
Dim zahl(7)
zahl1 = 49
For z = 1 To 49
lottozahl(z) = z
Next z
For t = 1 To 7
zahl(t) = lottozahl(Int(Rnd * zahl1) + 1)
lottozahl(zahl(t)) = lottozahl(zahl1)
zahl1 = zahl1 - 1
Range("A" & t) = zahl(t)
Next t
End Sub
Antwort 13 von Frank1
@thomas: Zwar philosophisch was die Abbruchbedingung betrifft :-) <-- wo er Recht hat, hat er Recht! Er schrieb:
weiter:
genau so meinte ich das mit meinem Pointer....
Jetzt auch wieder als Diskussionsgrundlage: Der kleiner werdende Pool von zu ziehenden Zahlen muß erfaßt werden - ist bei nighty auch wieder nicht dabei - (Spielt bei der Wahrscheinlichkeit kaum ne Rolle - 2 10ner-Potenzen) aber wollen wir die Spieler, die hier fragen wirklich so besch... :-)
mfg frank
Zitat:
eigentlich wird der Zug so lange wiederholt, solange ein unerwünschtes Ergebnis zustandekommt.
eigentlich wird der Zug so lange wiederholt, solange ein unerwünschtes Ergebnis zustandekommt.
weiter:
Zitat:
und berechne bei jedem Schritt eine Zufallszahl zwischen 1 und 49, die als Index für das Array-Element gilt,
und berechne bei jedem Schritt eine Zufallszahl zwischen 1 und 49, die als Index für das Array-Element gilt,
genau so meinte ich das mit meinem Pointer....
Jetzt auch wieder als Diskussionsgrundlage: Der kleiner werdende Pool von zu ziehenden Zahlen muß erfaßt werden - ist bei nighty auch wieder nicht dabei - (Spielt bei der Wahrscheinlichkeit kaum ne Rolle - 2 10ner-Potenzen) aber wollen wir die Spieler, die hier fragen wirklich so besch... :-)
mfg frank
Antwort 14 von nighty
hi alle :)
nadann :)
eine version wo das array gekuerzt wird :)
gruss nighty
p.s.
durch einen ueblen denkfehler kam ich aber arg in bedraengnis :)
Sub makro01()
Randomize Timer
ReDim lottozahl(49)
Dim zahl(7)
endeindex = 49
For allezahlen = 1 To 49
lottozahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 7
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = lottozahl(gezogen)
lottozahl(gezogen) = lottozahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve lottozahl(endeindex)
Range("A" & ziehung) = zahl(ziehung)
Next ziehung
End Sub
nadann :)
eine version wo das array gekuerzt wird :)
gruss nighty
p.s.
durch einen ueblen denkfehler kam ich aber arg in bedraengnis :)
Sub makro01()
Randomize Timer
ReDim lottozahl(49)
Dim zahl(7)
endeindex = 49
For allezahlen = 1 To 49
lottozahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 7
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = lottozahl(gezogen)
lottozahl(gezogen) = lottozahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve lottozahl(endeindex)
Range("A" & ziehung) = zahl(ziehung)
Next ziehung
End Sub
Antwort 15 von Aliba
Hi @all,
kann natürlich bei einer VB-Lösung nicht mithalten, muss aber natürlich auch meinen Senf dazugeben:
Über EXTRAS - OPTIONEN - "Berechnen" die Berechnung auf manuell stellen. In A2 die Formel:
=ZUFALLSZAHL()
bis A50 runterkopieren.
In A1 die Formel:
=VERGLEICH(KKLEINSTE(A2:A50;1);A2:A50;0)
Bis F1 nach rechts ziehen.
In B2 die Formel:
=WENN(ISTZAHL(VERGLEICH(ZEILE()-1;$A$1:A$1;0));"";ZUFALLSZAHL())
Diese Formel nach rechts bis Spalte F und nach unten bis Zeile 50 kopieren.
Zeilen 2 bis 50 ausblenden. Bei jedem Drücken von F9 wird eine neue Lottoreihe generiert.
CU Aliba
kann natürlich bei einer VB-Lösung nicht mithalten, muss aber natürlich auch meinen Senf dazugeben:
Über EXTRAS - OPTIONEN - "Berechnen" die Berechnung auf manuell stellen. In A2 die Formel:
=ZUFALLSZAHL()
bis A50 runterkopieren.
In A1 die Formel:
=VERGLEICH(KKLEINSTE(A2:A50;1);A2:A50;0)
Bis F1 nach rechts ziehen.
In B2 die Formel:
=WENN(ISTZAHL(VERGLEICH(ZEILE()-1;$A$1:A$1;0));"";ZUFALLSZAHL())
Diese Formel nach rechts bis Spalte F und nach unten bis Zeile 50 kopieren.
Zeilen 2 bis 50 ausblenden. Bei jedem Drücken von F9 wird eine neue Lottoreihe generiert.
CU Aliba
Antwort 16 von nighty
hi aliba :)
dafuer bist du nicht mehr wegzudenken im sn :)
wohl schon eher hausinventar :)
gruss nighty
dafuer bist du nicht mehr wegzudenken im sn :)
wohl schon eher hausinventar :)
gruss nighty
Antwort 17 von Klassenkeile
Na, schön...ihr habts geschafft...oder besser: ihr habt mich geschafft...
aber erstmal : zwanzigtausendmal dank, dass ihr euch so mit meinem kleinen (?) problem beschäftigt habt. aber bin ich jetzt klüger? steht unter diesen sehr netten einsendungen jetzt irgendwo die lösung? ;-)
ich werde jetzt den geheiligten samstag abend dazu nutzen und mich mit den überlegungen auseinander setzen.
bis dass mir der kopf raucht.
tschau ihr schlawiner
aber erstmal : zwanzigtausendmal dank, dass ihr euch so mit meinem kleinen (?) problem beschäftigt habt. aber bin ich jetzt klüger? steht unter diesen sehr netten einsendungen jetzt irgendwo die lösung? ;-)
ich werde jetzt den geheiligten samstag abend dazu nutzen und mich mit den überlegungen auseinander setzen.
bis dass mir der kopf raucht.
tschau ihr schlawiner

