Bir akşam arkadaşlarımla kahve içerken bu sorunun yanıtı hakkında tartışmıştık. Konu da elbette girmiş olduğumuz Ales, kpss sınavlarındaki olasılık sorularından konuşurken açılmıştı. Ortak bir çözüme kavuşamayınca php ile bu uygulamayı yapmaya karar verdim. Bu uygulamada da for döngüleri ve if koşullarıyla ilgili güzel örnekler olduğu için paylaşmak istedim.
Soru: Atılan 3 zardan en az birinin 1 gelme olasılığı nedir?
Öncelikle toplam durum için 1 ve birli olasılıklar için 0 olan birer değişken tanımladım.
$toplamdurum = 1; $birlidurum = 0;
Ardından 3 zar için iç içe gelmiş for döngülerini yazdım. Zarların yüzünde olan 1,2,3,4,5 ve 6 rakamları için 1 den başlayıp 7’den küçük olana kadar devam eden for döngülerini oluşturdum.
for($zar = 1; $zar < 7; $zar++) { for($zar2 = 1; $zar2 < 7; $zar2++) { for($zar3 = 1; $zar3 < $zar3++) { echo "[$zar][$zar2][$zar3]"; } } }
Bu satırların çıktısı:
[1][1][1]
[1][1][2]
[1][1][3]
[1][1][4]
[1][1][5]
[1][1][6]
[1][2][1]
.
.
.
[6][6][3]
[6][6][4]
[6][6][5]
[6][6][6]
En iç kısımda bulunan echo altına da toplam olasılık için her seferinde 1 artma durumunu eklediğimizde toplam durum karşımıza çıktı.
$toplamdurum = 1; for($zar = 1; $zar < 7; $zar++) { for($zar2 = 1; $zar2 < 7; $zar2++) { for($zar3 = 1; $zar3 < 7; $zar3++) { echo "$toplamdurum. Durum: [$zar][$zar2][$zar3]"; $toplamdurum++; } } }
Bu satırların çıktısı:
1. Durum [1][1][1]
2. Durum [1][1][2]
3. Durum [1][1][3]
4. Durum [1][1][4]
5. Durum [1][1][5]
6. Durum [1][1][6]
7. Durum [1][2][1]
.
.
.
213. Durum [6][6][3]
214. Durum [6][6][4]
215. Durum [6][6][5]
216. Durum [6][6][6]
Ardından her durumda if koşuluyla zarlardan birinin en az 1 olma duruma bakalım. $toplamdurum++; satırının hemen altına aşağıdaki kodları ekleyelim.
if ($zar == 1 || $zar2 == 1 || $zar3 == 1 ) { $birlidurum ++; }
Zarlardan herhangi birinin 1 gelmesi durumunda $birlidurum olarak oluşturduğumuz değişken 1 artacak. Bu sayede döngüler bittiğinde birli durumun sayısını görebileceğiz.
Bu satırların çıktısı:
1. Durum [1][1][1]
2. Durum [1][1][2]
3. Durum [1][1][3]
4. Durum [1][1][4]
5. Durum [1][1][5]
6. Durum [1][1][6]
7. Durum [1][2][1]
.
.
.
213. Durum [6][6][3]
214. Durum [6][6][4]
215. Durum [6][6][5]
216. Durum [6][6][6]
Toplam Durum: 216
Birli Durum: 91
Sonuç: 91/216
Programın çalışır halini ve sonucu görüntülemek için tıklayınız.
Matematiksek çözümüyle de aynı sonucu bulmaya çalışalım. 1 gelme durumunu A olarak tanımlayalım.
A = {1 Gelme Durumu}
Sonrasında [1][x][x], [x][1][x] ve [x][x][1] için çözümleri yazalım. Burada yazacağımız çözümlerde x’li kısımlara 1 gelmemektedir. Zira birazdan [1][1][x]’li çözümlere de bakacağız.:
P(A,A’,A’) + P(A’,A,A’) + P(A’,A’,A) =
= (1/6).(5/6).(5/6) + (5/6).(1/6).(5/6) + (5/6).(5/6).(1/6) = 3.(1/6).(5/6).(5/6) = 75/216
Yine sırasıyla [1][1][x], [1][x][1] ve [x][1][1] için çözümleri yazalım:
P(A,A,A’) + P(A,A’,A) + P(A’,A,A) =
= (1/6).(1/6).(5/6) + (1/6).(5/6).(1/6) + (5/6).(1/6).(1/6) = 3.(1/6).(1/6).(5/6) = 15/216
ve Son olarak [1][1][1] içinse zaten 1 durum olduğunu görüyoruz:
P(A,A,A) = (1/6).(1/6).(1/6) = 1/216
Hepsini topladığımızda (75/216) + (15/216) + (1/216) = 91/216