Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead in /websites/users/pyth/public_html/pythwww/common/footer.php on line 5

Pythagoras februari 2002

Een verjaardagsprogramma
door Martin Kindt en Tom Goris

Als je morgen op school een klas van 30 leerlingen binnenstapt en uitzoekt of er misschien twee leerlingen op dezelfde dag jarig zijn, is er een flinke kans dat je succes hebt, wel zo'n 70%. Dat betekent dat je bij uitvoering van dit toevalsexperiment in honderd klassen ongeveer zeventig positieve resultaten kunt verwachten. Positief betekent hier dat er ten minste twee leerlingen uit eenzelfde klas op dezelfde dag jarig zijn.

Je kunt zo'n experiment ook in je eentje op een computer uitvoeren. Daarvoor heb je dan wel een geschikt simulatieprogramma nodig. Als je dat niet hebt, kun je je ook redden met de grafische rekenmachine. Over dat laatste gaat dit artikel.

Toevalsgetallen

Een grafische rekenmachine - hier de TI 83 - kan op verzoek toevalsgetallen produceren en die kun je dan gebruiken om willekeurige dagen van het jaar voor te stellen. De eenvoudigste manier is om de dagen nummers te geven van 1 tot en met 365. In het menu PRB (onder MATH) kies je randint (random integer betekent heel toevalsgetal). Als je nu intoetst 1, 365, 30, dan 'trekt' de GR dertig keer een getal uit de nummers van 1 tot en met 365. Bij elke trekking doen alle getallen weer mee, zodat je dubbele uitkomsten kunt krijgen. Om snel te kunnen overzien of er dubbelkeuzes zijn, kun je die getallen opbergen in een lijst en daarna sorteren. Via de toetsen STO en L1 komen ze in een lijst en via STAT en SortA worden ze in volgorde van klein naar groot geplaatst.

Op het scherm verschijnt na deze handelingen:

randint(1,365,30) -> L1
SortA(L1)

Als er Done op het scherm komt, weet je dat de laatste opdracht uitgevoerd is en kun je via STAT Edit de lijst van 30 dagen met de cursor doorlopen en constateren of je succes hebt. Op deze manier één experiment doen, gaat best, maar als je dit nog eens 99 keer moet doen...

Figuur 1: programma Datum

Programma

Voor zo'n toevalsexperiment met herhaling kun je echter ook een programma schrijven. Dat is dan even wat meer werk, maar als je dat eenmaal klaar hebt, gaat het herhalen snel. Een voorbeeld van zo'n programma zie je in figuur 1.

Als je wat ervaring hebt met programmeren, zal je dit vlot kunnen lezen. De eerste regel zorgt voor een schone lei. De groepsgrootte wordt opgegeven via N. Het grijze blok is de kern van het programma; daar wordt de lijst van toevalsdata gemaakt die vervolgens wordt langsgelopen. De telvariabele T houdt de plaats in de lijst bij; zodra twee opvolgende data gelijk zijn, krijgt H de waarde 1 en stopt het programma. Gebeurt dit niet, dan wordt de hele lijst afgewerkt. Tenslotte krijg je een 1 ('succes') of een 0 ('mislukking') op het scherm. Op de TI 83 kan dit via het menu PRGM NEW worden ingevoerd en PRGM EXEC zorgt vervolgens voor de uitvoer. Je hoeft dan slechts de Enter toets te gebruiken om een herhaling van het experiment te krijgen.

Die herhaling kan ook worden geprogrammeerd, waarbij het aantal successen wordt bijgehouden. Zo krijg je aan het eind een schatting voor de kans bij een vooraf gegeven N-waarde, zie figuur 2.

Het bijna-verjaardagsprobleem

De vraag naar de kans dat twee of meer personen in een groep gelijktijdig jarig zijn, kan ook worden verruimd. Bijvoorbeeld: wat is de kans dat twee of meer personen binnen 1 dag van elkaar jarig zijn? Dat de exacte berekening van deze kans hier een stuk lastiger is dan in het gewone verjaardagsprobleem, blijkt al gauw als je daarmee aan de slag gaat. Het grappige is dat een verandering van het programma op de GR om een 'bijna-verjaardagsexperiment' te simuleren, veel minder lastig is. Op het eerste gezicht zou je wellicht denken dat je slechts de regel:

if L1(T) = L1(T+1)
hoeft te vervangen door:
if L1(T+1) - L1(T) < 2

Dan houd je echter geen rekening met het feit dat 31 december en 1 januari ook slechts 1 dag verschillen. Hoe los je dat probleem op? Eigenlijk zou je een cirkelvormige lijst moeten hebben met 365 dagen, maar dat gaat natuurlijk niet. Wat wel kan is om - als 1 januari op de lijst voorkomt - die lijst te verlengen met het getal 366. Voor het programma betekent dit, dat eerst de lijst met N toevalsgetallen zo nodig wordt uitgebreid, alvorens er wordt gecheckt of er een paar getallen is dat hoogstens 1 verschilt. Dat kan via het programmablokje uit figuur 3.

De variabele D houdt bij hoeveel langer de lijst geworden is. Dit programmablokje komt dan onmiddellijk na het sorteren van de lijst. In de daaropvolgende tekst hoef je dan maar twee dingen te veranderen. Behalve dat het beslissingscriterium hier moet worden:

if L1(T+1) - L1(T) < 2

moet je er ook voor zorgen dat de langer geworden lijst doorlopen wordt. Dat doe je met:

while T < N + D

Na deze aanpassingen kan het experiment worden uitgevoerd en kunnen kansen worden geschat. Zo kun je bijvoorbeeld vinden dat in een klas van 30 leerlingen de kans bijna 98% is dat er twee of meer leerlingen binnen 1 dag van elkaar jarig zijn. Omgekeerd: om een fifty-fifty kans te hebben dat twee personen binnen 1 dag van elkaar jarig zijn, heb je slechts 14 personen nodig.

Figuur 2: programma Herdatum

Figuur 2

Figuur 2: programma Bijnadat

Figuur 3

De programma's

Laatst bijgewerkt op: Tuesday 27 May 2003, 14:10

naar boven  home  e-mail de webmaster