Temel C Programlama -28- Diziler

Biz günlük hayatımızda bu enzer nesneleri gruplara ayırırız ve bir arada toplarız. Örneğin yumurtalar kolide, meyve ve sebzeler kasada krakerler bir pakette toplanır. Bunun gibi öğrencileri de sınıflarda toplamaktayız. Daha önceden günlük hayatta karşılaştığımız durumları bilgisayar programına aktarma yolunu incelemiştik. Fakat şimdiye kadar böyle bir durumu bilgisayar programına nasıl aktaracağımızı anlatmadık. Bu yeni durumu yani benzer nesnelerin gruplaşmasını bilgisayar ortamına diziler vasıtasıyla aktarırız.

Şimdi bir sınıf düşünelim. Sınıfta 30 öğrenci var ve bu öğrencilerin ortak bir noktası var. Birincisi bu öğrenciler bir yerde topluluk oluşturmuş ve gruplaşmış. Buna biz günlük hayatta 12-B, 5-A sınıfı gibi adlar veriyoruz. Ayrıca sınıftaki öğrenciler aynı sınıfta olsa da numaralar ile birbirinden ayrılmış durumdadır. İstersek sınıfı tamamen ele alabiliriz istersek de numara numara öğrencileri çağırabiliriz. Daha önce öğrendiğimiz bilgilerle bir sınıf programı yazmak istesek şöyle olacaktır.

Burada int sınıfından dört adet değişken tanımlasak ve öğrencileri böyle ifade etsek de bu öğrenciler arasında herhangi bir bağlantı yoktur. Tamamen bağımsız olarak ele alınabilir. Bağlantı sadece isim benzerliğinden ibaret olup bilgisayarın anlayacağı bir konu değildir. Bilgisayar bizim değişkenlere ne ad verdiğimizi umursamaz. Bu öğrenciler arasında bir bağlantı kurmak için bunları bir sıraya koymamız gereklidir. Bunun için ise şöyle bir komut yazarız.

Burada yine int tipinde dört adet değişken tanımlasak da bunlar birbirinden bağımsız değil belli bir sıraya dizilmiş dört adet değişkendir. Birbiriyle alaka kurmaları ise hafızada adres olarak sıraya dizilmeleri kadar erişim operatörü vasıtasıyla da olmaktadır. Erişim operatörü dediğimiz [] operatörü arasına yazdığımız değer ile dizinin verisine erişmiş oluruz. Biz dizi tipinde değerleri MS Excel programında da sıkça kullanmaktayız. Oradaki tablo aslında iki boyutlu bir diziden farklı değildir. Bir tarafta harf ile adlandırılmış sütunlar ve diğer tarafta sayı ile adlandırılan satırlar bulunmaktadır. Biz de yukarıda tanımladığımız dizi değişkenini tablo halinde şu şekilde ifade edebiliriz.

ogrenciler[0] ogrenciler[1] ogrenciler[2] ogrenciler[3]
Değer Değer Değer Değer

Diziler birkaç elemandan on binlerce elemana kadar veriyi tutabilir. Dizi değişkenini tanımlarken öncelikle bir değişken tipini belirlememiz gereklidir. Dizinin elemanları farklı farklı tiplerde olamaz. Böyle bir durumda yapı adı verdiğimiz daha karmaşık veri yapıları kullanılır. İlerleyen konularda bundan bahsetsek de şimdilik tek tipte dizi değerlerini anlamamız yeterlidir.Biz dizi değişkeni tanımlarken şu söz dizimini takip ederiz.

Biz diziyi tanımlarken öncelikle dizi tipini belirleriz. Bu tam sayı, karakter veya diğer değişken tiplerinde olabilir. Sonrasında dizisinin adını değişken adı kurallarına bağlı olarak belirleriz ve sonrasında dizinin boyutunu belirleriz. Dizi boyutunu indeks operatörü yani [] arasına sayısal olarak yazarız. Bu noktada dizinin boyutunu doğru olarak belirlemek önemlidir çünkü program dizi boyutu kadar hafızada yer ayırmaktadır. Örneğin int sayi[1000]; dediğimizde program 4 baytlık int değişkeni tipinde 1000 adet yeri hafızada ayıracaktır bu da yaklaşık 4 kilobaytlık bir alan kaplayacaktır. Gömülü sistemlerde çalışırken bu dizi ve yapılarla çalışmak daha da zor olmaktadır çünkü çoğu aygıt 4 kilobaytlık bir RAM hafızasına bile sahip değildir.

Yukarıda verdiğimiz öğrencilerle alakalı diziyi biraz daha geliştirelim ve bir örnek yapalım. Bu sayede dizi değişkenlerinin yapısını ve bunlara erişmenin en temel yolunu göreceksiniz. Öncelikle sınıfı biraz büyütelim ve 8 kişiden oluşan ve bir adı olan sınıf yapalım. Her dizi değişkenine de bir öğrenci numarasını ekleyelim. Burada her değişkenimiz bir öğrenci olacak. Şimdi programımızı deneyelim.

Bu program dizi değişkenlerinin en temel ve en sık kullanımını bize göstermektedir. Öncelikle int _1a_sinifi_ogrencileri[8]; diyerek 8 adet int değişkenini içeren ve toplamda 8 adet int genişliğinde _1a_sinifi_ogrencileri adında bir dizi değişkeni tanımladık. Burada tanımlamada erişim operatörünün dizinin genişliğini belirttiğini unutmayalım.

_1a_sinifi_ogrencileri[0] = 254;

Bu komutta ilk öğrencinin numarasını yazmaktayız. Unutmamamız gereken nokta dizi üyelerinin numarasının hep sıfırdan itibaren başladığıdır. Yani bizim tanımladığımız değişkenin genişliği 8 ise bu 0-7 arasında olduğu anlamına gelmektedir. [8] şeklinde bir kullanım olamaz.

_1a_sinifi_ogrencileri[1] = 951;

Burada hiçbirini eksik bırakmayarak bütün dizi üyelerine ilk değeri veriyoruz. Daha sonrasında bu değer vermenin kısa yolunu da size göstereceğiz. Anlamanız için başlangıçta bu konulara değinmeden en sade yoldan değer atamalarını yapıyoruz.

for (int i = 0 ; i < 8; i++)

Toplamda 8 kere çalıştırılacak bir döngü oluşturduk. Bu döngü değişkeni aynı dizi elemanlarının numaraları gibi 0’dan 8’e doğru gidiyor. Bu dizi elemanlarına sırayla erişmek için kullanılabilir.

printf(“Ogrenci : %i Numarasi: %i \n”, i , _1a_sinifi_ogrencileri[i]);

Bu komutta dizi elemanlarını sırayla yazdırmaktayız. Öncelikle öğrenci’nin sırası döngü değişkeni hem de dizi indeks değeri olarak yazdırılır. Sonrasında ise _1a_sinifi_ogrencileri[i] diyerek döngü elemanı erişim operatörünün içine yazılarak ilgili dizi üyesinin değerine erişilir ve bu ekranda yazdırılır. Programın çıktısı şu şekilde olacaktır.

Dizileri tanımlarken aynı tipte ve birbiriyle alakalı elemanların bir araya getirileceğini unutmamak gerekir. Birbiriyle alakasız ve birbirinden bağımsız değerleri kaydederken değişkenleri kullanmamız lazımdır. Programcılıkta dizilerin öncülük ettiği “String” yani karakter dizileri programcılığın ana unsurlarından biridir. Karakter dizilerini C++, Java gibi dillerde String sınıfını kullanarak hazır fonksiyonlar üzerinden yapsak da C dilinde String sınıfı yoktur. O yüzden karakter dizilerini en temel yoldan üretmek gerekecektir. Ayrıca standart kütüphanede yer alan metin işleme fonksiyonları da vardır. Bunları daha sonraki konuda anlatacak olsak da bir sonraki yazımızda karakter dizilerinden başlayarak dizi konusunu daha ayrıntılı olarak ele alacağız.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

 

 

 

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

3 Responses

  1. Göktürk Ata dedi ki:

    Devamı gelecek mi ? İyi Çalışmalar…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.