C Programlama #23 | Çubuk Grafik ve 60 Milyon Zar: Sayaç Dizisi

Diziler (Arrays)

Eğitmen: Dr. Süleyman Burak ÇELİK

Geçen dersin anket sayılarını yıldızlardan çubuklarla çiziyor, sonra bir zarı 60 milyon kez atıp sonuçları tek bir dizide sayıyoruz. Yirmi üçüncü derste iç içe döngü ve sayaç dizisi. Sayılar bir tabloda dururken en çok verilen cevabı bulmak için sekiz sayıyı tek tek karşılaştırmak gerekir; çubuk olarak çizince cevap ilk bakışta görünür: en uzun çubuk 3'ün çubuğu, 7 yıldız. Bu grafiği iç içe iki döngü çiziyor: dış döngü her cevap için bir satır yazıyor, iç döngü sayacını 1'den kişi sayısına kadar sayıp her turda bir yıldız yazıyor. İlk satırı lldb iziyle adım adım izliyoruz: sayaç 1, 2 ve 3 için birer yıldız; sayaç 4 olunca koşul yanlış, iç döngü biter ve satır sonu yazılır; dış döngünün her turunda iç döngü yeniden 1'den başlar. %3d ve %6d alan genişlikleri sayıları sağa yaslar; 3 + 6 + 2 = 11 karakterden sonra her çubuk 12. sütundan başlar. Toplam yıldız sayısı 3 + 2 + 5 + 7 + 2 + 3 + 1 + 1 = 24, yani ankete katılan öğrenci sayısı; çıktıdaki yıldızları tr ve wc ile saydırınca yine 24. Sonra zar: altı sayaç ve altı kollu bir switch yerine tek satır yeter, ++frekans[yuz]; yüz 1 ile 6 arasında bir tam sayı olduğu için değerin kendisi sayacın indisi olur. İki program da aynı rand dizisini kullandığı için altı sayı birebir aynı çıkıyor. 60 milyon atışta her yüzün beklenen sayısı 60000000 / 6 = 10000000; sağlama olarak altı sayının toplamı tam 60 milyon. En çok gelen yüz 4 (10002603 kez), en az gelen yüz 2 (9996515 kez); en büyük sapma 10000000 - 9996515 = 3485, on binde 3.5'ten bile az. Dizinin neden 7 elemanlı olduğunu da görüyoruz: yüzü doğrudan indis yapınca frekans[6]'ya kadar yer gerekir ve frekans[0] hiç kullanılmaz; lldb, döngüden sonra frekans[0]'ın hâlâ 0 olduğunu ve dizinin 7 · 4 = 28 bayt tuttuğunu gösteriyor. 6 elemanlı dizi ve yuz - 1 indisiyle sonuç aynı, dizi 24 bayt. Son olarak zarı yalnızca 60 kez atıyoruz: beklenen 10 iken yüz 2 16 kez (yüzde 26.7), yüz 5 yalnızca 7 kez (yüzde 11.7) geliyor; 60 milyon atışta ise her yüzün payı yüzde 16.66 ile 16.67 arasında, altıda bire çok yakın. Ekrandaki her çıktı, kodun gerçekten derlenip çalıştırılmasından geliyor. Bu derste: 1. Çubuk grafik: iç içe döngü ve lldb ile adım adım ilk satır 2. Alan genişliği (%3d, %6d) ve 12. sütun; 24 yıldız = 24 öğrenci 3. Altı kollu switch yerine tek satır: ++frekans[yuz] 4. 60 milyon atış: toplam 60 milyon, en büyük sapma 3485 5. frekans[0] neden boş kalır; 6 elemanlı dizi ve yuz - 1; 60 atışta eşit olmayan çubuklar Bölümler: 0:00 Bugün: çubuk grafik ve zar 0:22 En çok verilen cevap hangisi? 0:45 İç içe döngü 1:27 Çubuklar aynı sütundan başlar 2:07 Altı sayaç ve switch yerine tek dizi 2:43 60 milyon atış 3:23 Dizi neden 7 elemanlı? 4:03 Yalnızca 60 atış 4:45 Bugünün dört kuralı 5:05 Sonraki ders: karakter dizileri Kaynak kitap: Paul Deitel, Harvey Deitel — C How to Program, 9. baskı (2022), §6.4.6–6.4.7. Konu sırası ve kavramlar kaynak kitaptan izlenir; anlatım, örnekler ve ekranlar özgündür. Hedef kitle: C'ye yeni başlayan tüm mühendislik ve bilgisayar/yazılım öğrencileri. Ön koşul: C Programlama #01–#22.

Bu videoyu izlemek için Premium üyelik gerekir.