IRCDForum.COM - IRC ve mIRC dünyasının forumu!   irc hosting


  IRCDForum.COM - IRC ve mIRC dünyasının forumu! IF - Programlama / Yazılım Genel Programlama C ve C++


Yeni Konu   Cevap Yaz

 
LinkBack Seçenekler Stil
Alt 12 Ekim 2015, 21:46   #1
 
Code - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: 01 Mart 2015
Mesajlar: 203
WEB Sitesi: www.code.com
IRC Sunucusu: irc.code.com
İlgi Alanı:
Alınan Beğeni: 33
Standart 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.
Alıntı:
adres[2]=’c’;
printf(“Adres gostergesi = %c”, adres[2] );

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.
Alıntı:
for(i = 0;i < dizi_boyutu;i++)
adres[i]=’0’;

Örnek
Aşağıdaki kod parçasında sivas olarak ilk değer girilen adres dizisinin her bir karakteri ekrana gönderiliyor.
Alıntı:
adres[5]=”sivas”;
for(i = 0; i < 5; i++)
printf(“%c”, adres[i]);

Örnek
Aşağıdaki örnekte 10 elemana sahip bir dizinin elemanlarının toplamını veren bir kod bulabilirsiniz.
Alıntı:
#define dizi_uzunlugu 10
int sayi[dizi_uzunlugu]
int toplam;
for(i = 0; i < dizi_boyutu; i++)
toplam+=sayi[i];

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.
Alıntı:
adres[sayi*2 - i]

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.
Alıntı:
char adres[5]= {‘s’,’i’,’v’,’a’,’s’};

Yukarıdai bildirimi yapılan dizinin elemanlarının alacağı değerler aşağıdaki gibi olur.
Alıntı:
adres[0]=’s’; adres[1]= ‘i’; adres[3]=’v’; adres[4]=’a’; adres[5]=’s’;

Örnek
Alıntı:
int sayi[3]={3,2,1};

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.
Alıntı:
int sayi={ }; Yanlış
int sayi{0};

İ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.
Alıntı:
int sayi[]={4,5,6,7,8};

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.
Alıntı:
int sayi[10]={ [1]=5, sayi[8]=9, sayi[3]=7 };


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.
Alıntı:
for(i=0 ;i<sizeof(sayi)/ sizeof(sayi[0]); i++)
sayi[i]=10;

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.
Alıntı:
int a[5][7]

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)
Alıntı:
#define N 10
int birim_matris[N][N];
int i,k;
for(i=0; i<N; i++)
{
for(k=0; k<N; k++)
{
if (i==k)
birim_matris[i][k]=1;
else
birim_matris[i][k]=0;
}
}

Ç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
Alıntı:
int a[3][4] = { { 1, 1, 1, 0}, // a[0] satırındaki elemanlara atama yapılır.
{ 1, 0, 1, 0}, // a[1] satırındaki elemanlara atama yapılır.
{ 0, 1, 1, 0} }; // a[2] satırındaki elemanlara atama yapılır.

İ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.
Alıntı:
int a[3][4] = { { 1, 1, 1},
{ 0, 1, 1, 0} };

İlk değer atamasında satırlara karşılık gelen süslü parantezler yazılmayabilir.
Alıntı:
int a[3][4] = { 1, 1, 1, 0,
1, 0, 1, 0,
0, 1, 1, 0 };

Yukarıdaki dizi bildirimini aşağıdaki gibi yazabiliriz.
Alıntı:
int a[3][4] = { 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0 };

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.
Alıntı:
int a[3][4]= {[1][2]=10, [3][4]=20}

Ö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ı)
Alıntı:
#include "stdio.h"
#define var 1
#define yok 0
int rakam_gorulme[10]= {yok};
long int sayi;
int rakam;
int main(void)
{
printf("Bir sayi giriniz\n\r");
scanf("%ld",&sayi);
while(sayi>0)
{
rakam = sayi % 10;
if (rakam_gorulme[rakam]) break;
rakam_gorulme[rakam]=var;
sayi/=10;
}
if (sayi>0)
printf("Tekrar eden rakam var");
else
printf("Tekrar eden rakam yok");

return 0;
}

Ö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...]
 Code isimli Üye şimdilik offline konumundadır   Alıntı

Yeni Konu   Cevap Yaz

Etiketler
cde, dizilerarrays


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
!diziler <[şuan|bugün]> Toprak Hazır Kodlar 3 29 Ocak 2015 00:12

kpss kursu izmir kpss dersane izmir kpss kursu izmir kpss eğitim izmir YDS KURSU izmir öabt kursu izmir kpss kpss-a grubu kpss-b grubu
alan dersleri DGS kursu izmir öabt kursu izmir ales kursu izmir
irc hosting web hosting
 sohbet
 chat

Powered by vBulletin®
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.