Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

DİZİLER Arrays. C Programlama Dilinde Diziler Hasan TINMAZ2 Giriş  Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır.

Benzer bir sunumlar


... konulu sunumlar: "DİZİLER Arrays. C Programlama Dilinde Diziler Hasan TINMAZ2 Giriş  Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır."— Sunum transkripti:

1 DİZİLER Arrays

2 C Programlama Dilinde Diziler Hasan TINMAZ2 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.

3 C Programlama Dilinde Diziler Hasan TINMAZ3 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ı] ;

4 C Programlama Dilinde Diziler Hasan TINMAZ4 Ö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*/

5 C Programlama Dilinde Diziler Hasan TINMAZ5 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.

6 C Programlama Dilinde Diziler Hasan TINMAZ6 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.

7 C Programlama Dilinde Diziler Hasan TINMAZ7 Tek Boyutlu Dizi

8 C Programlama Dilinde Diziler Hasan TINMAZ8 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.*/

9 C Programlama Dilinde Diziler Hasan TINMAZ9 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.

10 C Programlama Dilinde Diziler Hasan TINMAZ10 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.

11 C Programlama Dilinde Diziler Hasan TINMAZ11 Tek boyutlu diziye ilk değer atamasından sonra elemanların yerleşimi

12 C Programlama Dilinde Diziler Hasan TINMAZ12 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.

13 C Programlama Dilinde Diziler Hasan TINMAZ13 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.

14 C Programlama Dilinde Diziler Hasan TINMAZ14 Ö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.

15 C Programlama Dilinde Diziler Hasan TINMAZ15 Kod:

16 C Programlama Dilinde Diziler Hasan TINMAZ16 Ö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.

17 C Programlama Dilinde Diziler Hasan TINMAZ17 Örnek Çalışma:

18 C Programlama Dilinde Diziler Hasan TINMAZ18 Kod:

19 Sıralama (Sorting)

20 C Programlama Dilinde Diziler Hasan TINMAZ20 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.

21 C Programlama Dilinde Diziler Hasan TINMAZ21 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.

22 C Programlama Dilinde Diziler Hasan TINMAZ22 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.

23 C Programlama Dilinde Diziler Hasan TINMAZ23

24 C Programlama Dilinde Diziler Hasan TINMAZ24 …  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.

25 C Programlama Dilinde Diziler Hasan TINMAZ25 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.

26 C Programlama Dilinde Diziler Hasan TINMAZ26 Yer değiştirme işlemi

27 C Programlama Dilinde Diziler Hasan TINMAZ27 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*/

28 C Programlama Dilinde Diziler Hasan TINMAZ28 Kabarcık sıralama algoritmasının uygulanması

29 C Programlama Dilinde Diziler Hasan TINMAZ29 Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır:

30 Arama (Searching)

31 C Programlama Dilinde Diziler Hasan TINMAZ31 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.

32 C Programlama Dilinde Diziler Hasan TINMAZ32 Arama İşlemi

33 C Programlama Dilinde Diziler Hasan TINMAZ33 Kod üzerinde algoritma yana yatık olarak yazılmıştır.

34 C Programlama Dilinde Diziler Hasan TINMAZ34 Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır.

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

36 C Programlama Dilinde Diziler Hasan TINMAZ36 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.

37 C Programlama Dilinde Diziler Hasan TINMAZ37 ÖRNEK: Kendisine gönderilen bir diziyi ekrana yazdıran fonksiyonu main() fonksiyonu ile beraber yazınız

38 C Programlama Dilinde Diziler Hasan TINMAZ38 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.

39 C Programlama Dilinde Diziler Hasan TINMAZ39 Ö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.

40 C Programlama Dilinde Diziler Hasan TINMAZ40 Dizi içinde aranan değerden kaç tane olduğunu bulan fonksiyon

41 C Programlama Dilinde Diziler Hasan TINMAZ41 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.

42 C Programlama Dilinde Diziler Hasan TINMAZ42 Tek boyutlu dizinin fonksiyona parametre olarak gönderilmesi:

43 C Programlama Dilinde Diziler Hasan TINMAZ43 Program çalıştırıldığında ekran çıktıları aşağıdaki gibi olacaktır.

44 Çok Boyutlu Diziler (Multiply Subscripted Arrays)

45 C Programlama Dilinde Diziler Hasan TINMAZ45 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.

46 C Programlama Dilinde Diziler Hasan TINMAZ46 …  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ı];

47 C Programlama Dilinde Diziler Hasan TINMAZ47 Ö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*/

48 C Programlama Dilinde Diziler Hasan TINMAZ48 …  Ö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.

49 C Programlama Dilinde Diziler Hasan TINMAZ49 Ç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:

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

51 C Programlama Dilinde Diziler Hasan TINMAZ51 Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır.

52 C Programlama Dilinde Diziler Hasan TINMAZ52 ÖRNEK: Elemanları klavyeden girilen 4x6'lık bir dizinin sütun toplamlarını ekrana yazan programı yazınız.

53 C Programlama Dilinde Diziler Hasan TINMAZ53 Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır.

54 C Programlama Dilinde Diziler Hasan TINMAZ54 Çok boyutlu dizilerin fonksiyonlara parametre olarak gönderilmesi  Çok boyutlu bir dizi, fonksiyona parametre olarak gönderilecekse, tek boyutlularda olduğu gibi sadece adı yazılır.  Gönderilen dizi değeri karşılayan tanımlama da ise gönderilen dizinin boyutu kadar köşeli parantez açılır ve kapatılır, ilk köşeli parantez içerisine eleman sayısını ifade eden değer yazılmaz, fakat diğerlerine eleman sayıları verilmek zorundadır.

55 C Programlama Dilinde Diziler Hasan TINMAZ55 …  Derleyici bu değerleri elemanların hafızaya yerleşimlerini tanımlamak için kullanır.  Dizi hangi tür olursa olsun, hafıza ard arda gelen hücrelerden oluşur.  Dolayısı ile indis numaralan ne olursa olsun, bütün dizi elemanları hafızada ardışık olarak saklanmak zorundadır.

56 C Programlama Dilinde Diziler Hasan TINMAZ56 Örneğin  int a[2] [3] ={{13,12,8}, {0,5}}; gibi bir dizi tanımlandığında elemanları hafızada şekil'deki gibi tutulur.  Yani çift boyutlu diziler tablo halinde hafızada tutulmaz.  Her bir satır verilen sütun sayısı kadar sonraki hücreler içerisinde tutulur.  Zaten her bir satır tek boyutlu dizi gibi düşünülebilir.  Bütün satırlar uç uca eklenerek hafızaya yerleşir.

57 C Programlama Dilinde Diziler Hasan TINMAZ57 ÖRNEK: Kendisine gönderilen 3x4'lük bir diziyi ekrana tablo halinde yazan fonksiyonu main () fonksiyonu ile beraber yazınız.

58 C Programlama Dilinde Diziler Hasan TINMAZ58 Program çalıştırıldığında ekran çıktısı aşağıdaki gibi olacaktır.

59 C Programlama Dilinde Diziler Hasan TINMAZ59 Kaynakça:  Programlamayı C ile öğreniyorum (2. Baskı), M. Yorulmaz, S. Yorulmaz, 2005, Ankara


"DİZİLER Arrays. C Programlama Dilinde Diziler Hasan TINMAZ2 Giriş  Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır." indir ppt

Benzer bir sunumlar


Google Reklamları