1 / 59

DİZİLER

DİZİLER. Arrays. Giriş. Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). Dizi 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.

alia
Download Presentation

DİZİLER

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DİZİLER Arrays

  2. Giriş • Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). • Dizi 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. Hasan TINMAZ

  3. Tek Boyutlu Diziler • Tek boyutlu dizilerin tanımlanması aşağıdaki biçimde olur. • Buradaki eleman sayısı değişken olamaz. • Fakat önceden tanımlanmış bir sembolik sabit olabilir. • Genel kullanımdaki köşeli parantez isteğe bağlı anlamında değildir. • Köşeli parantez sembolü dizi tanımlamalarında mutlaka yazılmalıdır. • GK: • dizinintürü dizininadı [elemansayısı] ; Hasan TINMAZ

  4. Örnek • int a[6]; • /* 6 elemanlı, her elemanı int olan dizi*/ • char d2[15]; • /*15 elemanlı, her elemanı char olan dizi*/ • float x[10]; • /*10 elemanlı, her elemanı float olan dizi*/ • double k[10]; • /*10 elemanlı, her elemanı double olan dizi*/ Hasan TINMAZ

  5. Açıklama • Derleyici ilk örnekteki gibi bir komutla karşılaştığında, 6 adet sayının saklanacağı bellek alanını ayırır. • Bir tamsayı 2 byte (DOS'da) uzunluğunda olduğuna göre, dizinin bellekte kaplayacağı alan 2*6=12 byte olacaktır. • Bu alanın başlangıç adresini, dizi adına aktarır. Hasan TINMAZ

  6. Açıklama • Dizi içerisindeki her bir elemana, dizi isminden sonra, yazılan pozisyon numarası; yani indis değeri (subscript) ile ulaşılır. • İndis değerleri mutlaka tamsayı olmalıdır. • C dilinde bütün dizilerin indis numarası 0'dan başlar. • Dolayısı ile dizinin en büyük indis numarası eleman sayısından bir eksiktir. Hasan TINMAZ

  7. Tek Boyutlu Dizi Hasan TINMAZ

  8. Tek boyutlu dizilere değer atanması • Dizinin elemanlarına ulaşmak için dizinin ismi ve köşeli parantez içerisinde indis numarasını yazmak yeterlidir. • a[0]=-12; • /*dizinin 0 no'lu elemanına -12 değerini ata*/ • a[2]=a[4]+3; • /*dizinin 2 nolu elemanına 4 nolu elemanının 3 fazlasını ata .*/ • for(i=0;i<6;i++) • a[i]=0; • /*0'dan 6'ya kadar */ • /* dizinin elemanlarına 0 değerini ata .*/ Hasan TINMAZ

  9. Dikkat • a[i] +1 ile a[i+1] • İlk gösterim dizinin i no'lu indisindeki elemanın bir fazlası anlamına gelir, ikinci gösterim ise dizinin i'nin bir fazlası indisindeki elemanı anlamına gelir. • Dolayısı ile bu iki ifade eşit değildir. Hasan TINMAZ

  10. Tek boyutlu dizilere ilk değer atanması (initialize) • Tanımlanan dizilere ilk değer ataması ise aşağıdaki şekilde yapılır. • int a[5]={4,5,3,1,8}; • İlk değer atama işleminde küme parantezi kullanılır. • Küme işaretinden sonra ( ; ) kullanılmasına dikkat ediniz. • Böyle bir ilk değer atamasından sonra dizinin elemanları aşağıdaki gibi yerleşir. Hasan TINMAZ

  11. Tek boyutlu diziye ilk değer atamasından sonra elemanların yerleşimi Hasan TINMAZ

  12. Ayrıca… • Küme işaretleri içerisine dizinin eleman sayısından daha fazla eleman yazıldığında bir yazım hatası ortaya çıkar. • Eleman sayısından daha az eleman yazıldığında ise, diğer elemanlar otomatik olarak sıfır değerini alır. • İlk değer ataması yapılmayan dizilerin elemanları hafızadaki rasgele değerlerden oluşur. Hasan TINMAZ

  13. Ayrıca • İlk değer ataması yapıldığında eleman sayısını yazma zorunluluğu yoktur. • Ne kadar eleman yazılmışsa, eleman sayısı o kadar olur. Hasan TINMAZ

  14. ÖRNEK: Klavyeden girilen 5 adet tamsayıyı, giriş sırasının tersinden ekrana yazan C programını kodlayınız. • Bu problemde dizi kullanılmayacak olsaydı, 5 ayrı değişkene ihtiyaç duyulacaktı. • Çünkü girilen her bir değere klavyeden girme işlemi bittikten sonra, tekrar ulaşmak gerekecektir. Hasan TINMAZ

  15. Kod: Hasan TINMAZ

  16. ÖRNEK: Klavyeden girilen 10 adet tamsayı sınav notuna göre, ortalamanın üstünde olanları ekrana yazan C programı… • Bu problem çözülürken öncelikle ortalamanın bulunması gereklidir. • Ortalamanın bulunabilmesi için bütün notların toplamı alınacak ve not adedine bölünecektir. • Bu noktadan sonra daha önceden girilmiş notların her biri sıra ile ortalamayla karşılaştırılacak büyük olanlar ekrana yazdırılacaktır. • Çözümde dizi kullanılmayacak olsaydı, 20 ayrı değişkene ihtiyaç duyulacaktı. • Çünkü, girilen her bir değere klavyeden girme işlemi bittikten sonra tekrar ulaşmak gerekecektir. Hasan TINMAZ

  17. Örnek Çalışma: Hasan TINMAZ

  18. Kod: Hasan TINMAZ

  19. Sıralama (Sorting)

  20. Giriş • Dizi elemanlarını sıralama ihtiyacı doğduğunda kullanılabilecek pek çok algoritma vardır. • Bunlar kabarcık sıralama (bubble şort), seçme sıralama (selection şort), Shell şort, çabuk sıralama (quick sort) vs. olabilir. • Bu derste, sıralama yöntemi olarak en çok kullanılan ve en basit sıralama algoritmalarından biri olan, kabarcık sıralama (bubble sort) algoritması kullanılacaktır. Hasan TINMAZ

  21. Bubble Sort • Bu algoritmada her bir eleman kendisinden sonra gelen eleman ile karşılaştırılır. • Büyük ya da küçük sorgulaması yapılır. • Büyük sorgulaması yapıldığında dizi küçükten büyüğe, küçük sorgulaması yapıldığında dizi büyükten küçüğe sıralanır. • Eğer şarta uyuyor ise elemanların yerleri değiştirilir (swap). • Bu işlem dizinin eleman sayısınca tekrar ettirilir. Hasan TINMAZ

  22. Bubble Sort • Aşağıda örnek olarak seçilen bir dizi üzerinde algoritmanın çalışma şekli verilmiştir. • Sıralanması istenilen dizi 5 elemanlı olursa geçiş sayısı 5 dir. • Öncelikle büyük ya da küçük karşılaştırmalarından hangisinin uygulanacağına karar verilmesi gerekir. • Aşağıdaki örnekte büyük karşılaştırması yapılmıştır. Hasan TINMAZ

  23. Hasan TINMAZ

  24. • Algoritmanın uygulamasını yapmadan önce, elemanların yer değiştirme işleminin nasıl yapıldığının bilinmesi gerekir . • Örnek olarak a ve b adında iki adet değişken olsun. • Yer değiştirme işlemi (swap) a değişkenin içerisindeki değer b içerisine , b değişkenin içerisindeki değerde a değişkenin içerisine aktarılacak demektir. Hasan TINMAZ

  25. Bir programlama dilini yeni öğrenen öğrenenlerin çoğunluğu aşağıdaki gibi bir kod yazarlar. • a = b; • b = a; • Varsayalım ki a değişkeni içerisinde 5, b değişkeni içerisinde de 7 değeri olsun. • Yukarıdaki kod sadece b değişkeni içerisindeki 7 değerini a değişkeni içerisine aktarmaktadır. • Bu işlemden sonra a değişkeni içerisinde de 7 değeri vardır. • Sonra tekrar 7 değerini b değişkeni içerisine aktarmaktadır. • Sonuçta iki değişkende aynı değeri saklarlar. • Sağlıklı bir yer değiştirme için üçüncü bir geçici değişkene ihtiyaç vardır. Hasan TINMAZ

  26. Yer değiştirme işlemi Hasan TINMAZ

  27. Burada… • a değişkeni içerisindeki değer yedek içerisine alındıktan sonra b değişkeni içerisindeki değer a değişkeni içerisine aktarılır. • Son olarak da yedek içerisindeki değerde b değişkeni içerisine aktarılır. • Kod aşağıdaki gibi yazılabilir: • yedek = a; /* 1 nolu gösterim*/ • a = b; /* 2 nolu gösterim*/ • b = yedek; /* 3 nolu gösterim*/ Hasan TINMAZ

  28. Kabarcık sıralama algoritmasının uygulanması Hasan TINMAZ

  29. Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır: Hasan TINMAZ

  30. Arama (Searching)

  31. Giriş • Dizi içerisinde belli bir elemanın var olup olmadığını belirleme işlemine arama adı verilir. • Bu işlem içinde pek çok algoritma üretilmiş olup, bunlardan en basit ve insanların günlük hayatındaki arama yöntemlerine en çok benzeyeni doğrusal (linear) aramadır. • Bu yöntemde aranacak olan eleman, dizinin ilk elemanından başlayarak bütün elemanları ile kontrol ettirilir. • Aynı olan değere rastlandığında, dizi içerisinde elemanın var olduğu bulunmuş olur. Hasan TINMAZ

  32. Arama İşlemi Hasan TINMAZ

  33. Kod üzerinde algoritma yana yatık olarak yazılmıştır. Hasan TINMAZ

  34. Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır. Hasan TINMAZ

  35. Dizilerin Fonksiyonlara Parametre Olarak Gönderilmesi (Passing Array to Function)

  36. Bir dizi, • fonksiyona parametre olarak gönderilmek istendiğinde, fonksiyon çağrılırken dizinin sadece adı yazılır. • Fonksiyonun başlığında diziyi karşılayan tanımlamada ise köşeli parantezler kullanılır. • Bu köşeli parantezler içerisine, dizi tanımlamada olduğu gibi eleman sayısı yazılmaz. • Yazılırsa, derleyici sadece bu değerin 0'dan büyük olup olmadığını kontrol eder. • Negatifse, derleyici hata verir. • Pozitifse, bu değer derleyici tarafından göz ardı edilir. Hasan TINMAZ

  37. ÖRNEK: Kendisine gönderilen bir diziyi ekrana yazdıran fonksiyonu main() fonksiyonu ile beraber yazınız Hasan TINMAZ

  38. Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır. • Dizi üzerinde yapılacak işlemlerde, dizinin eleman sayısı önemli olduğundan bu değerin harici bir parametre olarak gönderilmesi uygun olacaktır. Hasan TINMAZ

  39. ÖRNEK: • Kendisine gönderilen tamsayı bir dizi, eleman sayısı ve aranacak değere göre bu değerin dizi içerisinde kaç tane olduğunu geri döndüren fonksiyonu , ilk değerleri atanmış bir dizi üzerinde deneyiniz. Hasan TINMAZ

  40. Dizi içinde aranan değerden kaç tane olduğunu bulan fonksiyon Hasan TINMAZ

  41. Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır. • ÇIKTI: • 13 den içerisinde 3 tanedir. • Diziler fonksiyonlara parametre olarak gönderilirken, bağlantılı çağırma (call by reference) yöntemi ile gönderilirler. • Hatırlanacağı üzere, bu yöntemde; değerlerin kopyalandığı değişkenlerin değiştirilmesi orijinal değerleri etkiler. Hasan TINMAZ

  42. Tek boyutlu dizinin fonksiyona parametre olarak gönderilmesi: Hasan TINMAZ

  43. Program çalıştırıldığında ekran çıktıları aşağıdaki gibi olacaktır. Hasan TINMAZ

  44. Çok Boyutlu Diziler (Multiply Subscripted Arrays)

  45. Giriş • Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. • Bunlardan en sık kullanılanı çift boyutlu dizilerdir (double subscripted arrays). • Bu diziler sayesinde değerler, bir tablodaki veriler gibi düşünülebilirler. (Hafızada yine ardışık olarak tutulurlar) • Bu tür dizilerde her bir elemana ulaşmak için elemanın satır indisi (row) ve sütun indisi (column) kullanılır. Hasan TINMAZ

  46. • C dilindeki dizilerin boyutları ikiden de fazla olabilir. • Bir sınır olmamakla beraber en az 12 boyuta kadar destekler. • Tanımlama: • dizinintürü dizininadı [satır sayısı][sütun sayısı]; Hasan TINMAZ

  47. ÖRNEK: • int a[3][4]; • /* 3 satırlı 4 sütunlu, int türünde değerler alabilen bir dizi*/ • float b[5][3]; • /*5 satirli 3 sütunlu float türünde değerlerler alabilen bir dizi*/ Hasan TINMAZ

  48. • Örnekte verilen ilk dizi tanımlamasındaki birinci köşeli parantez içerisinde verilen değer satır sayısı, ikinci köşeli parantez içerisinde verilen değerde sütun sayısıdır. • Bu dizi 3x4'lük bir tablo gibi düşünülebilir. • Ancak hafızada tutulma şeklinin ardışık olduğu unutulmamalıdır. Hasan TINMAZ

  49. Çift boyutlu dizilere ilk değer atanması (initialize) • Tıpkı tek boyutlu dizilerde olduğu gibi ilk değer ataması aşağıdaki şekilde yapılır. • int a[3][4] = {{4,5,3,1},{0,4,3,1},{1,9,7,2}}; • İçteki küme işaretlerinin her biri satırları temsil eder. • Daha anlaşılır olması için aşağıdaki gibi gösterilebilir: Hasan TINMAZ

  50. ÖRNEK: 3x4'lük çift boyutlu bir dizi içerisine klavyeden girilen değerleri, tablo halinde ekrana yazdıran programı yazınız. Hasan TINMAZ

More Related