Anasayfa / C / Craps Oyunu kazanma olasılığı c pascal

Craps Oyunu kazanma olasılığı c pascal

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 🙂

Hakkında ibrahim

İlgili Makaleler

borlndmm.dll disable delphi

Kod yürütülmesi devam edemiyor çünkü borlndmm.dll bulunamadı. Programı yeniden yüklemek bu sorunu çözebilir. borlndmm.dll gerekliliğini …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir