C kursunda yazdığımız ve hoşuma giden bir örneği paylaşmak istiyorum burada kodu ben pascal diline de çevirdim.
oyunun uzunca açıklaması https://en.wikipedia.org/wiki/Craps
kısaca iki zar atıyorsunuz atığınız zarın toplamı 7 veya 12 ise kazanıyorsunuz eğer 2 ,3,12 ise kasa kazanıyor diğer sayılar geldiğinde örnek 6 atınız burada oyunun kuralları değişiyor ve kural atığınız zarın aynısını atana tekrar zar atabiliyorsunuz taki 6 gelene kadar 6 gelirse kazanıyorsunuz ama bu seferde 7 gelirse kasa kazanıyor anlatamamış olabilirim ama kodu görünce daha iyi anlayabilirsiniz.
Bizim burada yapacağımız şey ise 100000000 (yüz milyon) kere oynadığımızda ki kazanma olasılığımızı hesaplama
Gelelim koda
program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils,System.Math; function roll_dice:Integer; var dice1,dice2:Integer; begin dice1:=RandomRange(1,7); dice2:=RandomRange(1,7); Result:=dice1+dice2; end; function game_(dice : Integer):Integer; var new_dice:Integer; begin while True do begin new_dice:=roll_dice; if new_dice=7 then begin Result:=0; Break; end; if new_dice=dice then begin Result:=1; Break; end; end; end; function game: integer; var dice:Integer; begin dice:=0; dice:=roll_dice; case dice of 7:Result:=1; 11:Result:=1; 2:Result:=0; 3:Result:=0; 12:Result:=0; else Result:=game_(dice); end; end; var win_cnt, i:LongInt; begin try win_cnt:=0; for i := 1 to 100000000 do begin win_cnt:=win_cnt+game; end; Writeln('kazanma olasiliginiz :' ,win_cnt / i:0:12); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
şimdide kursta yazdığımız c kodu
#include <stdio.h> #include <stdlib.h> #define NGAMES 1000000000 int game_(int dice) { int new_dice; for (;;) { new_dice = roll_dice(); if (new_dice == 7) return 0; if (new_dice == dice) return 1; } } int roll_dice() { int dice1 = rand() % 6 + 1; int dice2 = rand() % 6 + 1; return dice1 + dice2; } int game() //returns 1 if player wins returns 0 otherwise { int dice = roll_dice(); switch (dice) { case 7 : case 11: return 1; case 2 : case 3 : case 12: return 0; default: return game_(dice); } } int main() { int win_cnt = 0; for (int k = 0; k < NGAMES; ++k) { win_cnt += game(); } printf("kazanma olasiliginiz : %0.12f\n", (double)win_cnt / NGAMES); return 0; system("pause"); }
unutmadan yaklaşık sonucu da yazalım burada randomrange fonksiyonun üretiği değere / compiler a göre farklılıklar gösterebilir ama çok çok küçük farklılıklar döngü değerini artırarak dahada yakınsayan sonuçlar elde edilebilir.
evet sonuç uluslararası kumar sabiti : 0.492314313000 bu oyunu oynarsanız kazanma olasılığınız %49.23 yani kasa her koşulda kasa %0,77 sizden önde eee her zaman kasa kazanır 🙂