Bu sayfadaki yazılar
Sayfanın metni
Sayfa 37
Böylece daha önce tek öğrencinin notlarını alıp ortalamasını hesaplayan programımızı, dizileri kullanarak n öğrencinin m sınavda aldığı notlardan ortalamalarını hesaplayan ve bunları raporlayan bir hale getirdik.
Bir sonraki bölümde işaretçiler, bellek yönetimi ve fonksiyonlardan bahsedeceğiz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 36
Bu program bir öğrencinin sınavlardan aldığı notların ortalamasını hesaplayan bir program. Bunun için ilk başta kullanıcıdan kaç sınavın ortalamasını almak istediği bilgisini alıyor ve kacSinav isimli değişkene saklıyor. Ardından kacSinav kere dönen bir döngü içinde kullanıcıdan sınav notlarını almaya başlıyor. Her notu aldığında toplam adlı değişkene o notu ekliyor. Bu sayede toplam değişkeninde o zamana kadar girilen sınav notlarının toplamı “birikiyor”. Döngü ile kacSinav kadar sınav notu alınıp toplam değişkeninde biriktirildikten sonra programın son bölümüne geliyoruz. Burada toplam değer kacSinav sayısına bölünerek ortalama hesaplanıyor ve bu sonuç kullanıcıya gösteriliyor.
0'dan başladığını unutmayın (o yüzden (4) yerine (3) kullandık)
Şimdi bir önceki örnek programımızı dizileri kullanarak daha da geliştirmeye çalışalım. Programımız tek öğrencinin sınav notları yerine bir sınıftaki bütün öğrencilerin notlarını işlesin. Ama dizi kullanımını daha kolay gösterebilmek için sınav sayısını ve öğrenci sayısını şimdilik sabitleyelim. 10 öğrenci ve 3 sınav olsun.
#include <iostream>
int main()
(
// dongu ile notlari al
Diziler
LER İnt sinavNotlarill10d01(3I1; forlint os5Ü; o<lÜ; **o) Şimdiye kadar değişkenleri hep tek tek tanımladık ve kullandık. for(int i-0; i<3;
Bazen aynı tipten olan ve birbiriyle anlamsal olarak da bağlantılı değişken grupları tanımlarız. Örneğin bir sınıftaki öğrencilerin matematik yazılısından aldığı notlar, veya bir futbol oyununda bir takımdaki oyuncuların attığı goller gibi. Bu durumlarda “dizi” kullanabiliriz. Diziler şöyle tanımlanır:
int
Bu şekilde takımdaki 11 oyuncunun gol sayısını saklamak için 11 adet tamsayı tipinde değişken oluşturabiliriz. Bu değişkenlerin herbirine tek tek ulaşmak için “indeksleme” kullanılır. İndeksleme [ ] operatörü ile yapılır. Örneğin:
attigiGoller|(0)| attigiGoller|(3)|
goller[0] = 2; goller[3] = 3; diyerek ilk oyuncunun 2 gol attığını, 4. oyuncunun ise 3 gol attığını söyleyebiliriz. Dikkat etmeniz gereken nokta indekslemenin 0'dan başladığıdır. Yani yukarıdaki örnekte indeks değeri 0 ile 10 arasında olabilir. 11 ve yukarısı olamaz. Eğer 11 veya yukarısında bir değer kullanırsanız, programınızda öngörülemez hatalar olur (donma, programdan çıkma vs.).
Aynı şekilde dizi elemanlarından okurken de indeksleme kullan-
std::cout << “Altinci oyuncunun gol sayisi” << << std::endi;
Dizileri istersek birden fazla boyutlu da yapabiliriz. Örneğin:
Int sinavNotlari(101(31;
Gibi bir dizi kullanarak 10 öğrencilik bir sınıfta 3 sınavın sonuçlarını saklayabileceğimiz toplam otuz değişkeni tanımlayabiliriz.
1 Std::cout “sinav notu: "; >> sinavNotlarilollil; ) )
// sonuclari hesapla ve goster int sinifToplam - O; forlint os0; (
// bir ogrencinin notlarini topla int ogrenciToplam O; forl(int iş0; iİ<3; 1 ogrenciToplam *- sinavNotlarilollil;
)
// ogrencinin ortalamasini goster int ogrenciOrtalama ogrenciToplam / 3; std::cout<<”ogrenci "<< o <<” ortalamasi: ” << ogrenciOrtalama
// sinif ortalamasi icin biriktir sinifToplam *t- ogrenciOrtalama;
)
// sinif ortalamasini goster int sinifOrtalama sinifToplam / 10 std::cout << “Sinif ortalamasi: ” << sinifOrtalama <2
Yukarıda programımızı geliştirip bir sınıftaki bütün öğrencilerin sınavlardaki notlarını alıp her bir öğrenci için ortalama hesaplayan ve bununla da kalmayıp sonra bütün sınıfın not ortalamasını hesaplayan bir hale getiriyoruz.
Ayrıca programda
sinifToplam *- ogrenciOrtalama;
gibi komutlar var. Bunlar da aslında sık rastlanan komutlardır.
Bu sayede örneğin dördüncü öğrencinin 2. Sınavdan aldığı notu Bu komut girmek için sinifToplam sinifToplam * ogrenciOrtalama; sinavNotlari(31(11| - 80; ile aynıdır. Bu işlemler çok sık kullanıldığı için *—, -— gibi operagibi bir satır yazabiliriz. Yine indekslemenin her iki boyutta da törler geliştirilmiştir. Bu operatörler soldaki argümanı sağdaki argüman ile istenen işleme sokup sonucu tekrar soldaki argümana atarlar.