12 Ekim 2015, 21:46 | #1 |
Üyelik tarihi: 01 Mart 2015
Mesajlar: 203 WEB Sitesi: www.code.com IRC Sunucusu: irc.code.com İlgi Alanı: Alınan Beğeni: 33 |
C'de Diziler(Arrays)
Diziler elemanları aynı tür değerlerden oluşan veri yapılarıdır. Dizi elemanlarının her biri dizi içerisindeki konumlarına göre ayrı ayrı seçilebilir ve üzerlerinde işlem yapılabilir.
C dilinde tek boyutlu ve çok boyutlu olmak üzere iki çeşit dizi bulunur. Tek Boyutlu Diziler En basit dizi türüdür. Bu tür dizilerin elemanları kavramsal olarak düzenleniş tek bir satırdan oluşur. Örneğin aşağıda b adında tek boyutlu bir diziyi görselleştirebiliriz. Bir dizinin program içerisinde kullanılabilmesi için bildiriminin yapılması gerekir. Dizinin bildirimi ile dizi ismi ile birlikle dizi elemanların sayısı ile türü belirtilir. Örneğin aşağıda karakter türünde 5 elemandan oluşan adres adında bir dizi tanımlamış oluruz. char adres[5];Dizinin herhangi bir elemanına erişmek için, dizinin ismi ile köşeli parantez içerisinde dizi elemanının yerini gösteren indeks numarasını yazmak yeterlidir. İndeks numarası, 0 ile dizi boyutunun bir eksiğine eşittir. Örneğin yukarıdaki adres[5] örneğini incelediğimizde dizinin indeksi 0 ile 4 arasında olur. Dizi elemanlarının gösterimi ise adres[0], adres[1]… adres[4] olur. Örnek Aşağıdaki kod parçasında adres dizisinin 3. elemanına 'c' karakteri atanıyor ve printf fonksiyınu ile bu değer ekrana gönderiliyor. For döngüsü ile dizi arasında yakın bir ilişki bulunur. Örneğin aşağıdaki örnekte dizinin her bir elemanına ‘0’ karakteri atanır. Örnek Aşağıdaki kod parçasında sivas olarak ilk değer girilen adres dizisinin her bir karakteri ekrana gönderiliyor. Örnek Aşağıdaki örnekte 10 elemana sahip bir dizinin elemanlarının toplamını veren bir kod bulabilirsiniz. for döngüsü kullanılırken döngünün nerede bitirileceğine dikkat edilmesi gerekir. for(i = 0; i < =dizi_boyutu; i++) ifadesi bazı derleyicilerde döngünün yanlış çalışmasına neden olacaktır. Dizi indeksi sonucu tamsayı olan herhangi bir ifade de olabilir. Eğer indeks olarak ifade kullanılıyorsa, ifade sonucunun 0 ile (dizi boyutu-1) aralığında olmasına dikkat edilmelidir. Diziye İlk Değer Atama Bildirimi esnasında diziye ilk değer ataması yapılabilir. Dizilere değer atama işleminin en yaygın biçimi değerlerin süslü parantez içerisinde aralarında virgül konularak yazılması şeklindedir. Bu şekilde yapılan ilk değer atamasında dizi elemanlarına sırasıyla parantez içerisindeki değerler atanır. Yukarıdai bildirimi yapılan dizinin elemanlarının alacağı değerler aşağıdaki gibi olur. Örnek Eğer bildirim esnasında ilk değer olarak atanan değerler dizinin eleman sayısından az ise dizinin diğer elemanları varsayılan olarak 0 değerini alır. Örnek int sayi[8]={1,2,3,4}; bu dizinin elemanlarının ilk değerleri int sayi[8]={1,2,3,4,0,0,0,0}; şeklinde olur. Bu özellik bir dizinin bildirimi esnasında bütün elemanlarını 0 yapmak için kullanılır. int sayi[8]={0}; //sayi dizisinin bütün elemanlarını 0 yap. Dizinin bildirimi esnasında ilk değer olarak boş girilmesi uygun değildir. Bu yüzden ilk değer ataması gerekiyorsa yalnızca 1 tane 0 yazılması uygundur. İlk değer atamasında atanan değerlerin dizinin eleman sayısından fazla olması da uygun değildir. Bu durumda derleyici program fazla olan değerleri göz ardı edecektir. char adres[5]= {‘s’,’i’,’v’,’a’,’s’,’m’,’n’,’k’}; Yukarıdaki ifade de m,n ve k karakterleri derleyici tarafından işleme alınmayacaktır. İlk değer ataması yapılan dizilerin bildirimleri esnasında dizi boyutunun yazılmasına gerek yoktur. Bu durumda derleyici program, dizinin boyutunu atanan değerlerin sayısından anlayacaktır. Böyle bir durumda dizinin bütün değerlerine atama yapılması gerekir. Dizinin Belli Elemanlarına İlk Değer Ataması Bazen dizinin yalnızca bazı elemanlarına atama yapılması gerekebilir. Bu durumda atama dizi elemanın indeks numarası kullanılarak yapılır. Bu atama şeklinde dizi elemanları sırayla yazılmasına gerek yoktur.
Dizi işlemlerinde sizeof operatörünün kullanılması Sizeof operatörü ile bir dizinin bellekte kapladığı alan bayt olarak hesaplanabilir. Örneğin char adres[5] şeklinde bildirimi yapılmış bir dizinin sizeof(adres) işlemi sonucu 5 olur. int sayi[5] şeklinde bildirimi yapılmış bir dizinin sizeof(sayi) işlemi sonucu 20 olur. Ayrıca dizinin her bir elemanının bellekte kapladığı alan da hesaplanabilir. Örneğin sizeof(adres[1]) işlemi sonucu 1 , sizeof(sayi[1]) sonucu ise 4 olacaktır. Bir dizinin boyutu sizeof(dizi /sizeof(herhangi bir dizi elemanı) işlemiyle bulunabilir. Örnek: Aşağıdaki kod parçası ile 5 elemanı bulunan tamsayı türündeki bir türün bütün elemanları 10 yapılır. Yukarıdaki teknik sayesinde dizinin uzunluğu sonradan değiştirilse bile işlem sonucu değişmeyecektir. Çok Boyutlu Diziler Birden fazla boyutlu dizilerdir. Aşağıda 5x7 kapasitesinde iki boyutlu bir dizi örneği görebilirsiniz. Bu dizinin gösterimi aşağıdaki gibidir. Çok boyutlu dizilerde dizi elemanlarına ulaşım için indeks numaraları kullanılır. Dizide dizinin boyutu kadar indeks numarası bulunur. Örneğin a çok boyutlu dizisinin 2 . satır 3. sütununda ki elamanına ulaşmak için a[2][3] yazılır. Her ne kadar a[5][7] dizisini yukarıdaki gibi görselleştirilse de, dizinin gerçek bellekte saklanması biraz faklıdır. C dizileri bellekte satır sırasını baz alarak saklar. Örneğin yukarıdaki a dizisi bellekte aşağıda verilen şekilde saklanır. Çok boyutlu dizilerde işlemler için genelde iç içe geçmiş for döngüsü kullanılır. Örnek: Bu örneğimizde birim matris oluşturalım. ( Birim matris, köşegeni (diagon) 1 ve geri kalan sayıları 0 olan karesel matristir) Çok Boyutlu dizilere ilk değer ataması Çok boyutlu dizinin bildirimi sırasında diziye ilk değer ataması yapılabilir. Örnek: Aşağıdaki gösterimde iki boyutlu diziye yapılmış ilk değer ataması yapılmıştır. Bu atamada a dizisinin ilk elemanı olan a[0][0] değeri İlk değer atamasında atama yapılmamış elemanlar 0 ile doldurulur. Aşağıdaki örnekte a[0][4]’e ilk değer ataması yapılmadığı için bu değer 0 olur. Ayrıca a[3] satırı için atama yapılmadığı için bu satırın bütün elemanları 0 olur. İlk değer atamasında satırlara karşılık gelen süslü parantezler yazılmayabilir. Yukarıdaki dizi bildirimini aşağıdaki gibi yazabiliriz. Dizi bildirimi esnasında sadece istenilen elemanlara ilk değer ataması yapılabilir. Atama yapılmayan değerler varsayılan olarak 0 değerini alır. Örnek: Bu örneğimizde girilen bir sayının tekrar eden rakamı varsa"Tekrar eden rakam var", yoksa "Tekrar eden rakam yok" ifadesini ekrana göndereceğiz. Örneğin 354321 sayısı girildiğinde program “Tekrar eden rakam var” ifadesini ekrana gönderecektir.(3 den dolayı) Örnek; Yukarıdaki örneği biraz genişletelim ve tekrar eden rakamları ekrana yazdıralım. Örneğin 354321 sayısı girildiği zaman ekrana 3 rakamını yazalım. Alıntı:
#include "stdio.h"
#define yok 0 #define var 1 #define tekrar 2 int rakam_gorulme[10]= {yok}; long int sayi; int rakam; int i; int main(void) { printf("Bir sayi giriniz\n\r"); scanf("%ld",&sayi); while(sayi>0) { rakam = sayi % 10; switch (rakam_gorulme[rakam]) { case yok: rakam_gorulme[rakam]=var; break; case var: rakam_gorulme[rakam]=tekrar; break; default: break; } sayi/=10; } for(i=0; i<10; i++) { if(rakam_gorulme[i]==tekrar) printf(" %d\n\r",i); } return 0; } Kaynak:[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] |
Alıntı
|
Etiketler |
cde, dizilerarrays |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
Seçenekler | |
Stil | |
|
|
Benzer Konular | ||||
Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
!diziler <[şuan|bugün]> | Toprak | Hazır Kodlar | 3 | 29 Ocak 2015 00:12 |