... konulu sunumlar: "C PROGRAMLAMA DİZİLER (ARRAYS). Aynı isim altında, aynı tipte birbiriyle ilişkili birden fazla veriyi tutmak için kullanılan veri yapılarıdır (Data Structure)."— Sunum transkripti:
1
C PROGRAMLAMA DİZİLER (ARRAYS)
2
Aynı isim altında, aynı tipte birbiriyle ilişkili birden fazla veriyi tutmak için kullanılan veri yapılarıdır (Data Structure). Diziler bir kümedir, aynı türde verilere tek bir isimle erişmek için kullanılır. Bir dizinin bütün elemanları bellekte ardışık olarak saklanır. Diziler bir veya daha çok boyutlu olabilirler. Bir dizinin içindeki bir elemanı ya da konumu belirtmek için o dizinin adı ve elemanın dizi içindeki pozisyonu belirtilir.
3
Tek Boyutlu Diziler Tek boyutlu bir dizi tanımlaması şu şekilde gerçekleştirilir : Derleyici ilk örnekteki gibi bir komutla karşılaştığında 6 adet sayının saklanacağı bellek alanı ayırır. Dizinin adı yani ‘a’ değişkeni dizinin başlangıç adresini tutar. Dizi içerisindeki her bir elemana, dizi isminden sonra, yazılan indis değeri ile ulaşılır. İndis değerleri mutlaka tam sayı olmalıdır. C dilinde bütün dizilerin indis numarası 0’dan başlar. Dolayısı ile dizinin son indis numarası dizinin eleman sayısından bir eksiktir. Dizi Adı İndis numaraları Dizinin elemanları
4
Tek boyutlu dizilere ilk değer atama; Tek Boyutlu Diziler Bu dizi bildirimi hatalıdır. Çünkü 5 dizi elemanı için 6 değer ataması yapılmıştır.
5
Tek boyutlu dizilerde örnek işlemler; a=5 ve b=6 ise c [a+b] += 2; işleminin sonucu c [11] = c[11] +2 ‘den 80 olur. Printf( ‘’ %d ’’, c[0] + c[1] + c[2] ); ifadesi ekrana c[0], c[1] ve c[2]’nin toplamını -39 olarak yazdırır. x= c[7] / 2; ifadesi c[6] ‘yı ikiye bölüp x değişkenine atar. Tek Boyutlu Diziler
6
Aşağıda verilen örnek program, for döngü yapısını yapısı kullanarak 10 elemana sahip bir dizinin tüm elemanlarını 0’a atamaktadır ve diziyi çizelge biçiminde yazdırmaktadır Aşağıda verilen örnek program, 12 elemanlı integer a dizisinin içindeki değerleri toplamaktadır.
7
Tek Boyutlu Diziler 40 öğrenciye kafeteryadaki yiyeceklerin kalitesine 1-10 arasında bir puan vermeleri istenmiştir. Verilen 40 puanı bir diziye yerleştirin ve verilen puanların verilme sıklığını ve ortalama puanı hesaplayınız. Programa ekleme yapınız
8
Tek Boyutlu Diziler Diziler her tipte veriyi tutabilirler. Karakter dizileri de diziler içerisinde tutulabilirler. Karakter dizileri kendilerine has bir çok özelliğe sahiptir. Bir karakter dizisi, bir string kullanılarak ilk değerlere atanabilir. birinci stringinin 7 karakter ile stringi sonlandıran ve null karakter adı verilen özel bir karakter içerir. Bu nedenle string1 dizisi aslında 8 karakter içermektedir. Null karakterinin, karakter sabiti olarak gösterimi ‘\0’ biçimindedir. C’de tüm stringler bu karakter ile sonlanırlar. Karakter dizilerine, atama listesindeki bağımsız karakter sabitleriyle de ilk değerler atanabilir. Az önceki bildirim aşağıdaki bildirim ile denktir.
9
Tek Boyutlu Diziler Aşağıda program kodu verilen örnek, bir karakter dizisine string ile ilk değer verilmesini, karakter dizisinin bir string olarak yazdırılmasını ve stringin bağımsız karakterlerine erişilmesini göstermektedir
10
Dizilerin Fonksiyonlara Parametre olarak Gönderilmesi Bir dizi bir fonksiyona parametre olarak gönderilmek istendiğinde, fonksiyon çağrılırken dizinin sadece adı yazılır. Fonksiyon prototipinde diziyi karşılayan tanımlamada ise köşeli parantezler kullanılır.
11
Diziler fonksiyonlara parametre olarak gönderilirken adres ile çağırma yöntemiyle gönderilirler. Bu yöntemde değerlerin kopyalandığı değişkenlerin değiştirilmesi orijinal değerleri etkiler. Bir önceki örnekte tanımladığımız a dizisinde a değişkeni dizinin bellekteki başlangıç adresini tutacaktır. İsterseniz a değişkeninin değerini (yani dizinin başlangıç adresini) aşağıdaki komutla ekrana yazdırır. Printf(“%p”,a); Fonksiyona dizi ismi ile gönderilen değer dizinin başlangıç adresidir. Fonksiyon parametresinde tanımlanan ve bu a ya karşılık gelecek olan değişkende (bir önceki örnekte b değişkeni) aynı bellek adresinden başlamış olur. Bellekte aynı adrese sahip iki farklı hücre bulunamaz. Yani a ve b dizileri bellekte üst üste saklanan aslında aynı dizilerdir. Birinde yapılan değişiklik aynı adresler doğrultusunda diğerini etkiler. Dizilerin Fonksiyonlara Parametre olarak Gönderilmesi
12
Dizilerde Sıralama Veri sıralamak en önemli bilgisayar uygulamalarından birisidir. Örneğin bir banka bütün çekleri hesap numarasına göre sıralayarak ödeme yapabilir ya da bir telefon şirketi abonelerini adı ya da soyadı bilgilerine göre sıralayabilir. Genellikle en basit algoritmalar, en zayıf olanlarıdır. Bunların özelliği kolaylıkla yazılmaları,test edilmeleri ve hatalarının kolay ayıklanmasıdır. Ancak daha karışık algoritmalara, maksimum performansı gerçekleştirmek için ihtiyaç duyulur. Farklı sıralama algoritmarı vardır; kabarcık sıralama (buble sorting), seçmeli sıralama, eklemeli sıralama, ağaç sıralaması, hızlı sıralama, kabuk sıralama vb.
13
Dizilerde Sıralama Seçmeli Sıralama yöntemi ile verilerin sıralanması
14
Dizilerde Arama Dizinin belirli bir elemanını bulma sürecine arama denir. Farklı arama algoritmaları vardır. En bilinenleri doğusal arama ve ikili arama yöntemidir. Doğrusal aramada, dizinin her elemanını arama değeriyle karşılaştırmaktadır. Dizi herhangi bir şekilde sıralanmadığından değer ilk ya da son elemanda bulunabilir. Doğrusal arama küçük ya da sıralanmamış dizilerde iyi bir şekilde çalışır. Ancak büyük diziler için doğrusal arama yetersiz kalmaktadır. Eğer dizi sıralanmışsa, daha hızlı olan ikili arama tekniği kullanılabilir. İkili arama tekniği, her karşılaştırmadan sonra sıralanmış bir dizideki elemanların yarısını elemektedir. Algoritma, dizinin ortadaki elemanını bulmakta ve bu elemanın değerini arama değeriyle karşılaştırmaktadır.
15
Doğrusal Arama Devamı sonraki sayfada
16
Doğrusal Arama Uygulamada dizi rasgele değerler ile doldurulurken aynı değerler dizinin farklı indis değerleri için atanabilmektedir. Buna göre uygulamayı; Aranan değer farklı indis değerlerinde mevcut ise bulunan tüm indis değerlerini gösterecek şekilde düzenleyin. Dizi doldurulurken dizi içerisindeki her bir değerin sadece 1 tane olacağı şekilde düzenleyin.
17
İkili Arama uygulamayı; Dizinin rasgele değerler ile oluşturulacağı şekilde yeniden yazınız. Dizi sonrasında sıralama algoritmalarından birisi kullanılarak sıralı duruma getirilmelidir.
18
Çok Boyutlu Diziler Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. Bunlardan en sık kullanılanı çift boyutlu dizilerdir. Bu diziler sayesinde değerler satır ve sütunlardan oluşan (row - column) iki boyutlu bir tablodaki veriler gibi düşünebilirler (bellekte yine ardışık olarak tutulurlar). Bu tür dizilerde her bir elemana ulaşmak için elemanın satır indisi ve sütun indisi kullanılır. C dilindeki dizilerin boyutları ikiden de fazla olabilir. Bir sınır olmamakla beraber 12 boyuta kadar destekler. Ancak iki boyutlu diziler bir çok uygulamada yeterli olur.
19
Çift (iki) boyutlu dizilere ilk değer atama; Tek boyutlu dizi tanımlamaya benzer. Çok Boyutlu Diziler
20
Çok boyutlu dizilerin fonksiyona parametre olarak gönderilmesi; Çok boyutlu bir dizi fonksiyona gönderilecekse, tek boyutlularda olduğu gibi sadece adı yazılır. Gönderilen dizi değişkenini karşılayan prototip tanımlamada ise gönderilen dizinin boyutu kadar köşeli parantez (aç-kapa ikilisi) kullanılır. Çift boyutlu diziler tablo halinde bellekte tutulmaz, örneğin [2][3] boyutlarında bir dizinin elemanları bellekte 6 elemanlı tek boyutlu bir diziymiş gibi tutulur. Çift boyutlu dizide her bir satır tek boyutlu bir diziymiş gibi düşünülür ve bunlar uç uca eklenerek belleğe yerleştirilir. Derleyicinin bellekte bir sonraki satırın başlangıçtan kaç eleman sonra başladığını bilmesi gerekir Çok Boyutlu Diziler
21
Örnek; Çok Boyutlu Diziler
22
1 – Başla 2 – A ve B matrisleri için boyut giriniz (örneğin 3 x 7 biçiminde) 3 – A ve B matrislerinin değerlerini 1-10 arasında rasgele oluştur (fonksiyon ile) 4 – A ve B matrislerini yaz. (fonksiyon ile) 5 – İşlem Seçimini yap 6 – Eğer seçim 1 ise C = A + B (fonksiyon ile) 7 – Eğer seçim 2 ise C = A – B (fonksiyon ile) 8 – Eğer seçim 3 ise C = A * B (fonksiyon ile) 9 – Eğer seçim hatalı ise 4. adıma dön 10 – C Matrisini Yaz (fonksiyon ile) 11 – Son Çok Boyutlu Diziler - Ödev
23
1 – Uçuş Rezervasyon Yazılımı 2 – Hasta Takip Yazılımı 3 – Kitap Evi yazılımı 4 – Anket Sistemi 5 – Bankacılık Yazılımı 6 – Öğrenci İşleri Yazılımı 7 – Sınav Hazırlama Yazılımı 8 – Otel Yönetim Yazılımı 9 – Eczane Yönetim Sistemi Yazılımı 10 – Kargo Şirketi Yazılımı 11 – ÖSYM Sınav Otomasyonu Ödevler