C# Programlama Ders Notları

Diziler (Array)

Diziler için aynı tipteki verilerin tutulduğu bir koleksiyondur.

Örneğin integer verinin bir yığın şeklinde tutulması için dizileri kullanırız.

C# da diziler referans tipinde değişkenlerdendir. C# da tanımlanan tüm diziler System.Array sınıfından türemiş bir nesnedir.

 

C# da diziler aşağıdaki gibi tanımlanır.

veri tipi[] değişken ismi = new veri tipi[<dizinin boyutu>] ;

10 adet integer veri tutan bir dizinin tanım ise

int[] notlar = new int[10];


Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.


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


Diziyi tanımlama ve başlangıç değerlerini atama işlemini ayrı satırlardada yapabilirsiniz.


int[] notlar ;
notlar = new int[10] ;


Ayrıca dizileri tanımlarken, dizi içine atmak istediğiniz verileride belirterek dizi tanımlayabilirsiniz. Bunun için kullanacağınız veri tipine uygun olacak şekilde, süslü parantez içinde her biri virgülle ayrılmış dizi elemanlarını yazmanız yeterli.


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


Yukarıda 10 adet elemanı olan ve değerleri de verilmiş, integer tipinde verileri tutan bir dizi tanımladık. Eğer dizimiz string değerler tutacak olsaydı, süslü parantez içine yazdığımız elemanların her birini çift tırnaklar arasına almamız gerekirdi.


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

Konuyu Özetlersek aşağıda verilen 3 yol da kullanılabilir.

1.yol:
veriTipi[] dizininAdi; //dizi oluşturuldu.
dizininAdi=new veriTipi[3]//dizinin eleman sayısını belirledik.
dizininAdi[0]=veri;
dizininAdi[1]=veri;
dizininAdi[2]=veri;

örnek:
int[] sayilar=new int[3];
sayilar[0]=20;
sayilar[1]=50;
sayilar[2]=60;


2.yol:
Bütün işlemlerin tek satırda yapılmasıyla oluşan yöntem.
string[] isimler=new string[2]{“ali”,”veli”}

3.yol:
string[] isimler={“ali”,”veli”}

 

 

Dizi Elemanlarına Ulaşmak

 

Dizi elemanlarına ulaşmak için [indeks] indeks operatörünü kullanırız. Dikkat edilmesi gereken nokta C# da dizilerin elemanları 0. İndeksten başlar, yani eğer 5 elemanlı bir dizimiz varsa bu dizinin birinci elemanı 0. indekste son elemanı ise 4. indekstedir. 5 elemanlı bir dizinin 3. elemanına aşağıdaki gibi erişiriz.

 

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

Bir dizinin bütün elemanlarına ulaşmak için döngülerden faydalanırız.


Bir dizi içindeki elemanlara ulaşmak için basit bir Console Uygulaması :

int[] integerDizi = { 4, 8, 23, 64, 35 };
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Dizinin {0}. Elemanının Değeri = {1} ", i, integerDizi[i]);
}

Yukarıdaki kodun çalışması sonucu oluşan ekran görüntüsü:

Dizinin 0. Elemanının Değeri = 4
Dizinin 1. Elemanının Değeri = 8
Dizinin 2. Elemanının Değeri = 23
Dizinin 3. Elemanının Değeri = 64
Dizinin 4. Elemanının Değeri = 35

 

Yukarıdaki örnekte bir dizi oluşturduk ve bu dizinin eleman sayısı kadar bir for döngüsü kurduk. Döngü içinde diziye ait elemanların değerlerine tek tek ulaştık.

 

Peki kullandığımız dizinin eleman sayısını bilmeseydik nasıl döngüye girebilirdik. Bütün diziler System.Array sınıfından türemiş nesnelerdir demiştik. System.Array sınıfının Length diye bir özelliği vardır, doğal olarakda tüm dizilerinde bir Length özelliği olur. Dizimizin eleman sayısını dizininAdi.Length diyerek alabiliriz. Yukarıdaki örneği 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}. Elemanının Değeri = {1} ", i, integerDizi[i]);
}



Yukarıdaki kodu çalıştırdığınızda bir önceki örneğimizle aynı sonucu üretir.

Dizilerle ilgili dersimize devam etmeden önce diziler için kullandığımız foreach döngüsüne bakalım.

 

foreach Döngüsü

Diziler ve koleksiyonların elemanlarına erişmek için basit ve kullanışlı bir döngü çeşidi. Döngüler dersinde bahsetmedik çünkü dizileri anlatmadan foreach döngüsünü anlamaya çalışmak boşuna olacaktı. foreach döngüsünün yapısı aşağıdaki gibidir.

 

foreach(<dizi içindeki elemaların veri tipi> <değişken ismi> in <diziveyaKoleksiyonadi>)
{
<Kod blogumu>
}

Yukarıda for döngüsü ile yaptığımız örneğimiz foreach döngüsü ile yapalım.

 

  foreach (int diziElemanı in integerDizi)
{
Console.WriteLine("Elemanın Değeri = {0} ", diziElemanı);
}


Çok daha basit ve kullanışlı olduğunu görebilirsiniz.


• Foreach döngüsü kullanırken ulaştığımız dizi elemanları readonly dir. Yani yukarıdaki örnek üzerinde anlatacak olursak foreach döngüsü içinde diziElemanı adlı integer değişkenin içerdiği değeri değiştiremezsiniz. Eğer değiştirmeye kalkarsanız Cannot assign to 'diziElemanı' because it is a 'foreach iteration variable' hatası alırsınız. Eğer yazdığınız uygulamada dizi elemanlarını döngü içinde değiştirmek istiyorsanız for döngüsü kullanmanızı tavsiye ederim.
• String tipindeki bir değişkende char tipindeki verilerin birleşmesinden oluşmuş bir dizidir. Öyleyse foreach döngüsü kullanarak aşağıdaki gibi bir stringin elemanlarını erişebilirsiniz.

 

string metin = "Yazılım Mutfağı";
foreach (char harf in metin)
{
Console.WriteLine("Harf = {0} ", harf);
}

 

Dizilerin Tanımlanması ve Değer Atamaları

 

Tek boyutlu bir dizinin nasıl tanımlandığını ve nasıl değer atayacağımızı yukarda anlatmıştık. Şimdi Tek boyutlu dizi dahil tüm dizi tiplerini nasıl tanımlayacağımıza bakalım.

 

//Dizinin Oluşturulması
int[] intDizi = new int[5];

//Dizi elemanlarına değer ataması
intDizi[0] = 36; //dizinin ilk elemanına 36 değeri atandı
intDizi[2] = 26; //dizinin ikinci elemanına 26 değeri atandı
intDizi[4] = 32; //dizinin son elemanına 32 değeri atandı

 

Örnek 1: Dizi kullanarak not ortalamasını hesaplama:

int[] notlar=new int[5];
notlar[0]=45;
notlar[1]=85;
notlar[2]=30;
notlar[3]=45;
notlar[4] = 10;
int toplam = 0;

 

//int ortalama=(notlar[0]+notlar[1]+notlar[2]+notlar[3]+notlar[4])/5;

for (int i = 0; i < 5; i++)
{
toplam=toplam+notlar[i];
}


int ortalama = toplam / 5;
Label1.Text = ortalama.ToString();

 

Örnek 2: Diziye rastgele değer atama ve dizi elemanlarını listbox'a ekleme:

int[] dizi=new int[10]; //diziyi tanımladım
Random rastgele_sayi = new Random();
for (int i = 0; i < 10; i++)
{
dizi[i] = rastgele_sayi.Next(1,100);//diziye değer aktardım
}

for (int i = 0; i < 10; i++)
{
ListBox1.Items.Add(dizi[i].ToString());
}

 

Örnek 3:Diziye rastgele sayı ekleme,diziyi büyükten küçüğe ve küçükten büyüğe sıralama:

int[] dizi=new int[5];//1.tanımlama şekli
int[] dizi2 = { 1, 2, 3, 4, 5, 6 };//2.tanımlama şekli
Random sayi=new Random();
for (int i = 0; i < 5; i++)
{
dizi[i] = sayi.Next(1,20);
}
for (int i = 0; i < 5; i++)
{
ListBox1.Items.Add(dizi[i].ToString());
}

Array.Sort(dizi);
for (int i = 0; i < 5; i++)
{
ListBox2.Items.Add(dizi[i].ToString());
}
Array.Reverse(dizi);
for (int i = 0; i < 5; i++)
{
ListBox3.Items.Add(dizi[i].ToString());
}

 

Örnek 4:listbox'a dizinin elemanlarını aktarma

string[] gunler=new string[7];
gunler[0]="pazartesi";
gunler[1]="salı";
gunler[2]="çarşamba";
gunler[3]="perşembe";
gunler[4]="cuma";
gunler[5]="cumartesi";
gunler[6]="pazar";
for (int i = 0; i < 7; i++)
{
ListBox1.Items.Add(gunler[i]);
}


 

 

Tek Boyutlu Dizilerde Kullanılan Özellik ve Metotlar


Length Özelliği: Dizideki eleman sayısını verir. Bu özelliğin kullanımı diziadi.Length şeklindedir.

int[] sayilar = new int[5] { 12, 75, 1, -5, 88 };
sayilar.Length
==>bu kod bize sayilar dizisinin eleman sayısını vermektedir.


Rank Özelliği: Dizideki boyut sayısını verir. Bu özelliğin kullanımı diziadi.Rank şeklindedir.


Max Metodu: Dizideki en büyük sayıyı verir. Bu metodun kullanımı diziadi.Max() şeklindedir.

sayilar.Max() ==>bu kod bize sayilar dizisinin en büyük elemanını vermektedir.


Min Metodu: Dizideki en küçük sayıyı verir. Bu metodun kullanımı diziadi.Min() şeklindedir.

sayilar.Min() ==>bu kod bize sayilar dizisinin en küçük elemanını vermektedir.


Sum Metodu: Dizideki sayıların toplamını verir. Bu metodun kullanımı diziadi.Sum() şeklindedir.

sayilar.Sum() ==>bu kod bize sayilar dizisinin elemanlarını toplamını vermektedir.


Average Metodu: Dizideki sayıların ortalamasını verir. Bu metodun kullanımı diziadi.Average()
şeklindedir.

sayilar.Average() ==>bu kod bize sayilar dizisinin elemanlarını ortalamasını vermektedir.


First Metodu: Dizideki ilk elemanı verir. Bu metodun kullanımı diziadi.First() şeklindedir.

sayilar.First() ==>bu kod bize sayilar dizisinin ilk elemanını vermektedir.


Last Metodu: Dizideki son elemanı verir. Bu metodun kullanımı diziadi.Last() şeklindedir.

sayilar.Last() ==>bu kod bize sayilar dizisinin son elemanını vermektedir.

 

Örnek Uygulama 1: Global türde bir dizi değişkeni oluşturalım.Bu dizinin elemanlarını ekranda mesaj olarak gösteren bir buton oluşturalım.Daha sonra 2 bir buton lar yukarıda anlatılan metotları uygulayarak sonuçları mesaj olarak ekranda gösterelim.

Form görünümü aşağıdaki resimdeki gibidir.

Uygulama Çözümü:

Form nesnesini çift tıklayarak kod ekranını açalım ve public partical class Form1:Form komutunun {} işaretleri arasında 5 elemanlı dizimizi oluşturalım.Bu tanımlama sayesinde buton içerisinde diziye erşim sağlamış olmaktayız.Bu şekilde tanımladığınız değişkenler global olarak nitelendirilmektedir.

Dizinin Elemanlarını Ver butonuna tıklayarak kod satırına gidelim.Dizinin elemanlarını MessageBox.Show() komutu ile ekranda gösterelim.Bütün elemanları göstereceğimizden foreach döngüsünü kullandık.

Programı çalıştıralım ve bu butonu tıklayarak sonucu kontrol edelim.

 

Dizi Metotlarını Uygula butonuna tıklayarak kod satırına gidelim.Metotları MessageBox.Show() komutu ile ekranda gösterelim.Bütün elemanları göstereceğimizden foreach döngüsünü kullandık.

Metotları uygulayarak sonuçları kullanıcıya ulaştırmış olduk.

 

 

Örnek Uygulama 2: Aşağıdaki verilen formun tasarımını yapınız.Ekle butonuna basıldığında ad-soyad isimler dizisine, notu'da notlar dizisine kaydedilecektir.Bu şekilde 6 tane kayıt alınacaktır. 6 kişini kaydı yapıldıktan sonra ekle butonu,ad-soyad textbox'ı ve not textbox'ı pasif konuma geçerek başka kayıtlar eklenmesinin önüne geçilecektir.Veri içerisinde ara bölümü içerisinde istenilenleri karşısında bulunan labelde gösteriniz. İstenilen kodlamaları yaparak uygulamayı bitiriniz.

 

Uygulama Çözümü:

Global olarak isimler ve notlar dizilerini 6 elemanlı olacak şekilde global olarak tanımladık.

6 kayıt yaptıktan sonra kayıt işlemini sonlandırmak için sayaç değişkenini kullandık.Her eklemede bu saysacın değerini bir artırıyoruz.

if satırı ile kayıt işlemi bittiyse textbox ve butonu pasif hale getiriyoruz.

Listele butonuna basılınca dizilerdeki değerler listbox nesnesinde listelensin.

for döngüsüyle listbox'a verileri ekledik.

Bu veriler içerisinde en yüksek notu,en düşük notu ve notların ortalamasını hesaplayalım ve labelde sonuçları gösterelim.

 

 

 

 

Çok Boyutlu Diziler (Multidimensional Array)

 

Çok boyutlu bir dizi ‘dizinin dizisi’ şeklinde tabir edilebilir. Her elemanı başka bir dizi olan diziler çok boyutlu bir dizidir. Çok boyutlu bir dizi veritabanında her satırında birden fazla kolon bulunan bir tabloya benzetilebilir. Eğer her satırda bulunan her kolon kendi içinde başka bir dizi barındırmıyorsa bu tür dizilere 2 boyutlu diğer bir değişle çok boyutlu diziler denir. Eğer her kolonda kendi içinde başka bir dizi barındırıyorsa bu tür dizilere n boyutlu diziler denir. Burda n ifadesi dizinin derinliğini ifade eder.

 

Çok boyutlu diziler iki çeşittir;
•Düzenli Diziler: Her satırı aynı sayıda kolon barındıran diziler.
•Düzensiz Diziler (Jagged Array) : Her satırı farklı sayıda kolon barındıran diziler.

 

Çok boyutlu dizileri şekillerle anlatmaya çalışalım.,

Not: Dizilerin ilk elemanının indeks numarasının 0 olduğunu unutmayın.

diziler

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Çok Boyutlu Diziler:

 

//Dizinin Oluşturulması
int[,] intCokBDizi = new int[2, 3];


//Dizi elemanlarına değer ataması
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 Elemanlarına Döngü İle Ulaşmak

for döngüsü:

 

//Dizi elemanlarını 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 değeri : {2}",row,col,intCokBDizi[row,col]);
}
}

 


Ekran Çıktısı:

Dizinin 0,0 indeksindeki değeri : 23
Dizinin 0,1 indeksindeki değeri : 25
Dizinin 0,2 indeksindeki değeri : 33
Dizinin 1,0 indeksindeki değeri : 41
Dizinin 1,1 indeksindeki değeri : 29
Dizinin 1,2 indeksindeki değeri : 93

 

Dizi Metotları

GetLength() fonksiyonu dizinin belirtilen boyutundaki eleman sayısını verir. Yukarıdaki örnekte görüldüğü gibi parametre olarak 0 veya 1 veriyoruz. 0 dizinin birinci boyutundaki eleman sayısı yani satır sayısı, 1 verdiğimizde ise dizinin 2.boyutu yani kolon sayısını verir.

Dizilerin Length özelliği dizi içinde bulunan toplam eleman sayısını verir. Örneğin yukarıdaki örnekte tanımladığımız dizi için intCokBDizi.Length sonuç olarak 6 döndürür.

 

2 boyutlu Düzensiz dizilerde foreach döngüsü kullanamayız. foreach döngüsünü sadece tüm elemanlara erişmek için kullanabiliriz. Eğer her boyuttaki elemana farklı erişmek istiyorsak for döngüsü kullanmamız gerekiyor. foreach döngüsü ile düzensiz 2 boyutlu dizilerin elemanlarına erişebiliriz. Önce düzensiz dizilerin nasıl tanımlandığına bakalım sonrada foreach döngüsü ile elemanlarına nasıl erişeceğimize göz atalım.

 

Yayın Tarihi:15.03.2013
Değişiklik:15.02.2022

Web hosting by Somee.com