© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Bölüm 6 - Diziler indeks 6.1Giriş 6.2Diziler 6.3Dizilerin Bildirimleri 6.4Dizilerin Kullanımlarına Örnekler 6.5Dizileri Fonksiyonlara Geçirmek 6.6Dizileri Sıralamak 6.7 Örnekler: Ortalama, Mod ve Medyanı Diziler Kullanarak Hesaplamak 6.8Dizilerde Arama Yapmak 6.9Çok Boyutlu Diziler
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 2 Amaçlar Bu Bölümde Öğreneceklerimiz: –Dizi veri yapısını tanıtmak –Dizilerin değerlerini depolama, sıralama ve listeleri arama ile değer tabloları oluşturmada kullanımlarını anlamak –Bir dizinin nasıl bildirileceğini, bir diziye nasıl ilk değer atanacağını ve dizideki bağımsız elemanların nasıl çağrılacaklarını anlamak –Dizileri fonksiyonlara geçirebilmek. –Temel sıralama tekniklerini anlamak –Çok boyutlu dizileri bildirebilmek ve kullanabilmek
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Giriş Diziler –Birbirleriyle ilişkili veri yapıları –Statik yapılar- programın çalışma süresi boyunca hep aynı boyutta kalırlar. –Dinamik veri yapıları Bölümde göreceğiz..
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Diziler Dizi –Birbirleriyle ilişkili hafıza gurubu –Aynı ad ve Tip Dizi içindeki elemanı veya konumunu belirtme –Dizi Adı –Pozisyon Numarası Biçim: Diziadı [ pozisyon numarası ] –Dizinin ilk elemanı her zaman sıfır’ıncı elemandır –C dizisinin n. elemanı: c[ 0 ], c[ 1 ]...c[ n – 1 ] Dizinin adı (Not: Bu dizinin bütün elementleri aynı ada sahiptir, c ) C dizisinin içindeki elemanların yerini belirten sayı c[6] c[0] c[1] c[2] c[3] c[11] c[10] c[9] c[8] c[7] c[5] c[4]
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Diziler Dizi elemanları normal değişkenler gibidir. c[ 0 ] = 3; printf( "%d", c[ 0 ] ); –Eğer x 3 e eşitse, belirteçteki bu işlemi yapar c[ ] == c[ 3 ] == c[ x ]
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Diziler
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizilerin Bildirimleri Dizileri tanımlayacağımız zaman, –Adı –Dizi Tipi –Eleman Sayısı Dizitipi Diziadı[ Elemansayısı ]; –Örnekler: int c[ 10 ]; float myDizi[ 3284 ]; Aynı anda birden fazla dizi bildirimi, –Aynı değişken tipleri için, tanımlama biçimleri aynı –Example: int b[ 100 ], x[ 27 ];
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizileri Kullanan Örnekler Atama değerleri int n[ 5 ] = { 1, 2, 3, 4, 5 }; –Eğer dizideki elemanların sayısından daha az atama değeri varsa, kalan elemanlar 0 değerine atanır int n[ 5 ] = { 0 } Bütün elemanlar 0 –Dizideki eleman sayısından fazla atama değeri varsa yazım hatası oluşacaktır. Dizinin boyutu belirtilmezse, dizinin boyutu atama listesindeki eleman sayısı olur int n[ ] = { 1, 2, 3, 4, 5 }; –5 atama değeri, n Dizisinin boyutunu 5 olarak belirler
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 9 fig06_03.c
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 10 Program Çıktısı Element Value
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizileri Kullanan Örnekler Karakter Dizileri –String “birinci”,gerçekte karakterlerden oluşmuş statik bir dizidir. –Karakter Dizisi bir string kullanarak ilk değerlere atanabilir char string1[] = “birinci"; Null karakterin, karakter sabiti olarak gösterimi ‘\0’ string1 gerçekte 7 elemanlıdır –Az önceki bildirim char string1[] = { ‘b', 'i', 'r', ‘i', ‘n',’c’,’i’, '\0' }; –Bağımsız karakterlere dizi belirteci gösterimiyle erişebiliriz. string1[ 3 ] is character ‘i’ –Dizi adı dizinin başlangıç adresidir,‘&’ kullanımı gereksizdir scanf( "%s", string2 ); Boşluk karakteri girilinceye kadar karakter okur Dizinin sonundan öteye de yazabilir, dizinin büyüklüğüne dikkat etmez.
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 12 fig06_04.c
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 13 Program Çıktısı Element Value
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 14 fig06_05.c
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 15 Program Çıktısı Element Value
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 16 fig06_06.c Program Output Total of Dizi element values is 383
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 17 fig06_07.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 18 fig06_07.c (Part 2 of 2) Program Output Rating Frequency
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 19 fig06_08.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 20 fig06_08.c (Part 2 of 2) Program Çıktısı Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 *
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 21 fig06_09.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 22 fig06_09.c (Part 2 of 2) Program Output Face Frequency
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 23 fig06_10.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 24 fig06_10.c (Part 2 of 2) Enter a string: Hello there string1 is: Hello string2 is: string literal string1 with spaces between characters is: H e l l o
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 25 fig06_11.c (Part 1 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 26 fig06_11.c (Part 2 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 27 fig06_11.c (Part 3 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 28 Program Output Her bir fonksiyona ilk çağrı: staticDiziInit’e girerken değerler: Dizi1[ 0 ] = 0 Dizi1[ 1 ] = 0 Dizi1[ 2 ] = 0 staticDiziInit’den çıkarken değerler: Dizi1[ 0 ] = 5 Dizi1[ 1 ] = 5 Dizi1[ 2 ] = 5 automaticDiziInit ’e girerken değerler : Dizi2[ 0 ] = 1 Dizi2[ 1 ] = 2 Dizi2[ 2 ] = 3 automaticDiziInit ’den çıkarken değerler : Dizi2[ 0 ] = 6 Dizi2[ 1 ] = 7 Dizi2[ 2 ] = 8 Her bir fonksiyona ikinci çağrı: staticDiziInit’e girerken değerler : Dizi1[ 0 ] = 5 Dizi1[ 1 ] = 5 Dizi1[ 2 ] = 5 staticDiziInit’den çıkarken değerler : Dizi1[ 0 ] = 10 Dizi1[ 1 ] = 10 Dizi1[ 2 ] = 10 automaticDiziInit’e girerken değerler : Dizi2[ 0 ] = 1 Dizi2[ 1 ] = 2 Dizi2[ 2 ] = 3 automaticDiziInit’den çıkarken değerler : Dizi2[ 0 ] = 6 Dizi2[ 1 ] = 7 Dizi2[ 2 ] = 8
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizileri Fonksiyonlara Geçirmek Dizileri Geçirmek… –Bir dizi argümanını fonksiyona geçirebilmek için, dizinin ismini parantez kullanmadan belirtmeliyiz… int myDizi[ 24 ]; myFunction( myDizi, 24 ); Genellikle Dizileri fonksiyonlara geçirirken boyutları da geçirilir –Diziler referansa göre çağırma yöntemiyle geçirilir –Dizinin adı ilk dizinin ilk elemanının adresidir –Fonksiyon dizinin nerede tutulduğunu bilir Dizinin orijinal hafıza konumunda elemanlarını modifiye eder Dizinin Elemanlarını Geçirmek –Değere göre çağrılarla geçirme –Altsimge (subscripted name) isimlerini fonksiyona geçirme (i.e., myDizi[ 3 ] )
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizileri Fonksiyonlara Geçirmek Fonksiyon Prototipi void modifyDizi( int b[], int Diziboyutu ); –Prototipte parametre isimleri görecelidir int b[], int [] şeklinde de yazılabilir int Diziboyutu basitçe int olarak yazılabilir
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 31 fig06_12.c Program Output Dizi = 0012FF78 &Dizi[0] = 0012FF78 &Dizi = 0012FF78
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 32 fig06_13.c (Part 1 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 33 fig06_13.c (Part 2 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 34 fig06_13.c (Part 3 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 35 Program Çıktısı Bütün dizinin referansa göre çağrılarak geçmesinin etkileri: orijinal Dizinin değerleri : Modifiye (ayarlanmış) edilmiş Dizinin değerleri: Dizi elemanlarının değere göre çağrılarak geçmesinin etkileri: a[ 3 ] değeri 6 modifyElement da ki değeri 12 a[ 3 ] değeri 6
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 36 fig06_14.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 37 fig06_14.c (Part 2 of 2) Program Çıktısı Compiling... FIG06_14.C fig06_14.c(24) : error C2166: l-value specifies const object fig06_14.c(25) : error C2166: l-value specifies const object fig06_14.c(26) : error C2166: l-value specifies const object
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizileri Sıralama Veri sıralama –Bilgisayar uygulamalarında önemlidir –Hemen hemen tüm organizasyonlar bazı verileri sıralamak zorundadırlar. Bubble sort (Kabarcık sıralama) –Dizi içerisinde birçok kez yer değiştirme olabilir –Eleman çiftleri karşılaştırılır. Eğer bir çift artan sırada ise(yada değerleri eşitse), değişiklik olmaz Eğer azalan sırada ise, elemanlar yer değiştirilir. –Tekrarlama Örnek: –orijinal: –1. yer değişme: –2. yer değişme: –En küçük eleman dizinin en başında yer alır "bubble"
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 39 fig06_15.c (Part 1 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 40 fig06_15.c (Part 2 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 41 fig06_15.c (Part 3 of 3) Program Çıktısı Veriler Orijinal sıralamada Veriler artan sıralamada
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Örnek: Ortalama, Mod ve Medyanı Diziler Kullanarak Hesaplamak Orta – “ortalama” Medyan – sıralanmış listenin ortasındaki sayı –1, 2, 3, 4, 5 –Medyanı 3 tür Mod – sık kullanılan sayı –1, 1, 1, 2, 3, 3, 4, 5 –Mod’u 1 dir
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 43 fig06_16.c (Part 1 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 44 fig06_16.c (Part 2 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 45 fig06_16.c (Part 3 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 46 fig06_16.c (Part 4 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 47 fig06_16.c (Part 5 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 48 fig06_16.c (Part 6 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 49 fig06_16.c (Part 7 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 50 fig06_16.c (Part 8 of 8)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 51 Program Output ******** orta ******** Orta veri nesnelerinin ortalama değeridir. Ortalama bütün veri nesnelerinin Toplamının veri nesnelerinin sayısına (99) Bölümüdür. Bu veriler için Ortalama:681 / 99 = ******** medyan ******** Sıralanmamış dizi Sıralanmış dizi
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 52 Program Output (continued) Sıralanmış 99 elemanlı dizide Medyan 49. elemandır. Bu çalıştırılmada medyan 7 ******** mod ******** cevap Frekans Histogram * 2 3 *** 3 4 **** 4 5 ***** 5 8 ******** 6 9 ********* 7 23 *********************** 8 27 *************************** 9 19 ******************* Mod en sık rastlanan değerdir. Bu calıştırılmada mod 8 dir 27 kez rastlanmıştır
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizilerde Arama: Dizide lineer arama yapmak Bir key değeri için dizide arama Lineer arama –Basit –Key değeri ile dizinin her değerini karşılaştırır –Küçük ve sıralanmamış diziler için kullanışlı
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Dizilerde Arama: Dizide lineer arama yapmak Binary search –Sıralanmış Diziler içindir –key ile orta elementi karşılaştırır Eğer eşitse, arama değeri bulunmuştur Eğer key < orta element, dizinin ilk yarısında arar Eğer key > orta element, Son yarısında arama yapar İşlem tekrarlanır –Çok hızlı; en fazla n adımda, 2 n > eleman sayısı 30 elemanlı Dizide en fazla 5 adım sürer –2 5 > 30 öyleyse,en fazla 5 adıms
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 55 fig06_18.c (Part 1 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 56 fig06_18.c (Part 2 of 3)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 57 fig06_18.c (Part 3 of 3) Program Output Arama değeri (key) tam sayısını gir: 36 Değer, eleman 18 de bulundu Arama değeri (key) tam sayısını gir: 37 Değer bulunamadı
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 58 fig06_19.c (Part 1 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 59 fig06_19.c (Part 2 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 60 fig06_19.c (Part 3 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 61 fig06_19.c (Part 4 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 62 fig06_19.c (Part 5 of 5)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 63 Program Output 0 ile 28 arasında bir sayı giriniz: 25 Belirteçler: * * * 28 24* 25 bulunamadı 0 ile 28 arasında bir sayı giriniz: 8 Belirteçler: * * * 12 8* 8 dizi elemanı 4 içinde bulundu
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 64 Program Output (continued) 0 ile 28 arasında bir sayı giriniz: 6 Belirteçler: * * , dizi elemanı 3 içinde bulundu
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Çok Boyutlu Diziler Çoklu belirteçli Diziler –Satırlar ve sütunlarla gösterilir ( m x n Dizisi) –Matris gibi: önce satır belirtilir, sonra sütun Satır 0 Satır 1 Satır 2 Sütun 0Sütun 1Sütun 2Sütun 3 a[ 0 ][ 0 ] a[ 1 ][ 0 ] a[ 2 ][ 0 ] a[ 0 ][ 1 ] a[ 1 ][ 1 ] a[ 2 ][ 1 ] a[ 0 ][ 2 ] a[ 1 ][ 2 ] a[ 2 ][ 2 ] a[ 0 ][ 3 ] a[ 1 ][ 3 ] a[ 2 ][ 3 ] Satır belirteci Dizi adı Sütün belirteci
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved Çok Boyutlu Diziler İlk değer atama –int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; –Parantezler içinde satırlara göre guruplandırılarak değer atama –Yeterli değer yoksa, belirtilmemiş elemanlar 0 olarak atanır int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; Elemanların bildirimi –Önce satırı belirle, sonra sütunu printf( "%d", b[ 0 ][ 1 ] );
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 67 fig06_21.c (Part 1 of 2)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 68 fig06_21.c (Part 2 of 2) Program Output Values in Dizi1 by row are: Values in Dizi2 by row are: Values in Dizi3 by row are:
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 69 fig06_22.c (Part 1 of 6)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 70 fig06_22.c (Part 2 of 6)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 71 fig06_22.c (Part 3 of 6)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 72 fig06_22.c (Part 4 of 6)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 73 fig06_22.c (Part 5 of 6)
Outline © Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 74 fig06_22.c (Part 6 of 6) Dizi: [0] [1] [2] [3] studentGrades[0] studentGrades[1] studentGrades[2] En düşük not: 68 En yüksek not: 96 Öğrenci 0 için ortalama not Öğrenci 1 için ortalama not Öğrenci 2 için ortalama not 81.75