Seite 1 von 1
Programmerstellung
Verfasst: Sonntag 30. September 2007, 17:24
von Philly
hallo ich bentöige etwas hilfe.
ich muss ein programm erstellen. die aufgabe dazu lautet wie folgt:
erstellt ein programm, bei dem der computer mittels simulationen aus 10000 zufällig zusammengestellten gleichgrossen personengruppen bestimmt, wie gross die wahrscheinlichkeit des auftretens von "geburtstagszwillingen" ist.
testet euer programm für gruppengrpssen von 15, 30 und 40 personen.
mein bisher erstelltes programm behinaltet wohl einen fehler. allerdings kann ich ihn nicht finden.
mein bisher erstelltes programm:
Code: Alles auswählen
from whrandom import*
anzahl=input ('Gruppengröße? ')
er=0
def wiederholen():
global er
liste[0]*366
zw=0
for zz in range(anhal):
xx=randint(1,365)
if liste[xx]=0;
liste[xx]=1
ausgabe='%5d'%xx
else:
ausgabe='%4d'%xx
zw=1
print ausgabe,
print
er=er+zw
wo ist mein fehler? ich brauche wirklich dringend hilfe!
vielen dank!
EDIT by mawe: code tags
Verfasst: Sonntag 30. September 2007, 17:43
von mawe
Hi Philly,
ohne mich jetzt mal mit deiner Programmlogik zu beschäftigen (hab gerade keine Lust
),
Gibt's
whrandom überhaupt?
Die Sternchenimporte sind verpöhnt, besser
oder
Und was isn das?
Na ich seh grad, die Formatierung is ziemlich durcheinander.
Und ich sehr gerade dass
wiederholen() nie aufgerufen wird
Verfasst: Sonntag 30. September 2007, 19:27
von CM
Hallo phil und willkommen im Forum,
Außerdem ist "liste" gar nicht definiert und so etwas
ist eigentlich auch nicht sinnvoll.
Ich erinnere mich daran, daß ich eine Lösung für das Problem hier schon mal verlinkt habe. Aber das wirst Du so ohne weiteres nicht finden. Wenn wirklich alle Stricke reißen kann man ja mal darauf zurückkommen, bis dahin aber mal folgende Tipps - lediglich eine "Übersetzung" der Aufgabe, weil Du scheinbar damit schon ein Problem hast:
- Würfel "anzahl" Zahlen im Bereich [1,365]. (Du weißt wie man das in Python ausdrückt?)
- Stopfe diese Zahlen auch tatsächlich in eine Liste.
- Schaue nach ob irgendwelche Zahlen gleich sind und behalte die Zahl dieser Treffer.
- Wiederhole 10000-Mal
- Berechne den Anteil der Treffer (Vorsicht bei der Division von Ganzzahlen! Besser vorher eine Zahl in eine Fließkommazahl umwandeln.)
Wenn Du vorher noch einen Blick ins Tutorial wirfst, solltest Du das eigentlich schon schaffen. Nur Mut!
Gruß,
Christian
Verfasst: Sonntag 30. September 2007, 20:01
von veers
http://en.wikipedia.org/wiki/Birthday_paradox
Da gibt es elegantere Lösungen als Bruteforce
Verfasst: Sonntag 30. September 2007, 20:10
von CM
Das Problem wird oft genutzt, um einen Einführung in eine bestimmte Methode zu geben, die ich hier nicht nenne, um die Lösung nicht ganz vorweg zu nehmen. Die von Dir verlinkte analytische Lösungen entspricht schlichtweg nicht der Aufgabenstellung.
edit: Rechtschreibung
Verfasst: Sonntag 30. September 2007, 21:13
von mitsuhiko
mawe hat geschrieben:
Gibt's
whrandom überhaupt?
Nicht mehr.
Verfasst: Sonntag 30. September 2007, 21:26
von lunar
Nur wurde leider nicht nach diesen Lösungen gefragt
Verfasst: Montag 1. Oktober 2007, 13:39
von Imperator
Was ganz wichtitges: Bei if Abfragen muss man statt '=' '==' schreiben. Das ist ja schließlich keine Zuweisung. Hast du vielleicht vorher in Delphi programmiert?
Verfasst: Dienstag 2. Oktober 2007, 07:30
von BlackJack
@CM: Deine Beschreibung eines Algorithmus scheint mir nicht ganz richtig, oder zumindest zu Aufwändig. Man muss ja nicht zählen wieviele Kollisionen es in einer Gruppe gibt, sondern nur feststellen ob überhaupt eine Kollision da ist.
Also ist der Ansatz den man im Quelltext im ersten Beitrag mit ein wenig gutem Willen erkennen kann gar nicht so schlecht nur solange Geburtstage zu wählen bis die erste Kollision auftritt.
Verfasst: Dienstag 2. Oktober 2007, 08:06
von CM
CM hat geschrieben:
- Schaue nach ob irgendwelche Zahlen gleich sind und behalte die Zahl dieser Treffer.
Ja, aber das habe ich doch da geschrieben? Nun gut, wenn man das falsch verstehen kann, ist es sicher richtig dies klar zu stellen ...
Verfasst: Dienstag 2. Oktober 2007, 10:29
von BlackJack
Aber genau das ist IMHO falsch. Der Schritt müsste lauten "Schaue nach ob es mindestens einen Tag mehrfach gibt". Wieviele das sind ist egal. Dein Schritt klingt für mich so als wenn [42, 42, 23, 23] zum Beispiel 2 ergibt (Anzahl) und nicht bloss "Ja, es gab Doppelte" oder "Nö, gibt keine Doppelten".