Geçen günlerde matematik ile ilgili videolar izlerken karşıma yazı tura ve paranın hileli olması ile ilgili bir video çıktı. Bir paranın asla hileli olup olmadığı anlaşılamaz kararına varıldı. Bende kendimce bir yazı tura fonksiyonu yazıp bunu büyük sayılar(1018 < x < 1021) ile tekrarladım. (Eğer sizde büyük sayılar ile tekrar yapacaksanız koddaki Int ögelerini kontrol edip değiştiriniz.) Paranın hileli olma durumunu yazı tura yüzdeleri ile oynayarak oluşturdum. Daha sonra hangi dil veya hangi platform daha hızlı diye merak edip 3 farklı dilde 4 farklı işletim sistemi kullanarak işlemleri tekrarladım. Beni şaşırtacak sonuçları alamasam da belki kodlar işe yarayabilir diye paylaşıyorum.

Örnek bir yazı tura işlemi sonucu aşağıdaki gibidir.
Atış Sayısı Giriniz: 1000000000
Tura Hile Yüzdesi Giriniz: 50
İşlem Süresi: 53 saniye
Toplam Atış Sayısı: 1000000000(%100)
Toplam Tura Sayısı: 500012454(%50,001247)
Toplam Yazı Sayısı: 499987546(%49,998753)
C# Kodları
class islemSonuc
{
public string bilgi { get; set; }
public int kacdefa { get; set; }
public List<string> gelenYuzler { get; set; }
public int turaSayisi { get; set; }
public int yaziSayisi { get; set; }
}
Yukarıdaki kod ile fırlatma fonksiyonundan gelen sonuçları alıyoruz.
class para
{
public islemSonuc firlat(int kacdefa, int turaYuzdesi)
{
Random _random = new Random();
List<int> yuzde = new List<int>();
for (int x = 1; x < 101; x++)
yuzde.Add(x);
islemSonuc i = new islemSonuc() {bilgi="İşlem Başlamadı",turaSayisi=0,yaziSayisi=0,kacdefa=kacdefa,gelenYuzler=new List<string>() };
if(kacdefa%2 == 0 && kacdefa > 0 && turaYuzdesi <= 100 && turaYuzdesi >= 0)
{
for(int de=1; de <= kacdefa; de++)
{
int a = _random.Next(1, 101);
if (a <= turaYuzdesi)
{
i.gelenYuzler.Add("tura");
i.turaSayisi = i.turaSayisi + 1;
}
else
{
i.yaziSayisi = i.yaziSayisi + 1;
i.gelenYuzler.Add("yazi");
}
}
}
return i;
}
}
Yukarıdaki kod para sınıfının tanımı, isteyen ihtiyacına göre genişletebilir, benim ihtiyacım olmadığı için detaylı para sınıfı tanımlamadım.
class Program
{
static void Main(string[] args)
{
int atisSayisi = 0;
int turaYuzdesi = 0;
Console.WriteLine("Atış Sayısı Giriniz:");
atisSayisi = Convert.ToInt32(Console.ReadLine());
while(atisSayisi % 2 != 0)
{
Console.WriteLine("Atış Sayısı Giriniz:");
atisSayisi = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("Tura Hile Yüzdesi Giriniz:");
turaYuzdesi = Convert.ToInt32(Console.ReadLine());
para p = new para();
islemSonuc s = p.firlat(atisSayisi, turaYuzdesi);
Console.WriteLine("Toplam Atış Sayısı: " + s.kacdefa +"(%"+ (float)s.kacdefa / (float)s.kacdefa * 100 +")");
Console.WriteLine("Toplam Tura Sayısı: "+ s.turaSayisi + "(%" + (float)s.turaSayisi / (float)s.kacdefa * 100 + ")");
Console.WriteLine("Toplam Yazı Sayısı: " + s.yaziSayisi + "(%" + (float)s.yaziSayisi / (float)s.kacdefa * 100 + ")");
foreach (string x in s.gelenYuzler)
Console.WriteLine(x);
Console.ReadKey();
}
}
Yukarıdaki kodlar konsol başlangıç kodlarımız ben C# da konsol uygulaması olarak yazdım isteyen masaüstü veya web projesine kolayca çevirebilir ve arayüz ile güzel bir uygulama haline getirebilir.
Java ve Swift kodları diğer bilgisayarımda şuanda kodları eklemedim eğer eklenmemiş ise yorum yazarak isteyebilirsin.
Bir yanıt yazın