Ana Sayfa » Dersler » C# » Yazilim Mutfagi Dersleri ( C#) Ders 4 - Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasil Kullanilir. foreach Döngüsünün Kullanimi.

Yazilim Mutfagi Dersleri ( C#) Ders 4 - Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasil Kullanilir. foreach Döngüsünün Kullanimi.

Önceki Dersler

C# da Diziler

Diziler için ayni tipteki verilerin tutuldugu bir koleksiyon diyebiliriz. Örnegin integer verinin bir yigin seklinde tutulmasi için dizileri kullaniriz. C# da diziler referans tipinde degiskenlerdendir. C# da tanimlanan tüm diziler System.Array sinifindan türemis bir nesnedir. C# da diziler asagidaki gibi tanimlanir.

<veri tipi>[] <degisken ismi> = new <veri tipi>[<dizinin boyutu>];

10 adet integer veri tutan bir dizinin tanim ise

int[] integerDizi = new int[10];

Bir dizinin boyutlari sabittir ve kullanilmadan önce belirlenmelidir. Dizi boyutunu belirlemek için baska bir degiskende kullanabilirsiniz.

int boyut = 10;
int[] integerDizi = new int[boyut];

Diziyi tanimlama ve baslangiç degerlerini atama islemini ayri satirlardada yapabilirsiniz.

int[] integerDizi;
integerDizi = new int[10];

Ayrica dizileri tanimlarken, dizi içine atmak istediginiz verileride belirterek dizi tanimlayabilirsiniz. Bunun için kullanacaginiz veri tipine uygun olacak sekilde, süslü parantez içinde her biri virgülle ayrilmis dizi elemanlarini yazmaniz yeterli.

int[] integerDizi = {1,2,3,4,5,6,7,8,9};

Yukarida 10 adet elemani olan ve degerleri de verilmis, integer tipinde verileri tutan bir dizi tanimladik. Eger dizimiz string degerler tutacak olsaydi, süslü parantez içine yazdigimiz elemanlarin her birini çift tirnaklar arasina almamiz gerekirdi.

string[] strDizi = { "Sabri", "Metin", "Osman", "Ali" };

Dizi Elemanlarina Ulasmak

Dizi elemanlarina ulasmak için [indeks] indeks operatörünü kullaniriz. Dikkat edilmesi gereken nokta C# da dizilerin elemanlari 0. Indeksten baslar, yani eger 5 elemanli bir dizimiz varsa bu dizinin birinci elemani 0. indekste son elemani ise 4. indekstedir. 5 elemanli bir dizinin 3. elemanina asagidaki gibi erisiriz.

int[] integerDizi = { 1, 2, 3, 4, 5};
int ucuncuEleman = integerDizi[2];

Bir dizi içindeki elemanlara ulasmak için basit bir örnek:

int[] integerDizi = { 4, 8, 23, 64, 35 };
for (int i = 0; i < 5; i++)
{
    Console.WriteLine("Dizinin {0}. Elemaninin Degeri = {1} ", i, integerDizi[i]);
}

Yukaridaki kodun çalismasi sonucu olusan ekran görüntüsü:

Dizinin 0. Elemaninin Degeri = 4
Dizinin 1. Elemaninin Degeri = 8
Dizinin 2. Elemaninin Degeri = 23
Dizinin 3. Elemaninin Degeri = 64
Dizinin 4. Elemaninin Degeri = 35

Yukaridaki örnekte bir dizi olusturduk ve bu dizinin eleman sayisi kadar bir for döngüsü kurduk. Döngü içinde diziye ait elemanlarin degerlerine tek tek ulastik.

Peki kullandigimiz dizinin eleman sayisini bilmeseydik nasil döngüye girebilirdik. Bütün diziler System.Array sinifindan türemis nesnelerdir demistik. System.Array sinifinin Length diye bir özelligi vardir, dogal olarakda tüm dizilerinde bir Length özelligi olur. Dizimizin eleman sayisini dizininAdi.Length diyerek alabiliriz. Yukaridaki örnegi bu yöntemle yeniden yazacak olursak.

 
int[] integerDizi = { 4, 8, 23, 64, 35 };
for (int i = 0; i < integerDizi.Length; i++)
{
    Console.WriteLine("Dizinin {0}. Elemaninin Degeri = {1} ", i, integerDizi[i]);
}

Yukaridaki kodu çalistirdiginizda bir önceki örnegimizle ayni sonucu üretir.

Dizilerle ilgili dersimize devam etmeden önce diziler için kullandigimiz foreach döngüsüne bakalim.

foreach Döngüsü

Diziler ve koleksiyonlarin elemanlarina erismek için basit ve kullanisli bir döngü çesidi. Döngüler dersinde bahsetmedik çünkü dizileri anlatmadan foreach döngüsünü anlamaya çalismak bosuna olacakti. foreach döngüsünün yapisi asagidaki gibidir.

 
foreach(<dizi içindeki elemalarin veri tipi> <degisken ismi> in <diziveyaKoleksiyonadi>)
{
    <Kod blogumu>
}

Yukarida for döngüsü ile yaptigimiz örnegimiz foreach döngüsü ile yapalim.

foreach (int diziElemani in integerDizi)
{
    Console.WriteLine("Elemanin Degeri = {0} ", diziElemani);
}

Çok daha basit ve kullanisli oldugunu görebilirsiniz.

  • Foreach döngüsü kullanirken ulastigimiz dizi elemanlari readonly dir. Yani yukaridaki örnek üzerinde anlatacak olursak foreach döngüsü içinde diziElemani adli integer degiskenin içerdigi degeri degistiremezsiniz. Eger degistirmeye kalkarsaniz Cannot assign to 'diziElemani' because it is a 'foreach iteration variable' hatasi alirsiniz. Eger yazdiginiz uygulamada dizi elemanlarini döngü içinde degistirmek istiyorsaniz for döngüsü kullanmanizi tavsiye ederim.
  • String tipindeki bir degiskende char tipindeki verilerin birlesmesinden olusmus bir dizidir. Öyleyse foreach döngüsü kullanarak asagidaki gibi bir stringin elemanlarini erisebilirsiniz.
string metin = "Yazilim Mutfagi";
foreach (char harf in metin)
{
    Console.WriteLine("Harf = {0} ", harf);
}

Çok Boyutlu Diziler (Multidimensional Array)

Çok boyutlu bir dizi ‘dizinin dizisi’ seklinde tabir edilebilir. Her elemani baska bir dizi olan diziler çok boyutlu bir dizidir. Çok boyutlu bir dizi veritabaninda her satirinda birden fazla kolon bulunan bir tabloya benzetilebilir. Eger her satirda bulunan her kolon kendi içinde baska bir dizi barindirmiyorsa bu tür dizilere 2 boyutlu diger bir degisle çok boyutlu diziler denir. Eger her kolonda kendi içinde baska bir dizi barindiriyorsa bu tür dizilere n boyutlu diziler denir. Burda n ifadesi dizinin derinligini ifade eder.

Çok boyutlu diziler iki çesittir;

  • Düzenli Diziler: Her satiri ayni sayida kolon barindiran diziler.
  • Düzensiz Diziler (Jagged Array) : Her satiri farkli sayida kolon barindiran diziler.

Çok boyutlu dizileri sekillerle anlatmaya çalisalim.,

Not: Dizilerin ilk elemaninin indeks numarasinin 0 oldugunu unutmayin.

tek boyutlu çift boyutlu ve 3 boyutlu diziler

Dizilerin Tanimlanmasi ve Deger Atamalari

Tek boyutlu bir dizinin nasil tanimlandigini ve nasil deger atayacagimizi yukarda anlatmistik. Simdi Tek boyutlu dizi dahil tüm dizi tiplerini nasil tanimlayacagimiza bakalim.

Tek Boyutlu Diziler:

//Dizinin Olusturulmasi
int[] intDizi = new int[5];

//Dizi elemanlarina deger atamasi
intDizi[0] = 36; //dizinin ilk elemanina 36 degeri atandi
intDizi[2] = 26; //dizinin ikinci elemanina 26 degeri atandi
intDizi[4] = 32; //dizinin son elemanina 32 degeri atandi

Çok Boyutlu Diziler:

//Dizinin Olusturulmasi
int[,] intCokBDizi = new int[2, 3];
//Dizi elemanlarina deger atamasi
intCokBDizi[0, 0] = 23;
intCokBDizi[0, 1] = 25;
intCokBDizi[0, 2] = 33;
intCokBDizi[1, 0] = 41;
intCokBDizi[1, 1] = 29;
intCokBDizi[1, 2] = 93;

Çok Boyutlu Dizilerin Elemanlarina Döngü Ile Ulasmak

for döngüsü:

//Dizi elemanlarini for döngüsü ile bulmak.
for (int row = 0; row < intCokBDizi.GetLength(0); row++)
{
    for (int col = 0; col < intCokBDizi.GetLength(1); col++)
    {
        Console.WriteLine("Dizinin {0},{1} indeksindeki degeri : {2}",row,col,intCokBDizi[row,col]);
    }
}

Ekran Çiktisi:

Dizinin 0,0 indeksindeki degeri : 23
Dizinin 0,1 indeksindeki degeri : 25
Dizinin 0,2 indeksindeki degeri : 33
Dizinin 1,0 indeksindeki degeri : 41
Dizinin 1,1 indeksindeki degeri : 29
Dizinin 1,2 indeksindeki degeri : 93

GetLength() fonksiyonu dizinin belirtilen boyutundaki eleman sayisini verir. Yukaridaki örnekte görüldügü gibi parametre olarak 0 veya 1 veriyoruz. 0 dizinin birinci boyutundaki eleman sayisi yani satir sayisi, 1 verdigimizde ise dizinin 2.boyutu yani kolon sayisini verir.

Dizilerin Length özelligi dizi içinde bulunan toplam eleman sayisini verir. Örnegin yukaridaki örnekte tanimladigimiz dizi için intCokBDizi.Length sonuç olarak 6 döndürür.

2 boyutlu Düzensiz dizilerde foreach döngüsü kullanamayiz. foreach döngüsünü sadece tüm elemanlara erismek için kullanabiliriz. Eger her boyuttaki elemana farkli erismek istiyorsak for döngüsü kullanmamiz gerekiyor. foreach döngüsü ile düzensiz 2 boyutlu dizilerin elemanlarina erisebiliriz. Önce düzensiz dizilerin nasil tanimlandigina bakalim sonrada foreach döngüsü ile elemanlarina nasil erisecegimize göz atalim.

Düzensiz Çok Boyutlu Diziler:

//Dizinin Olusturulmasi
int[][] intCokBDizi = new int[3][];

//Ikinci boyutta bulunan her elemanda bir dizi olduguna göre
//onlarida new komutu ile ayarlamamiz gerekir.
intCokBDizi[0] = new int[2];
intCokBDizi[1] = new int[4];
intCokBDizi[2] = new int[3];

//Dizi elemanlarina deger atamasi
intCokBDizi[0][0] = 13;
intCokBDizi[0][1] = 15;

intCokBDizi[1][0] = 21;
intCokBDizi[1][1] = 29;
intCokBDizi[1][2] = 29;
intCokBDizi[1][3] = 23;

intCokBDizi[2][0] = 39;
intCokBDizi[2][1] = 39;
intCokBDizi[2][2] = 33;

Bir önceki anlattigimiz düzensiz çok boyutlu dizide for döngüsü kullanarak elemanlara tek tek ulasmistik. Düzensiz dizilerde elemanlara tek tek ulasmak istedigimizde for döngüsü yerine foreach döngüsü kullaniyoruz.

foreach Döngüsü:

foreach (int[] row in intCokBDizi)
{
    foreach (int col in row)
    {
        Console.WriteLine(col);
    }
    Console.WriteLine("---------");
}
Ekran Çiktisi
13
15
---------
21
29
29
23
---------
39
39
33
---------

Yukarida anlattiklarimizin isiginda 3 boyutlu düzenli ve düzensiz dizileri nasil tanimlariz ve bunlara nasil deger atamasi yapariz bir örnekle anlatalim.

//3 boyutlu düzenli dizi tanimlama
int[,,] intUcBDizi = new int[2,3,2];

//3 boyutlu düzenli diziye deger atama
intUcBDizi[0, 0, 0] = 1;
intUcBDizi[0, 0, 1] = 34;
intUcBDizi[1, 1, 0] = 156;

//3 boyutlu düzensiz dizi tanimlama
int[][][] intUcBDuzensizDizi = new int[2][][];

//3 boyutlu düzensiz dizinin alt elemanlarini ayarlama
intUcBDuzensizDizi[0] = new int[2][];
intUcBDuzensizDizi[0][0] = new int[3];
intUcBDuzensizDizi[0][1] = new int[4];

intUcBDuzensizDizi[1] = new int[3][];
intUcBDuzensizDizi[1][0] = new int[2];
intUcBDuzensizDizi[1][1] = new int[5];
intUcBDuzensizDizi[1][2] = new int[3];

//3 boyutlu düzensiz diziye deger atama
intUcBDuzensizDizi[0][0][0] = 129;
intUcBDuzensizDizi[0][0][1] = 65;
intUcBDuzensizDizi[0][1][0] = 119;
intUcBDuzensizDizi[0][1][1] = 35;

intUcBDuzensizDizi[1][1][1] = 30;
intUcBDuzensizDizi[1][2][1] = 37;

Örneklerimizde hep integer tipinde veri tutan dizilerden bahsettik. Örneklerle string deger tutan dizilerin nasil kullanildigini basitçe anlatalim.

string[] isim = new string[4];

Dizi elemanlarinin degerlerini olusturma aninda vermek

string[] isim = new string[4]{"Sabri","Seher","Ali","Metin"};

//veya
string[] isim2 = new string[] { "Sabri", "Seher", "Ali", "Metin" };

//veya
string[] isim3 = { "Sabri", "Seher", "Ali", "Metin" };

//veya tanimlama ve deger olusturma islemini ayri satirlarda yapma
string[] isim4;
isim4 = new string[4] { "Sabri", "Seher", "Ali", "Metin" };

Ilk olusturma aninda elemanlara deger verme islemini 2 boyutlu dizilerde de asagidaki gibi yapabiliriz.

string[][] isimListesi = { new string[] { "Sabri", "Seher" }, new string[] { "Ahmet", "Mehmet", "Zuhal", } };
early pregnancy termination vacuum aspiration abortion how late is too late for an abortion
d&c abortion alternatives to abortion cook county abortion clinic
how to spot a cheater infidelity women cheat on their husbands
how can you terminate a pregnancy abortions ways to terminate a pregnancy at home
free grocery coupons rite aid video coupons prescription drug coupons printable
buy sildenafil 100mg viagra without a doctor prescription buy viagra 100mg
pet prescription discount card free viagra coupons prescription coupon card
viagra.com coupon open prescription drug discount cards
new prescription coupons transfer prescription coupon free prescription drug cards
coupons for drugs cialis coupons free discount coupons for cialis
viagra viagra szedése viagra noknek
aerius marine thefunnyblog.org aerius

Yazar Hakkında

Mehmet Sabri KUNT

Google Plus
Yazilim Mutfagi kurucu ve yöneticisidir. 2005 Selçuk Ünv Bilgisayar mühendisligi mezunudur. Telekomünikasyon sektöründe BI&DWH alanindan çalismaktadir.

Makale Sayısı : 116

Yazilim Mutfagi Dersleri ( C#) Ders 4 - Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasil Kullanilir. foreach Döngüsünün Kullanimi.

104 yorum
yorumekle yorumekle Toplam 104 Yorum Yapılmış. Sizde yorum yazmak ve soru sormak için bu linki takip edin. -Forum sayfasına yönlendirileceksiniz-

Yorumlar

  • avatar

    mskunt

    aleykum selam, malesef o kadar vaktim yok, makaleyi okuyum kendin birseyler çikaramadin mi?  googleda aratirsan bir çok makale bulursun.

    Cevapla Alıntı Yaparak Cevapla
  • avatar

    Guests

    selamün aleyküm arkadaslar . c# hocam bana ödev verdi çok boyutlu dizilerle ilgili güzel bi örnek istiyor ve ben bi türlü bulamadm yarin sunumum var bana satir satir anlatarak açiklayacak bi yardimsever lazim nolur yardimci olun lütfen .. tesekkürler . . Ouch

    Cevapla Alıntı Yaparak Cevapla
  • avatar

    Guests

    twitter'da yazdigim twitter hesabini hackleyip sifrelerini ve bilgilerini bana mail atacak program var mi arkadaslar ?


    arkadaslara sordugumda c# da yapanlar var diye duydum.

    Cevapla Alıntı Yaparak Cevapla
  • avatar

    Guests

    Ilk degerleri programda tanimlanan bir int dizinin elemanlarinin en büyügünü
    ve en küçügünü bulduran programin kod satirlarini ve ekran görüntüsünü
    yapiniz.

    Cevapla Alıntı Yaparak Cevapla
  • avatar

    Guests

    [QUOTE=Burak]dizinin kaç elemanli olucagini belirtmeden dizinin her bir elemanini kullaniciya girdirip en son bitis degeri olarak 0 girmesini saglamak mümkünmü? [/QUOTE]


    Hatta görmüsken yaziyim dedim :)

    for (int i = 1; i <= dizi.Length; i++)
    {
        dizi = Console.Read();
        if (dizi == '0')
            break;
    }

    gibi bir kod yazilabilir, hatam olabilir, kontrol etmedim. Ama çalisir gibi.

    Cevapla Alıntı Yaparak Cevapla