C Programlama #22 | Sembolik Sabit, Dizi Toplamı ve Anket Sayımı

Diziler (Arrays)

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

24 öğrenciye haftada kaç gün spor yaptıkları soruldu; hangi cevap kaç kez verildi? Yirmi ikinci derste sekiz ayrı sayaç ve uzun bir if zinciri yerine tek bir satırla sayıyoruz: ++frekans[cevap[i]]. Önce dizinin boyutu: #define GUN 7 satırı GUN adında bir sembolik sabit tanımlar ve derleyiciden önce çalışan önişlemci programdaki her GUN'un yerine 7 yazar. gcc -E ile önişlemcinin çıktısına bakıyoruz: dizinin boyutunda, döngünün koşulunda ve bölmede GUN kalmamış, hepsi 7 olmuş; 30 günlük bir ay için yalnızca tek satır değişir. Sonra iki yaygın hata: #define satırının sonuna konan noktalı virgül önişlemciyle birlikte yerine geçer, puan[BOYUT] satırı puan[5;] olur; gcc önce kapanan köşeli parantez bekler, ardından puan tanımsız der. İlk hatayı düzeltin; arkasından gelenler çoğu kez onun sonucudur. Sabite değer atamak (BOYUT = 10) aslında 5 = 10 demektir; gcc atamanın solunda bir değişken ister. Elemanları bir hesapla da dolduruyoruz: her eleman bir öncekinin iki katı, 1, 2, 4, 8 ve sonunda 2 çarpı 512, yani 1024. Dizinin en sık işi olan toplamı lldb ile her turdan sonra izliyoruz: 0 + 72 = 72, 157, 247, 311 ve 399; ortalama 399 / 5 = 79.8, toplam double'a çevrilmezse tamsayı bölmesi 79 verir. Ankette cevabın kendisi sayaç dizisinin indisi oluyor: 24 tur sonunda frekanslar 3, 2, 5, 7, 2, 3, 1 ve 1 (toplamı 24); en çok verilen cevap 3, yani 7 öğrenci haftada 3 gün spor yapıyor. Son öğrencinin cevabı yanlışlıkla 9 yazılınca program yine çalışıyor ve tablo neredeyse aynı görünüyor; ama 8 elemanlı frekans dizisinde ++frekans[9] dizinin dışına yazıyor. lldb, frekans[9]'un adresinin cevap[1]'in adresiyle aynı olduğunu gösteriyor: ikinci öğrencinin cevabı 5'ten 6'ya dönüyor, program kendi verisini sessizce bozuyor. Çözüm, her cevabı kullanmadan önce denetlemek: 0 ile 7 arasında değilse sayılmaz, ekrana yazılır. Ekrandaki her çıktı, kodun gerçekten derlenip çalıştırılmasından geliyor. Bu derste: 1. #define ile sembolik sabit ve önişlemcinin yerine koyması (gcc -E) 2. İki yaygın hata: sonda noktalı virgül ve sabite atama 3. Elemanları hesaplayarak doldurmak: 2'nin kuvvetleri 4. Dizi toplamı ve ortalama: lldb ile her turdan sonraki toplam 5. Anket: değer, sayaç dizisinin indisi olur; geçersiz cevap ve denetim Bölümler: 0:00 Bugün: sabit, toplam, anket 0:19 Anket: hangi cevap kaç kez? 0:45 Sembolik sabit: #define 1:19 İki yaygın hata 2:02 Elemanları hesaplayarak doldurmak 2:33 Elemanları toplamak 3:07 Değer, indis olur 3:56 Geçersiz bir cevap 4:39 Bugünün dört kuralı 4:58 Sonraki ders: çubuk grafik ve 60 milyon zar Kaynak kitap: Paul Deitel, Harvey Deitel — C How to Program, 9. baskı (2022), §6.4.3–6.4.5. 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–#21.

Bu videoyu izlemek için Premium üyelik gerekir.