Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
uluslararası kumar sabiti bulma craps oyunu
#1
Merhaba,
C kursunda yazdığımız ve hoşuma giden bir örneği paylaşmak istiyorum
oyunun uzunca açıklaması https://en.0wikipedia.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 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;
}

“Do. Or do not. There is no try.”
Cevapla
#2
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.
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.
https://play.google.com/store/apps/developer?id=ONGUN
WWW
Cevapla
#3
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;
Cevapla
#4
Photo 
Denedim İşte Sonuçlar:
   
   
   
   

Not:Elementary os'un üzerinde windows'u sanal olarak kullanıyorum.
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.
https://play.google.com/store/apps/developer?id=ONGUN
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Dosya content type bulma tuna 7 1.764 18-01-2023, Saat: 20:29
Son Yorum: tuna
  Kayıt bulma. enigma 7 1.389 11-01-2023, Saat: 21:49
Son Yorum: enigma
  İndirilenler Klasörünü Bulma sunbeki 7 1.742 27-04-2022, Saat: 09:39
Son Yorum: frmman
  Konum bulma gonulali 5 1.210 09-02-2022, Saat: 09:43
Son Yorum: gonulali
  Tag'larına göre componentleri bulma [Çözüldü] Mesut 4 1.434 05-07-2021, Saat: 11:05
Son Yorum: Mesut



Konuyu Okuyanlar: 1 Ziyaretçi