Delphi Can
uluslararası kumar sabiti bulma craps oyunu - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Delphi (http://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (http://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: uluslararası kumar sabiti bulma craps oyunu (/showthread.php?tid=1361)



uluslararası kumar sabiti bulma craps oyunu - masteryoda - 24-09-2017

Merhaba,
C kursunda yazdığımız ve hoşuma giden bir örneği paylaşmak istiyorum
oyunun uzunca açıklaması Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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 kodunu ekliyorum compile edecek araçlarınız var ise compile edip hız farkını yorum olarak eklemeyi unutmayın

#include <stdio.h>
#include <stdlib.h>


#define     NGAMES 100000000

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);
system("pause");

return 0;
}



uluslararası kumar sabiti bulma craps oyunu - savasabd - 24-09-2017

Bilgisayarı kapattım,telefondan yazıyorum,yarın deneyip sonucunu yazacağım.Bir de fikrimce ,main'in içine srand(time(0)) fonksiyonunu koyarsanız rand fonksiyonu daha sağlıklı çalışacaktır.iyi geceler.


Cvp: uluslararası kumar sabiti bulma craps oyunu - frmman - 25-09-2017

Test Ortamı :
Delphi 10.2
Intel® Core™ i7-6700HQ CPU @ 2.60GHz



09:05:27
kazanma olasiliginiz :0.492944175071
09:05:31
milisn: 4847


Süre ölçümü için aşağıdaki küçük değişikliği yaptım.



     starttime := now();
    writeln(timetostr(now));
    for i := 1 to 100000000  do
    begin
     win_cnt:=win_cnt+game;
    end;
    Writeln('kazanma olasiliginiz :' ,win_cnt / i:0:12);
    writeln(timetostr(now));
    stoptime := Now();

    fark := MilliSecondsBetween(stoptime,starttime);
    writeln('milisn: ' + inttostr(fark));

    Readln;



Cvp: uluslararası kumar sabiti bulma craps oyunu - savasabd - 25-09-2017

Denedim İşte Sonuçlar:
[attachment=158]
[attachment=159]
[attachment=160]
[attachment=161]

Not:Elementary os'un üzerinde windows'u sanal olarak kullanıyorum.