| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Lottostatistik im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Eingereicht von pi() Es handelt sich um ein Lotto-Programm.Man kann am Anfang seinen Tipp eingeben und dann wie viele ...
![]() |
| | #1 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Anzeige Eingereicht von pi() Es handelt sich um ein Lotto-Programm.Man kann am Anfang seinen Tipp eingeben und dann wie viele Lottoscheine (Durchläufe) man haben will.Als Ergebnis sollte eine Statistik herauskommen, die wie folgt aussehen sollte: Statistik: nieten:3455140 einser:3404654 zweier:1134126 dreier:157049 vierer:8840 fünfer:191 sechser:0 Es dürfen natürlich auch Zahlen doppelt getippt werden und Die Reihenfolge spielt keine Rolle. In diesem Fall habe ich 8160000 Durchläufe gemacht (~Anzahl Österr. Einwohner) und Lotto 6 aus 45 (Österreichisches Lotto, da weniger Einwohner).Ihr könnt es natürlich deutsch machen (oder so wie er es in dem Land woher der jeweilige Programmierer kommt eben hat mit den Einwohnern und der Wahrscheinlichkeit.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #2 (permalink) |
| Es sollen also keine Wahrscheinlichkeiten ausgerechnet werden ? Nur z.B. ne while Schleife machen und solange Zahlen ziehen bis alle Lotto-Scheine benutzt wurden sind ? | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 17.04.06 ![]() Likes: 3 | In Österreich gibt es dann auch noch die Zusatzzahl. Außerdem sollte man gleich eingeben können wieviele Personen einen Lotteschein kaufen. Nicht jeder Österreicher kauft einen, manche dafür gleich 10^^
__________________ http://chm0815.blogspot.com |
| | |
| | #4 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Da sich der Aufgabeneinsender nicht meldet: So wie ich die Aufgabe verstehe, sollte man das ganze für einen Tipp simulieren. Da spielt es keine Rolle, wieviele den Schein kaufen Ich würde sagen, man könnte eigentlich die vollständigen Regeln simulieren (Zusatzzahl etc). Also: Benutzer gibt seinen Tipp ab und wie viele Ziehungen simuliert werden sollten - das Programm gibt dazu ein paar Statistiken aus. Dabei sollte man nicht mit Wahrscheinlichkeiten rumrechnen sondern einfach mal jede Ziehung wirklich simulieren
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #5 (permalink) |
| Registriert seit: 30.03.07 ![]() Likes: 0 | da keiner was macht hab ich mal schnell was zusammengebaut... extrem hässlich und lang, aber ich bin ja noch anfänger Code: #include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand (time(NULL));
cout << "\t\tL O T T O\n\n";
int tip[6];
for (int i=0;i<=5;i++) {
do {
cout << "Tip " << i+1 << "/6 eingeben: ";
cin >> tip[i];
} while (tip[i] < 1 || tip[i] > 49);
}
cout << "\nDurchlaeufe eingeben: ";
int d;
cin >> d;
int ziehung[6];
int zaehler;
int _0=0,_1=0,_2=0,_3=0,_4=0,_5=0,_6=0;
for (int i=0;i<=(d-1);i++) {
zaehler=0;
for (int i=0;i<=5;i++) {
ziehung[i] = rand() % 50;
for (int j=0;j<=5;j++) {
if (tip[j] == ziehung[i])
zaehler++;
}
}
switch (zaehler) {
case 0: _0++; break;
case 1: _1++; break;
case 2: _2++; break;
case 3: _3++; break;
case 4: _4++; break;
case 5: _5++; break;
case 6: _6++; break;
}
}
cout << "\nNieten: " << _0
<< "\nEinser: " << _1
<< "\nZweier: " << _2
<< "\nDreier: " << _3
<< "\nVierer: " << _4
<< "\nFuenfer: " << _5
<< "\nSechser: " << _6 <<endl;
cout << "\nby toor.910 ~ Habo 09.06.07 21:50";
system("PAUSE>NUL");
return 0;
} lotto2.rar --> reihenfolge nicht berücksichtigt |
| | |
| | #6 (permalink) |
| Registriert seit: 29.04.07 ![]() Likes: 0 | So, sry, ich wusste noch nicht, dass meine Aufgabe schon on ist.(Danke) CDW hat es schon richtig erklärt, also gibt es dazu eigenltich nichts zu sagen. Happy coding! PS: Achja sry, die Anzahl der Durchläufe entspricht logischerweise der Anzahl der Ziehungen, nicht der Lottoscheine. |
| | |
| | #7 (permalink) | |
| Registriert seit: 17.04.06 ![]() Likes: 3 | Zitat:
Dies ist vorallem für Leute interessant die jede Woche den gleichen Tipp spielen und wissen wollen nach wievielen Wochen sie gewinnen werden. Ich dachte mir das zuerst anders. Nämlich so: Jeder Österreicher spielt Lotte mit zufälligen Zahlen (Quicktipp) und das Programm soll simulieren wieviele Personen einen 3er,4er,5er, 5er mit Zusatzzahl oder 6er haben.
__________________ http://chm0815.blogspot.com | |
| | |
| | #8 (permalink) |
| So habe das ganze auch mal realisiert. Ist in C geschrieben, jedoch ohne Zusatzmöglichkeiten wie Spiel77 oder was es da noch gibt. Da mache ich mich vielleicht später mal ran ^^ Code Ich habs auchmal gezipt. Mit freundlichen Grüßen 0wnZ | |
| | |
| | #9 (permalink) |
| Registriert seit: 12.06.07 ![]() Likes: 0 | Hallo, So, dann mal hier mein Code. Ich habe ehrlich gesagt etwa 2h dafür gebraucht. Bin noch Anfänger. Am meisten hatte mich ein Logikfehler im "Überprüfalgorhytmus", der untersucht ob die Zahl schon einmal gezogen wurde (oder ob eine 0 vorkommt), aufgehalten. Allerdings, ist mir noch nichts eingefallen, dies vollständig zu verhindern. Momentan zieht mein Programm in diesem Fall eine neue Zahl (was allerdings ja nicht heißt, dass die alte nicht drankommen kann). Morgen werde ich testen, ob ich das Problem mit einer While-Schleife umgehen kann. Dass der Benutzer 2 mal die gleiche Zahl eingibt, wird auch geduldet. Imho sollte derjenige selber merken, wenn er einen Fehler macht (naja, aus Zeitgründen und Nichtwissen auch rausgelassen). Die "Sonderspiele" (Zusatzzahl, Spiel77, etc.) muss ich auch noch implementieren. Mein Programm: CODE Die Ausgabe sieht so aus: Zahl 1: 23 Zahl 2: 21 Zahl 3: 43 Zahl 4: 40 Zahl 5: 33 Zahl 6: 2 Bestimme die Anzahl der Ziehungen: 80000000 Nieten : 78478366 Drei Richtige : 1436889 Vier Richtige : 82876 Fuenf Richtige: 1865 Sechs Richige: 4 Edit: Habe den Zufallsmechanismus nun so umgeschrieben, dass garantiert niemals die gleiche Zahl in einer Ziehung erscheint. Da der Logarhytmus ziemlich viele unnötige Durchläufe macht geht einiges an Rechenzeit verloren. Dafür ist das Ergebnis deutlich genauer (Wer einen Counter programmiert hat, der zählt, wie oft Zahlen in einer Ziehung mehrfach vorkommen, weiß wovon ich rede). Wie man mit dem Hammer programmiert: code2 Was mich verwundert ist das Ergebnis. Sind die Chancen wirklich so gering bei 100 Ziehungen einen 3er zu bekommen? (also ziemlich 0?) Mal schaun was bei den 80.000.000 rauskommt. Geht noch ein Weilchen. |
| | |
| | #10 (permalink) | |
| Zitat:
Das mit dem Prüfen ob die Zahl 0 ist lässt sich auch einfach lösen, indem du einfach zu deiner zufälligen Zahl 1 zuaddierst. Code: LottozahlenZiehung[n] = 1 + (int) (50.0 * rand() / (RAND_MAX + 1.0)); Mit freundlichen Grüßen 0wnZ edit: ich sehe gerade, dass man das nicht so machen sollte wie ich es oben geschrieben hab ! :o edit2: alles berichtigt ^^ Also für sauberen Quellcode das bitte ändern. | ||
| | |
| | #11 (permalink) | |
| Registriert seit: 12.06.07 ![]() Likes: 0 | Zitat:
Für 80.000.000 lautet die Ausgabe: Lottozahlen eingeben: Zahl 1: 23 Zahl 2: 21 Zahl 3: 43 Zahl 4: 40 Zahl 5: 33 Zahl 6: 2 Bestimme die Anzahl der Ziehungen: 80000000 Nieten : 79993577 Drei Richtige : 6422 Vier Richtige : 1 Fuenf Richtige: 0 Sechs Richige : 0 Das verwundert mich doch sehr. Irgendwo muss ein Fehler sein | |
| | |
| | #12 (permalink) |
| Registriert seit: 17.04.06 ![]() Likes: 3 | Hier mal österreichisches Lotte 6 aus 45. Anmerkung: Keinerlei Fehlerüberprüfung bei der Zahleneingabe ! C# Code
__________________ http://chm0815.blogspot.com |
| | |
| | #13 (permalink) | ||
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
http://members.cox.net/srice1/random/crandom.html Zitat:
In Deinem Fall (wahrscheinlich 32-bit seed value) würde ich auf 2^32 "random()" Aufrufe tippen, bevor das ganze wieder von Anfang an startet. d.h dass Du effektiv nur 4 Mrd Ziehungen durchführst. Man könnte nun: a) regelmäßig srand(time) aufurfen b) "bessere" random Implementierungen suchen, diese haben aber oft den Nachteil, dass sie nicht so schnell arbeiten.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | ||
| | |
| | #14 (permalink) |
| Registriert seit: 14.06.07 ![]() Likes: 0 | Programmiersprache: Python Version: Lotto 6 aus 45, einmalige Zahl pro Ziehung, keine Zusatzzahl MD5-Hash: 95a5076ac666af81dcd1c3742af1be42 (fragt nicht...Mir war halt langweilig und jetzt könnt ihr dann überprüfen ob ihr alles richtig kopiert habt. )Python Version Zu erwähnen ist das ich Python wirklich gar nicht gut kann und das ganze deswegen wohl nicht wirklich perfomant ist. Aber naja ne Skriptsprache kann sowieso nicht so schnell sein. |
| | |
| | #15 (permalink) | |
| Registriert seit: 12.06.07 ![]() Likes: 0 | Zitat:
| |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |