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 or
63 koliko_ljudi_ima_rodendan_na_taj_dan[
64 unutarnji_brojac
65 ] = iznad_koliko_kolizija_brojimo
66 Then
67 jesmo_li_nasli_potreban_broj_kolizija := 1;
68 EndIf
69 unutarnji_brojac += 1;
70 EndWhile
71 If jesmo_li_nasli_potreban_broj_kolizija Then
72 koliko_smo_puta_dobili_toliko_kolizija += 1;
73 ElseIf koliko_ima_ljudi > koliko_godina_ima_dana Then
74 printString("---");
75 printString("Brojevi za debuggiranje:");
76 unutarnji_brojac := 0;
77 While unutarnji_brojac < koliko_ima_ljudi Loop
78 printInt(dani_za_debuggiranje[
79 unutarnji_brojac
80 ]);
81 unutarnji_brojac += 1;
82 EndWhile
83 printString("Koliko ljudi ima rodendan na taj dan:");
84 unutarnji_brojac := 0;
85 While unutarnji_brojac < koliko_godina_ima_dana Loop
86 printInt(koliko_ljudi_ima_rodendan_na_taj_dan[
87 unutarnji_brojac
88 ]);
89 unutarnji_brojac += 1;
90 EndWhile
91 printString("---");
92 EndIf
93 vanjski_brojac += 1;
94 EndWhile
95 Return Decimal32(
96 koliko_smo_puta_dobili_toliko_kolizija
97 ) / koliko_smo_puta_izvrtili_simulaciju;
98 EndFunction
99