Gyakorlati alapok

A digitális pénzfeldobás esélyei

 

Az előző fejezetben megtanultuk az alapszintű véletlenszám-generálást. Ebben a fejezetben egy másik módszert mutatok meg és rögtön "kamatoztatjuk" is egy egyszerű pénzfeldobó algoritmus felépítésével. Ennek persze penetráns átverés szaga van, hiszen a valószínűség-számítások alapján hosszabb távon nem kamatozik semmi, amelynek alapja a szerencse.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Azaz lényegében mindig a kaszinó nyer; nem véletlenül alkalmaznak matematikusokat ostoba szerencsejátékaik nyerési esélyeinek előzetes kiszámításához.

 

Itt és most okulásul és programozási gyakorlatként gyorsan megnézzük egy pénzfeldobó szerencsejáték nyerési esélyeit. A pénzfeldobásnak 2 lehetséges kimenetele van: FEJ vagy ÍRÁS. Az elnevezés onnan ered, hogy a legtöbb pénzérmén található egy írásos rész a pénzérték jelölésére (az alábbi képen jobb oldalon egy címer + half dollar), a másik oldalon általában egy híres ember oldalprofilja, mint FEJ, nemzeti büszkélkedés gyanánt:

 

www.informatika-programozas.hu

 

A pénzérme feldobásakor a 2 egyenlő esély meglepetésszerűen 50-50%-os valószínűséget jelent. Ezt könnyű implementálni, hiszen ha veszünk egy véletlengenerátort...

 

import java.util.Random;

 

...és az osztály példányosítása (Random random = new Random();), valamint némi konfigurálás után (int veletlenSzam = random.nextInt(1000) + 1; ekkor 1 és 1000 között generálunk véletlenszámokat), az egész számok azonos, szintén 50-50%-os valószínűségű, páros és páratlan tulajdonságának felhasználásával könnyen tudjuk modellezni a digitális pénzfeldobás esélyeit. A döntési feltétel lényege, hogy ha a véletlenszám 2-vel osztott maradéka 0, akkor a szám páros, másként páratlan (if(veletlenSzam % 2 == 0)). A feldobások számát a feldobasokSzama változóban tároljuk és ez lesz a for ciklus felső határértéke (for (int i = 1; i <= feldobasokSzama; i++)):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {
    public static void main(String[] args) {
    int feldobasokSzama = 100;
    Random random = new Random();
        for (int i = 1; i <= feldobasokSzama; i++){
            int veletlenSzam = random.nextInt(1000) + 1;
                if(veletlenSzam % 2 == 0){
                    System.out.println (i + ". feldobás: " + veletlenSzam + " - FEJ.");
                }
                else
                    System.out.println (i + ". feldobás: " + veletlenSzam + " - ÍRÁS.");
        }
    }
}

 

Végeredmény (például):

1. feldobás: 408 - FEJ.
2. feldobás: 294 - FEJ.
3. feldobás: 961 - ÍRÁS.
4. feldobás: 361 - ÍRÁS.
5. feldobás: 284 - FEJ.
6. feldobás: 214 - FEJ.
7. feldobás: 603 - ÍRÁS.
8. feldobás: 111 - ÍRÁS.
9. feldobás: 840 - FEJ.
10. feldobás: 813 - ÍRÁS.
11. feldobás: 825 - ÍRÁS.
12. feldobás: 69 - ÍRÁS.
13. feldobás: 508 - FEJ.
14. feldobás: 32 - FEJ.
15. feldobás: 957 - ÍRÁS.
16. feldobás: 144 - FEJ.
17. feldobás: 943 - ÍRÁS.
18. feldobás: 636 - FEJ.
19. feldobás: 467 - ÍRÁS.
20. feldobás: 16 - FEJ.
21. feldobás: 856 - FEJ.
22. feldobás: 854 - FEJ.
23. feldobás: 884 - FEJ.
24. feldobás: 469 - ÍRÁS.
25. feldobás: 88 - FEJ.
26. feldobás: 195 - ÍRÁS.
27. feldobás: 218 - FEJ.
28. feldobás: 671 - ÍRÁS.
29. feldobás: 812 - FEJ.
30. feldobás: 209 - ÍRÁS.
31. feldobás: 38 - FEJ.
32. feldobás: 751 - ÍRÁS.
33. feldobás: 286 - FEJ.
34. feldobás: 976 - FEJ.
35. feldobás: 29 - ÍRÁS.
36. feldobás: 558 - FEJ.
37. feldobás: 970 - FEJ.
38. feldobás: 985 - ÍRÁS.
39. feldobás: 377 - ÍRÁS.
40. feldobás: 271 - ÍRÁS.
41. feldobás: 582 - FEJ.
42. feldobás: 401 - ÍRÁS.
43. feldobás: 52 - FEJ.
44. feldobás: 251 - ÍRÁS.
45. feldobás: 227 - ÍRÁS.
46. feldobás: 417 - ÍRÁS.
47. feldobás: 175 - ÍRÁS.
48. feldobás: 378 - FEJ.
49. feldobás: 681 - ÍRÁS.
50. feldobás: 726 - FEJ.
51. feldobás: 704 - FEJ.
52. feldobás: 825 - ÍRÁS.
53. feldobás: 134 - FEJ.
54. feldobás: 720 - FEJ.
55. feldobás: 162 - FEJ.
56. feldobás: 484 - FEJ.
57. feldobás: 167 - ÍRÁS.
58. feldobás: 209 - ÍRÁS.
59. feldobás: 54 - FEJ.
60. feldobás: 104 - FEJ.
61. feldobás: 711 - ÍRÁS.
62. feldobás: 532 - FEJ.
63. feldobás: 216 - FEJ.
64. feldobás: 805 - ÍRÁS.
65. feldobás: 580 - FEJ.
66. feldobás: 159 - ÍRÁS.
67. feldobás: 780 - FEJ.
68. feldobás: 951 - ÍRÁS.
69. feldobás: 297 - ÍRÁS.
70. feldobás: 118 - FEJ.
71. feldobás: 367 - ÍRÁS.
72. feldobás: 777 - ÍRÁS.
73. feldobás: 646 - FEJ.
74. feldobás: 797 - ÍRÁS.
75. feldobás: 786 - FEJ.
76. feldobás: 573 - ÍRÁS.
77. feldobás: 284 - FEJ.
78. feldobás: 474 - FEJ.
79. feldobás: 321 - ÍRÁS.
80. feldobás: 409 - ÍRÁS.
81. feldobás: 940 - FEJ.
82. feldobás: 525 - ÍRÁS.
83. feldobás: 611 - ÍRÁS.
84. feldobás: 969 - ÍRÁS.
85. feldobás: 623 - ÍRÁS.
86. feldobás: 469 - ÍRÁS.
87. feldobás: 337 - ÍRÁS.
88. feldobás: 996 - FEJ.
89. feldobás: 88 - FEJ.
90. feldobás: 881 - ÍRÁS.
91. feldobás: 585 - ÍRÁS.
92. feldobás: 830 - FEJ.
93. feldobás: 14 - FEJ.
94. feldobás: 7 - ÍRÁS.
95. feldobás: 772 - FEJ.
96. feldobás: 899 - ÍRÁS.
97. feldobás: 310 - FEJ.
98. feldobás: 684 - FEJ.
99. feldobás: 51 - ÍRÁS.
100. feldobás: 51 - ÍRÁS.

 

Ez mind korrekt, de kiértékelés nélkül nem sokat ér. Ehhez 2 további változót kell deklarálnunk...

 

int fejSzamlalo = 0;
int irasSzamlalo = 0;

 

...amelyek az if és else ágakban sikeres fej-, illetve írásdobást számolják, például:

 

if(veletlenSzam % 2 == 0){
    System.out.println (i + ". feldobás: " + veletlenSzam + " - FEJ.");
    fejSzamlalo++;

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {
    public static void main(String[] args) {
    int feldobasokSzama = 100;
    int fejSzamlalo = 0;
    int irasSzamlalo = 0;
    Random random = new Random();
    for (int i = 1; i <= feldobasokSzama; i++){
        int veletlenSzam = random.nextInt(1000) + 1;
            if(veletlenSzam % 2 == 0){
                System.out.println (i + ". feldobás: " + veletlenSzam + " - FEJ.");
                fejSzamlalo++;
            }
            else if(veletlenSzam % 2 !=0){
                System.out.println (i + ". feldobás: " + veletlenSzam + " - ÍRÁS.");
                irasSzamlalo++;
            }
        }
        System.out.println();
        System.out.println("FEJ dobások száma: " + fejSzamlalo +

                            "\n" + "ÍRÁS dobások száma: " + irasSzamlalo);
    }
}

 

Végeredmény (például):

1. feldobás: 130 - FEJ.
2. feldobás: 68 - FEJ.
3. feldobás: 750 - FEJ.
4. feldobás: 119 - ÍRÁS.
5. feldobás: 643 - ÍRÁS.
6. feldobás: 313 - ÍRÁS.
7. feldobás: 851 - ÍRÁS.
8. feldobás: 267 - ÍRÁS.
9. feldobás: 177 - ÍRÁS.
10. feldobás: 429 - ÍRÁS.
11. feldobás: 117 - ÍRÁS.
12. feldobás: 783 - ÍRÁS.
13. feldobás: 80 - FEJ.
14. feldobás: 981 - ÍRÁS.
15. feldobás: 531 - ÍRÁS.
16. feldobás: 972 - FEJ.
17. feldobás: 84 - FEJ.
18. feldobás: 741 - ÍRÁS.
19. feldobás: 679 - ÍRÁS.
20. feldobás: 484 - FEJ.
21. feldobás: 279 - ÍRÁS.
22. feldobás: 315 - ÍRÁS.
23. feldobás: 928 - FEJ.
24. feldobás: 114 - FEJ.
25. feldobás: 642 - FEJ.
26. feldobás: 181 - ÍRÁS.
27. feldobás: 553 - ÍRÁS.
28. feldobás: 228 - FEJ.
29. feldobás: 389 - ÍRÁS.
30. feldobás: 176 - FEJ.
31. feldobás: 607 - ÍRÁS.
32. feldobás: 463 - ÍRÁS.
33. feldobás: 858 - FEJ.
34. feldobás: 311 - ÍRÁS.
35. feldobás: 719 - ÍRÁS.
36. feldobás: 366 - FEJ.
37. feldobás: 804 - FEJ.
38. feldobás: 532 - FEJ.
39. feldobás: 198 - FEJ.
40. feldobás: 358 - FEJ.
41. feldobás: 621 - ÍRÁS.
42. feldobás: 390 - FEJ.
43. feldobás: 850 - FEJ.
44. feldobás: 264 - FEJ.
45. feldobás: 604 - FEJ.
46. feldobás: 487 - ÍRÁS.
47. feldobás: 926 - FEJ.
48. feldobás: 564 - FEJ.
49. feldobás: 470 - FEJ.
50. feldobás: 312 - FEJ.
51. feldobás: 563 - ÍRÁS.
52. feldobás: 702 - FEJ.
53. feldobás: 315 - ÍRÁS.
54. feldobás: 523 - ÍRÁS.
55. feldobás: 873 - ÍRÁS.
56. feldobás: 336 - FEJ.
57. feldobás: 529 - ÍRÁS.
58. feldobás: 941 - ÍRÁS.
59. feldobás: 173 - ÍRÁS.
60. feldobás: 772 - FEJ.
61. feldobás: 670 - FEJ.
62. feldobás: 590 - FEJ.
63. feldobás: 788 - FEJ.
64. feldobás: 428 - FEJ.
65. feldobás: 350 - FEJ.
66. feldobás: 766 - FEJ.
67. feldobás: 174 - FEJ.
68. feldobás: 48 - FEJ.
69. feldobás: 781 - ÍRÁS.
70. feldobás: 542 - FEJ.
71. feldobás: 822 - FEJ.
72. feldobás: 675 - ÍRÁS.
73. feldobás: 174 - FEJ.
74. feldobás: 296 - FEJ.
75. feldobás: 670 - FEJ.
76. feldobás: 347 - ÍRÁS.
77. feldobás: 18 - FEJ.
78. feldobás: 636 - FEJ.
79. feldobás: 999 - ÍRÁS.
80. feldobás: 707 - ÍRÁS.
81. feldobás: 245 - ÍRÁS.
82. feldobás: 289 - ÍRÁS.
83. feldobás: 5 - ÍRÁS.
84. feldobás: 454 - FEJ.
85. feldobás: 690 - FEJ.
86. feldobás: 116 - FEJ.
87. feldobás: 305 - ÍRÁS.
88. feldobás: 746 - FEJ.
89. feldobás: 398 - FEJ.
90. feldobás: 215 - ÍRÁS.
91. feldobás: 241 - ÍRÁS.
92. feldobás: 967 - ÍRÁS.
93. feldobás: 210 - FEJ.
94. feldobás: 857 - ÍRÁS.
95. feldobás: 530 - FEJ.
96. feldobás: 387 - ÍRÁS.
97. feldobás: 834 - FEJ.
98. feldobás: 654 - FEJ.
99. feldobás: 45 - ÍRÁS.
100. feldobás: 931 - ÍRÁS.

FEJ dobások száma: 53
ÍRÁS dobások száma: 47

 

Ahhoz, hogy nagyobb tartományban teszteljük az esélyeket, csak a feldobasokSzama változót kell nagyobbra állítanunk, de esélyek és szórások nem fognak megváltozni: 10000 virtuális pénzfeldobásnál sem lesz nagyobb esélye az egyiknek a másiknál.

 

További érdekes adalék, ha megrögzött szerencsejátékosként virtuális pénzben kezdünk el játszani. Tételezzük fel, hogy 1000 pénzzel nyitunk...

 

int penz = 1000;

 

...és mindig FEJre teszünk. Ekkor a jutalmunk +10 pénz lesz:

 

if(veletlenSzam % 2 == 0){
    System.out.println (i + ". feldobás: " + veletlenSzam + " - FEJ.");
    fejSzamlalo++;
    penz += 10;

 

A penz += 10 művelet azt jelenti, hogy a pénzhez hozzáadunk +10 pénzt; ez egyenértékű a következő művelettel: penz = penz + 10. Ellenkező esetben (ÍRÁS) viszont -10 pénz kerül levonásra az egyenlegből (penz -= 10).

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {
    public static void main(String[] args) {
    int feldobasokSzama = 100;
    int fejSzamlalo = 0;
    int irasSzamlalo = 0;
    int penz = 1000;
    Random random = new Random();
    for (int i = 1; i <= feldobasokSzama; i++){
        int veletlenSzam = random.nextInt(1000) + 1;
            if(veletlenSzam % 2 == 0){
                System.out.println (i + ". feldobás: " + veletlenSzam + " - FEJ.");
                fejSzamlalo++;
                penz += 10;
            }
            else if(veletlenSzam % 2 !=0){
                System.out.println (i + ". feldobás: " + veletlenSzam + " - ÍRÁS.");
                irasSzamlalo++;
                penz -= 10;
            }
        }
        System.out.println();
        System.out.println("FEJ dobások száma: " + fejSzamlalo +
                        "\n" + "ÍRÁS dobások száma: " + irasSzamlalo +
                        "\n" + "Egyenleg: " + penz);
    }
}

 

Végeredmény (például):

1. feldobás: 730 - FEJ.
2. feldobás: 963 - ÍRÁS.
3. feldobás: 395 - ÍRÁS.
4. feldobás: 129 - ÍRÁS.
5. feldobás: 648 - FEJ.
6. feldobás: 739 - ÍRÁS.
7. feldobás: 550 - FEJ.
8. feldobás: 155 - ÍRÁS.
9. feldobás: 391 - ÍRÁS.
10. feldobás: 277 - ÍRÁS.
11. feldobás: 739 - ÍRÁS.
12. feldobás: 79 - ÍRÁS.
13. feldobás: 216 - FEJ.
14. feldobás: 872 - FEJ.
15. feldobás: 138 - FEJ.
16. feldobás: 497 - ÍRÁS.
17. feldobás: 848 - FEJ.
18. feldobás: 503 - ÍRÁS.
19. feldobás: 692 - FEJ.
20. feldobás: 334 - FEJ.
21. feldobás: 18 - FEJ.
22. feldobás: 682 - FEJ.
23. feldobás: 956 - FEJ.
24. feldobás: 764 - FEJ.
25. feldobás: 256 - FEJ.
26. feldobás: 991 - ÍRÁS.
27. feldobás: 354 - FEJ.
28. feldobás: 463 - ÍRÁS.
29. feldobás: 622 - FEJ.
30. feldobás: 126 - FEJ.
31. feldobás: 860 - FEJ.
32. feldobás: 495 - ÍRÁS.
33. feldobás: 179 - ÍRÁS.
34. feldobás: 938 - FEJ.
35. feldobás: 585 - ÍRÁS.
36. feldobás: 87 - ÍRÁS.
37. feldobás: 828 - FEJ.
38. feldobás: 259 - ÍRÁS.
39. feldobás: 956 - FEJ.
40. feldobás: 857 - ÍRÁS.
41. feldobás: 575 - ÍRÁS.
42. feldobás: 712 - FEJ.
43. feldobás: 905 - ÍRÁS.
44. feldobás: 884 - FEJ.
45. feldobás: 705 - ÍRÁS.
46. feldobás: 729 - ÍRÁS.
47. feldobás: 631 - ÍRÁS.
48. feldobás: 671 - ÍRÁS.
49. feldobás: 524 - FEJ.
50. feldobás: 723 - ÍRÁS.
51. feldobás: 74 - FEJ.
52. feldobás: 736 - FEJ.
53. feldobás: 257 - ÍRÁS.
54. feldobás: 741 - ÍRÁS.
55. feldobás: 276 - FEJ.
56. feldobás: 677 - ÍRÁS.
57. feldobás: 78 - FEJ.
58. feldobás: 96 - FEJ.
59. feldobás: 279 - ÍRÁS.
60. feldobás: 476 - FEJ.
61. feldobás: 924 - FEJ.
62. feldobás: 331 - ÍRÁS.
63. feldobás: 145 - ÍRÁS.
64. feldobás: 734 - FEJ.
65. feldobás: 103 - ÍRÁS.
66. feldobás: 508 - FEJ.
67. feldobás: 853 - ÍRÁS.
68. feldobás: 78 - FEJ.
69. feldobás: 419 - ÍRÁS.
70. feldobás: 258 - FEJ.
71. feldobás: 538 - FEJ.
72. feldobás: 695 - ÍRÁS.
73. feldobás: 895 - ÍRÁS.
74. feldobás: 863 - ÍRÁS.
75. feldobás: 178 - FEJ.
76. feldobás: 467 - ÍRÁS.
77. feldobás: 129 - ÍRÁS.
78. feldobás: 611 - ÍRÁS.
79. feldobás: 905 - ÍRÁS.
80. feldobás: 432 - FEJ.
81. feldobás: 854 - FEJ.
82. feldobás: 772 - FEJ.
83. feldobás: 560 - FEJ.
84. feldobás: 692 - FEJ.
85. feldobás: 788 - FEJ.
86. feldobás: 98 - FEJ.
87. feldobás: 509 - ÍRÁS.
88. feldobás: 298 - FEJ.
89. feldobás: 550 - FEJ.
90. feldobás: 990 - FEJ.
91. feldobás: 41 - ÍRÁS.
92. feldobás: 125 - ÍRÁS.
93. feldobás: 835 - ÍRÁS.
94. feldobás: 155 - ÍRÁS.
95. feldobás: 157 - ÍRÁS.
96. feldobás: 273 - ÍRÁS.
97. feldobás: 267 - ÍRÁS.
98. feldobás: 413 - ÍRÁS.
99. feldobás: 722 - FEJ.
100. feldobás: 873 - ÍRÁS.

FEJ dobások száma: 48
ÍRÁS dobások száma: 52
Egyenleg: 960

 

Ebben a 100-as körben speciel vesztettünk 40 pénzt, a kaszinó legnagyobb örömére. Ha tovább játszunk a pénzfeldobó algoritmussal, akkor a nyerések és veszteségek kb. 900 és 1100 pénz között oszlanak meg, teljesen véletlenszerűen. Ebből következően 1000 pénzes egyenlegünket sem tudjuk lemeríteni 1000 db virtuális pénzfeldobással, ehhez jóval többet kell digitális érménket a levegőbe dobálni. 10000 feldobás után már nekem kijött 140-es egyenleg, ami már majdnem 90%-os veszteség. De nézzük csak 10 db 100000 feldobásos kör abszolút véletlenszerű egyenlegét (int feldobasokSzama = 100000;):

 

FEJ dobások száma: 49986
ÍRÁS dobások száma: 50014
Egyenleg: 720

FEJ dobások száma: 49988
ÍRÁS dobások száma: 50012
Egyenleg: 760

FEJ dobások száma: 50065
ÍRÁS dobások száma: 49935
Egyenleg: 2300

FEJ dobások száma: 49907
ÍRÁS dobások száma: 50093
Egyenleg: -860

FEJ dobások száma: 49962
ÍRÁS dobások száma: 50038
Egyenleg: 240

FEJ dobások száma: 49976
ÍRÁS dobások száma: 50024
Egyenleg: 520

FEJ dobások száma: 49949
ÍRÁS dobások száma: 50051
Egyenleg: -20

FEJ dobások száma: 50072
ÍRÁS dobások száma: 49928
Egyenleg: 2440

FEJ dobások száma: 49911
ÍRÁS dobások száma: 50089
Egyenleg: -780

FEJ dobások száma: 50014
ÍRÁS dobások száma: 49986
Egyenleg: 1280

 

10 körben 7 alkalommal vesztettünk, néhány esetben több mint 100%-os veszteséggel és csak 3 alkalommal nyertünk.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Szóval, ezzel vannak tisztában a kaszinóban: játsszunk minél többet, minél nagyobb pénzzel (és lehetőleg minél kevesebb esélyű játékban), mert hosszabb távon úgyis elveszítjük.