1
5
6 Function printInt(Integer32 i) Which Returns Nothing Is External;
8 Function printString(PointerToCharacter s) Which Returns Nothing Is External;
9
10 Integer32 nasumican_broj := 9_907;
11 Function nasumican_broj() Which Returns Integer16 Does
12 Return nasumican_broj := mod(nasumican_broj * 48_271, 2_147_483_647);
13 EndFunction
15
16 Integer16 koliko_ljudi_ima_rodendan_na_taj_dan[1_000];
17
19 Function numericki_izracun_rodendanskog_paradoksa(
20 Integer16 koliko_godina_ima_dana ,
21 Integer16 koliko_ima_ljudi ,
22 Integer16 iznad_koliko_kolizija_brojimo ,
23 Integer32 koliko_smo_puta_izvrtili_simulaciju,
24 ) Which Returns Decimal32 Does
25 Integer32 koliko_smo_puta_dobili_toliko_kolizija := 0,
26 vanjski_brojac := 0;
27 While vanjski_brojac < koliko_smo_puta_izvrtili_simulaciju Loop
28 Integer16 unutarnji_brojac := 0 ,
29 dani_za_debuggiranje[1_000];
30 While unutarnji_brojac < koliko_godina_ima_dana Loop
31 koliko_ljudi_ima_rodendan_na_taj_dan[
32 unutarnji_brojac
33 ] := 0;
34 unutarnji_brojac += 1;
35 EndWhile
36 unutarnji_brojac := 0;
37 While unutarnji_brojac < koliko_ima_ljudi Loop
38 koliko_ljudi_ima_rodendan_na_taj_dan[
39 mod(
40 nasumican_broj() ,
41 koliko_godina_ima_dana,
42 )
43 ] += 1; Integer16 nasumican_dan := mod(
48 nasumican_broj ,
49 koliko_godina_ima_dana,
50 );
51 dani_za_debuggiranje[
52 unutarnji_brojac
53 ] := nasumican_dan;
54 unutarnji_brojac += 1;
55 EndWhile
56 Integer16 jesmo_li_nasli_potreban_broj_kolizija := 0;
57 unutarnji_brojac := 0;
58 While unutarnji_brojac < koliko_godina_ima_dana Loop
59 If
60 koliko_ljudi_ima_rodendan_na_taj_dan[
61 unutarnji_brojac
62 ] >= iznad_koliko_kolizija_brojimo
63 Then
64 jesmo_li_nasli_potreban_broj_kolizija := 1;
65 EndIf
66 unutarnji_brojac += 1;
67 EndWhile
68 If jesmo_li_nasli_potreban_broj_kolizija Then
69 koliko_smo_puta_dobili_toliko_kolizija += 1;
70 ElseIf koliko_ima_ljudi > koliko_godina_ima_dana Then
71 printString("---");
72 printString("Brojevi za debuggiranje:");
73 unutarnji_brojac := 0;
74 While unutarnji_brojac < koliko_ima_ljudi Loop
75 printInt(dani_za_debuggiranje[
76 unutarnji_brojac
77 ]);
78 unutarnji_brojac += 1;
79 EndWhile
80 printString("Koliko ljudi ima rodendan na taj dan:");
81 unutarnji_brojac := 0;
82 While unutarnji_brojac < koliko_godina_ima_dana Loop
83 printInt(koliko_ljudi_ima_rodendan_na_taj_dan[
84 unutarnji_brojac
85 ]);
86 unutarnji_brojac += 1;
87 EndWhile
88 printString("---");
89 EndIf
90 vanjski_brojac += 1;
91 EndWhile
92 Return Decimal32(
93 koliko_smo_puta_dobili_toliko_kolizija
94 ) / koliko_smo_puta_izvrtili_simulaciju;
95 EndFunction
96