Seyirci joker hakkı kodlama

  • Konuyu başlatan X0BA
  • Başlangıç Tarihi
  • Mesaj 7
  • Görüntüleme 1.207

X0BA

Decapat
Katılım
9 Mart 2019
Mesajlar
43
Arkadaşlar 11. sınıfta okuyorum projem var proje olarak bilgi yarışması yapıyorum. Tabi joker haklarını da yapıyorum lakin seyirci joker hakkını yaptım Random ile ama doğru şıktan çok yanlış cevap veriyor. Nasıl yapabilirim kodunu bilen yardımcı olabilir mi?

Kullandığım kod:
Kod:
Random rr = new Random();
        private void button9_Click_1(object sender, EventArgs e)
        {
            int rastgele;
            string seyirciCevap = "";
            rastgele = rr.Next(1, 5);
            if (rastgele == 1) seyirciCevap = button2.Text;
            if (rastgele == 2) seyirciCevap = button3.Text;
            if (rastgele == 3) seyirciCevap = button4.Text;
            if (rastgele == 4) seyirciCevap = button5.Text;
            MessageBox.Show("Seyircinin en fazla vermiş olduğu cevap -- " + seyirciCevap + " -- seçeneğidir.", "Seyircinin Cevabı", MessageBoxButtons.OK, MessageBoxIcon.Information);
 
Son düzenleyen: Moderatör:
C# kullanıyorsun galiba kodlar ona çok benziyor. Random attığın için yanlış veya doğru gelme olasılığa kalıyor. Bu da 3 yanlış cevap 1 doğru cevap olduğu için yanlış gelme ihtimali yüksek oluyor. Sana önerim şu şekilde yapman olacaktır. Random seçtirmek yerine oranlama yaptır.
Toplam 100 oy olsun. A, B, C, D şıkları arasından doğru cevap B olsun.
İlk 5 soruda seyirci hakkını kullanırsa doğru cevabı barındıran şık 30 oy garanti alsın. Kalan 70 oy random 4 şıkka da dağıtılsın. Doğru cevap şansını artırmış olacaksın.
6'dan 9'a kadar olanlarda 20 oy garanti doğru cevabın olsun. 80 oy random dağıtılsın.
10'dan 15'e kadar olanlarda ise 10 oy garanti doğru cevabın olsun. 90 oy random dağıtılsın.
Bunu hem Telefon için hem de Seyirci hakkı için yapabilirsin.

Önerdiğim şekilde yanlış cevabı alma ihtimalin ilk sorudan son soruya doğru değişkenlik gösterecek. Yani şans faktörüne müdahale etmiş olacaksın. Uygulaman kolaydan zora doğru gitmiş olacak. Yazdığımı mantık sırasını oluşturarak koda dökmen gerekiyor.
 
0 - n arasi random atarsan, ortalama deger n/2 gelir random atma islemi sonsuza giderken.
4 tane secenek arasinda sen sampling yapiyorsun, ihtimal dagilimi yapmaya calisiyorsun ve sorunun zorluguna gore degisen bir agirlik algoritmasi gerekiyor.
Ben olsam pratik olarak soyle yapardim.
Java kodu:
Java:
        Random r = new Random();
        final int bound = 50; // sorunun zorluguna gore degisen lineer bir fonksyon , 10 - 50 arasi.
        int a = r.nextInt(bound);
        int b = r.nextInt(bound);
        int c = r.nextInt(bound);
        int d = 100 - (a + b + c);      
        System.out.println(String.format("%s , %s , %s, %s", a, b, c, d));
Kabaca, 3 tane sik icin dogru bilme ihtimalleri 0 ile 50 arasinda bir sey olacak. 3 unu toplayip 100 den cikararak son ihtimali bulursun. Eger ihtimaller istedigin limitlerde gelmezse, ( a + b + c toplami 100 den buyuk olursa ) yeniden dagit.

bound degiskenini de sorunun zorluguna gore ayarlarsin. 20 soru varsa, kolaydan zora dogru gidiyorsa, bound = 10 + (soru numarasi * 2 ) olabilir mesela. Bound degerini arttirdikca, dogru cevabi bilme ihtimali azalacak.
 
Kabaca, 3 tane sik icin dogru bilme ihtimalleri 0 ile 50 arasinda bir sey olacak. 3 unu toplayip 100 den cikararak son ihtimali bulursun. Eger ihtimaller istedigin limitlerde gelmezse, ( a + b + c toplami 100 den buyuk olursa ) yeniden dagit.
Yöntemin güzel ancak kafama şu takıldı bu şekilde (a+b+c toplamı sürekli 100'den büyük çıkarsa) süre açısından bu 2 saniye de sürebilir 3 dakika da sürebilir. Bu oyunun süresini olumsuz etkilemez mi? Yani bi nevi 100 den büyük çıktıkça yeniden yapacak ve sonsuza da gidebilir. Yanlış mı anladım?
 
Yöntemin güzel ancak kafama şu takıldı bu şekilde (a+b+c toplamı sürekli 100'den büyük çıkarsa) süre açısından bu 2 saniye de sürebilir 3 dakika da sürebilir. Bu oyunun süresini olumsuz etkilemez mi? Yani bi nevi 100 den büyük çıktıkça yeniden yapacak ve sonsuza da gidebilir. Yanlış mı anladım?
Eger bound 50 olursa 100 den buyuk olmayacak. 0-50 arasi random 3 sayinin tahmini ortalama toplami 75 eder cunku. Nadir durumlarda 150 ye kadar cikabilir. Bugun piyasadaki en kotu telefon bile saniyede binlerce kez bu islemi yapabilecek CPU ya sahip.

Az once denedim, i7 7700 islemci ile saniyede 93406090 defa random attiyor CPU.
 
Eger bound 50 olursa 100 den buyuk olmayacak. 0-50 arasi random 3 sayinin tahmini ortalama toplami 75 eder cunku. Nadir durumlarda 150 ye kadar cikabilir. Bugun piyasadaki en kotu telefon bile saniyede binlerce kez bu islemi yapabilecek CPU ya sahip.
Onun zaten farkındayım😊 Kesin sonuç ve sabit süre olması açısından sordum sadece. Sınırlanabilir olsa daha iyi olur. Dediğin gibi nadir durumlarda çıkacaksa sıkıntı yok.
 
Onun zaten farkındayım😊 Kesin sonuç ve sabit süre olması açısından sordum sadece. Sınırlanabilir olsa daha iyi olur. Dediğin gibi nadir durumlarda çıkacaksa sıkıntı yok.

Bence esas sorun sure degil, bound degerinin optimize edilmesinde. Cidden bu islemi onlarca defa yapsa da 2-3 milisaniye gecer. Basit aritmetik islemler bunlar.
 
Uyarı! Bu konu 7 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı