Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Nesneye Yönelik Programlama (4. Sunu). Diziler (Arrays) Diziler (arrays), aynı veri tipine sahip birden fazla veriyi bünyelerinde saklayan veri yapılarıdır.

Benzer bir sunumlar


... konulu sunumlar: "Nesneye Yönelik Programlama (4. Sunu). Diziler (Arrays) Diziler (arrays), aynı veri tipine sahip birden fazla veriyi bünyelerinde saklayan veri yapılarıdır."— Sunum transkripti:

1 Nesneye Yönelik Programlama (4. Sunu)

2 Diziler (Arrays) Diziler (arrays), aynı veri tipine sahip birden fazla veriyi bünyelerinde saklayan veri yapılarıdır. (Data Structures) Değişkenler içerisinde yalnız bir tek bilgi depolarken dizileri kullanarak aynı türden birden fazla bilgiyi saklayabiliriz. Programımız içerisinde kullanacağımız 100 adet tamsayıyı 100 farklı değişken içinde saklamak yerine bu amaçla içinde 100 tamsayı saklı bir dizi kullanmak daha mantıklıdır.

3 C++’ta diziler statik veri yapılarıdır. Yani program işletilmeden önce depolayacakları bilgi miktarı belirlidir ve işletilme esnasında bu miktar hiçbir şekilde değiştirilemez. Daha sonraki derslerimizde göreceğimiz bazı veri yapılarının (örneğin list, queue ve stack) işletilme esnasında (dinamik) kapasiteleri büyüyebilir veya küçülebilir. Diziler (Arrays)

4 Bir dizinin elemanlarının hepsi aynı veri tipine sahiptir ve bellekte ardışıl olarak sıralanırlar. Bir dizinin elemanlarına indis (index) ile ulaşılır. İndis: Belirli bir dizi elemanına ulaşmak amacıyla pozisyon numarası olarak kullanılır. Köşeli parantezler “[ ]” içerisine yazılır. Dizinin ilk elemanının indis değeri daima sıfırdır.!!!!!!! Örneğin ( a=5 ve b=6 değerleri için ) c[a+b]+=2; deyimi  c[11] dizi elemanının değerine 2 ekler.

5 “c” dizinin adıdır. “c” dizisi 12 elemana sahiptir. ( c[0], c[1], … c[11] ) “c[0]” `ın (yani dizinin ilk elemanının) değeri -45 tir.

6 !!! Dikkat !!! C++’ta dizilerin indis numaraları sıfırdan başladığı için, c[7] ile bu dizinin yedinci elemanı farklı şeyleri ifade eder. c[7] normalde dizinin sekizinci elemanıdır.

7 Dizilerin Deklare Edilmesi Dizinin boyutunu ve dizi elemanlarının veri tipini programcı belirler.  Örnek: int c[12]; deyimi c adında ve içinde 12 adet integer saklayan bir dizi tanımlar. Bir dizinin boyutu sıfırdan büyük bir integer değere sahip olmalıdır.

8 Döngü ile Dizi Elemanlarına İlk Değer Atama 1.Diziyi boyutu ve saklayacağı veri tipi ile deklare et. 2.Herhangi bir döngü yapısı kullanarak her bir dizi elemanına bir ilk değer ata. (Mesela, çok yaygın bir uygulama olarak, başlangıçta tüm dizi elemanlarına sıfır değeri atanabilir.)

9 cout <<"Eleman"<

10 İlk Değer Atama Listesi ile Dizi Oluşturma Bir dizi hem deklare edilebilir ve hem de aynı anda ilk değer atama listesi (initializer list) yardımıyla dizi elemanlarına ilk değerleri atanabilir. Dizi elemanları parantezler içerisine (“{ }”) yazılan ilk değer atama listesindeki değerlerle atanırlar ve bu elemanlar birbirlerinden virgül ile ayrılırlar.  Örnek: int n[]={10, 20, 30, 40, 50}; Dizinin boyutu bu tanımda yazılmadığı için derleyici bu dizinin boyutunu ilk değer atama listesinin eleman sayısını temel alarak belirler. Yukaridaki deyim 5 elemanlı bir dizi tanımlar. Dizi elemanlarının indis değerleri sırasıyla: 0, 1, 2, 3, 4 Dizi elemanlarının ilk değerleri sırasıyla: 10, 20, 30, 40, 50

11 İlk Değer Atama Listesi ile Dizi Oluşturma Eğer ilk atama değer listesindeki eleman sayısı dizinin boyutundan az ise kalan elemanlara sıfır değeri atanır.  Örnek: int n[10]={0}; Dizinin ilk elemanının değeri olarak sıfır seçildiği açıkça bellidir. Kalan dokuz elemanın değeri olarak yine sıfır atanacağı dolaylı olarak bilinir. Eğer ilk değer atama listesindeki eleman sayısı dizinin boyutundan fazla ise derleyici hata verir.

12 Sabit Değişkenler (Constant Variables) Bu başlık sizlere de ilginç geldi mi? (Oxymoron) Bu tür değişkenler “const” anahtar kelimesi ile deklare edilirler. Sadece okunabilir değişkenler (read-only variables) olarak da adlandırılırlar. Bu tür değişkenlere, deklare edildikleri anda muhakkak bir ilk değer ataması yapılır ve bu değer daha sonra değiştirilemez. Sabit değişken tanımlamak ve bunu dizilerin boyutu olarak kullanmak genel olarak tercih edilen bir yoldur. Sebep?

13 Sabit Değişkenler (Constant Variables) Sabit değişkenleri diğer değişkenlerden ayırt edebilmek için kullanılabilecek bir notasyon: Sabit değişken isimlerinin bütün karakterlerini büyük harfle yaz, değişken ismi birden fazla kelimeden oluşuyorsa kelimeleri birbirlerinden alt çizgilerle ayır. ÖRNEK: const int DIZI_BOYUTU=12;

14

15

16 Bir Dizinin Elemanlarını Toplayan Program Dizi boyutu olarak 10 yerine 20 kullanılırsa toplam değişkeninin değeri ne olur?

17 !!! Dikkat !!! Eğer bir dizinin elemanları bir döngü içerisinde değerlendiriliyorsa, diziye ulaşmamızı sağlayan indis değeri hiçbir zaman sıfır değerinin altına düşmemeli ve daima dizinin sahip olduğu eleman sayısından küçük olmalıdır.

18 Karakter Dizileri Kullanarak String Manipülasyonu Karakter dizileri kullanarak string depolayabilir ve manipüle edebiliriz. string leri char veri tipi ile tanımladığımız dizilerde depolayabiliriz. Örnek: ( Aşağıdaki iki kullanım birbirine denktir.) 1.char string1[]="Hi"; 2.char string1[]={'H','i','\0'}; Örnekteki dizi, depolanması istenen karakterleri ve dizinin en son elamanı olarak da özel bir karakter olan ve null karakteri ( '\0' ) diye adlandırılan string sonlandırma karakterini (string-termination character) muhafaza eder.

19 Karakter Dizileri Kullanarak String Manipülasyonu cin>> kullanarak klavyeden girilen bir string i bir karakter dizisinin içine atayabiliriz. Örnek: cin >> string1; Fakat “cin>>” ile dizinin kapasitesinden fazla karakterin okunabileceği unutulmamalıdır. Fazladan girilen bilgi kaybolacaktır. null ile sonlandırılmış bir string i temsil eden bir karakter dizisi cout<< ile ekrana yazdırılabilir.

20

21 Bir Diziyi Bir Fonksiyonun Argümanı Olarak Kullanma Bir diziyi bir fonksiyona argüman olarak iletmek için:  Dizinin adı parantezler olmadan kullanılır. Mesela dizimiz şu şekilde deklare edilmiş olsun. int a[24]; Bu dizinin argüman olarak kullanıldığı fonksiyon ise: DiziyiDegistir(a,24); dizinin adı ve boyutu fonksiyona argüman olarak iletilir. Fonksiyon diziden istenen kadar elemanı işleyebilsin diye dizinin boyutu fonksiyona ikinci bir argüman olarak verilir. Fonksiyon ise şöyle tanımlanır:  void DiziyiDegistir(int [ ],int);//Prototip  void DiziyiDegistir(int b[ ],int diziBoyutu){ }//Tanım

22 Bir Diziyi Bir Fonksiyonun Argümanı Olarak Kullanma Diziler fonksiyon argümanı olarak referansla (call-by- reference) çağrılırlar.  Fonksiyon, dizinin baslangıç adresini argüman olarak kullanır ve böylece bellekteki yeri bilinmiş olur.  Çağıran fonksiyon böylelikle çağırdığı fonksiyona argüman olarak verilen bilgiyi manipule edebilme hakkını da vermiş olur. Diziler değer ile (call-by-value) fonksiyonlara argüman olarak atansalardı eğer bu bir performans eksikliğine yol açardı. (Fonksiyon içerisinde işlensin diye dizinin her bir elemanının kopyası alınırdı.) SIKLIKLA çağrılan fonksiyonlardaki kapasitesi büyük diziler böyle bir soruna sebep olurdu.

23

24

25 “const” ın Dizilerde Fonksiyon Parametresi Olarak Kullanılması Dizinin deklarasyonu anında başına const anahtar kelimesi yazılır. Böylelikle fonksiyonu çağıran, çağrılan fonksiyon içinde dizi elemanlarının modifiye edilmesinin önüne geçer. Dizi elemanlarının değeri fonksiyon gövdesi içinde sabittir ve değiştirilemez. Bu özellik sayesinde programcı değerlendirilen bilginin kazara değiştirilmesini engellemiş olur.

26

27 !!! Dikkat !!! Dizilerin fonksiyon parametresi olarak referansla gönderildiğini ve dolayısıyla fonksiyon içinde değiştirilebilecegini unutursak beklemediğimiz sonuçlarla karşılaşırız. Bunun önüne geçebilmek için const ı kullanabiliriz.

28 Dizi İçinde Lineer Arama Yapma (Linear Search) Dizi içinde herhangi bir aranan değerin var olup olmadığı ya da var ise eğer hangi indis değerine sahip olduğu bilinmek istenebilir. Lineer Arama (Linear Search)  Dizinin her bir elemanı aranan değer ile karşılaştırılır.  Aranan değerin dizinin ilk elemanı olması ihtimali, son elemanı olması ihtimali ile aynıdır.  Aranan değerin dizi içerisinde olmadığını garanti edebilmek için söz konusu değer dizinin tüm elemanları ile karşılaştırılmalıdır.  Halihazırda sıralı olmayan küçük dizilerde arama yaparken kullanılabilen bir metoddur. (Sıralı dizilerde İkili Arama (Binary Search) algoritması kullanılır.)

29

30

31 Çok Boyutlu Diziler (Multidimensional Arrays) Örneğin 2 boyutlu dizileri ele alalım. (Matrisler)  İçinde bilgi saklanan bir tablo gibi düşünülebilir. Satırlar (rows) ve sütunlar (columns) vardır.  Dizinin elemanlarına iki indisle ulaşılır. ( [ x ][ y ] )  Genellikle m tane satıra ve n tane sütuna sahip bir dizi “m-by-n array” diye adlandırılır. Bu tür diziler 2 den fazla boyuta da sahip olabilirler.

32 3 satır ve 4 sütuna sahip 2 boyutlu bir dizi

33 İki Boyutlu Bir Diziyi Deklare Etme ve İlk Değer Atama int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; b[ 0 ][ 0 ]=1 ve b[ 0 ][ 1 ]=2 b[ 1 ][ 0 ]=3 ve b[ 1 ][ 1 ]=4 int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; b[ 0 ][ 0 ]=1 ve b[ 0 ][ 1 ]=0 (ima ile) b[ 1 ][ 0 ]=3 ve b[ 1 ][ 1 ]=4

34 Çok Boyutlu Dizileri Fonksiyon Parametresi Olarak Kullanma Tek boyutlu dizilerde olduğu gibi ilk boyutun büyüklüğü belirtilmez. Takip eden boyutların büyüklüğü ise belirtilmelidir. Derleyici ancak bu yolla ikinci satıra geçmek için kaç eleman atlayacağını bilir. Örneğin : void DiziyiYazdir(const int a[][3],int boyut); Bu fonksiyon 2. satıra geçebilmek icin ilk satırın 3 elemanını atlamak zorundadır.

35 Çok Boyutlu Dizilerde Bilgi Manipülasyonu Genelde iç içe for döngüleri kullanılır. (Dıştaki for satırlarda gezinirken içteki for sütunları dolaşır.) Örnek: Sadece bir satırın elemanlarını modifiye etmek için:  for(int sutun=0;sutun<4;sutun++) a[2][sutun]=0; Örnek: Dizinin tüm elemanlarını modifiye etmek için (İç içe 2 for):  toplam=0; for(satir=0;satir<3;satir++) for(sutun=0;sutun<4;sutun++) toplam+=a[satir][sutun];

36 Bir Dizinin En Küçük ve En Büyük Elemanını Bulma

37

38 Bu algoritma birinci elemandan başlayarak son elemana kadar, sıralanmamış DİZİYİ parça parça sıralar. Önce dizideki en küçük eleman bulunur ve dizinin ilk elemanı ile yeri değiştirilir (swap). Sonraki aşamada dizinin sıralanmamış olan parçası içindeki en küçük eleman bulunur ve ikinci elemanla yeri değiştirilir. Bu işlem N defa tekrarlandığında N elemanlı bir dizi sıralanmış olur. İkinci bir dizi kullanmadan, orijinal dizi üzerindeki manipülasyonlarla sıralama yerinde sıralama (in place sort) olarak adlandırılır. Seçme Sıralama (Selection Sort) Algoritması

39

40

41 Bir Sayının Basamaklarına Ayrılması Suretiyle Manipüle Edilmesi


"Nesneye Yönelik Programlama (4. Sunu). Diziler (Arrays) Diziler (arrays), aynı veri tipine sahip birden fazla veriyi bünyelerinde saklayan veri yapılarıdır." indir ppt

Benzer bir sunumlar


Google Reklamları