Upload
others
View
20
Download
0
Embed Size (px)
Citation preview
Diziler (Arrays)Diziler (Arrays)
1Programlama Dilleri 3
Dizi KavramıDizi Kavramı
Bellekte ard arda yer alan aynı türden nesnelery ykümesine dizi (array) denilir. Bir dizi içerisindekibütün elemanlara aynı isimle ulaşılır. Yanidizideki bütün elemanların isimleri ortaktır.Elemanlar arasındaki ayırt edici özellik,bellekteki yeridirbellekteki yeridir.
2Programlama Dilleri 3
5 elemanlı bir tamsayı dizisi bellekteaşağıdaki gibi yerleştirilir.
1020 dizi[0]
dizi[]dizi[] Dizinin İsmiİndeks
‐20
5
0
dizi[1]
dizi[2]
dizi[3]
dizi[3]0
16587
dizi[3]
dizi[4] Dizi indeks operatörü
3Programlama Dilleri 3
C#’da diziler ayrı bir tür olarakC# da diziler ayrı bir tür olaraktasarlanmıştır. Bütün diziler System.Arraysınıfından türetilmiştir Bir dizisınıfından türetilmiştir. Bir dizitanımlandığında Array sınıfı türünden birnesne tanımlanmış olurnesne tanımlanmış olur.
Dizinin sınırlarını aşan bir indeksDizinin sınırlarını aşan bir indekskullandığımızda derleme hatası oluşmaz,ancak çalışma zamanında hata oluşur.ancak çalışma zamanında hata oluşur.
4Programlama Dilleri 3
Dizi TanımlamaDizi Tanımlama2 türlü tanımlama yapılabilir :
int [ ] dizi = new int[19]int [ ] dizi new int[19]
veya
int [ ] dizi;
dizi=new int [19];dizi new int [19];
5Programlama Dilleri 3
new anahtar sözcüğü ile dizinin hernew anahtar sözcüğü ile, dizinin herelemanına temel veri türleri için varsayılandeğer, ilk değer olarak verilmektedir. Bu ilkğ , ğdeğer; referans türleri için null, nümeriktürler için 0, bool türü için ise false’tur.
6Programlama Dilleri 3
Dizileri aşağıdaki gibi de tanımlamakDizileri aşağıdaki gibi de tanımlamakmümkündür:
string[ ] dizi1={“Bilgisayar”“Mühendisliği”“Bölümü”};string[ ] dizi1={ Bilgisayar , Mühendisliği , Bölümü };
int [ ]={5,9,12,56,23};
fl [ ] d { f f f f f}float [ ] dizi3={8f,39f,324f,23f,2f};
7Programlama Dilleri 3
Dizilerin boyutu C ve C++ dillerinde derlemesırasında bilinmek zorundadır. Böyleceyderleyici, dizi için bellekte dizinin boyutunagöre yer ayırmaktadır. Ancak C#’da dizilerinboyutlarını çalışma zamanında belirtmekmümkündür.
8Programlama Dilleri 3
Aşağıdaki kod parçasını bilgisayarınızda deneyiniz:
class Programclass Program{{{{
static void Main(string[] args)static void Main(string[] args){{
Console.Write("Dizinin boyutunu giriniz=");Console.Write("Dizinin boyutunu giriniz=");int boyut = Convert ToInt32(Console ReadLine());int boyut = Convert ToInt32(Console ReadLine());int boyut = Convert.ToInt32(Console.ReadLine());int boyut = Convert.ToInt32(Console.ReadLine());bool [] dizi = new bool [boyut];bool [] dizi = new bool [boyut];for (int i = 0; i < boyut; i++)for (int i = 0; i < boyut; i++)
Console.WriteLine(dizi[i]);Console.WriteLine(dizi[i]);Console.ReadLine();Console.ReadLine();
}}}}
Bir dizinin boyutu bir kez belirlendikten sonra artıkdeğiştirilemez Yani dizinin boyutunu dinamik olarakdeğiştirilemez. Yani dizinin boyutunu dinamik olarakdeğiştirmemiz mümkün değildir.
9Programlama Dilleri 3
System.Random SınıfıSystem.Random SınıfıRastgele sayı üretmek için .NET Framework sınıfkütüphanesindeki System.Random sınıfı kullanılır.Rastgele sayı üretmek için öncelikle Random sınıfıtüründen bir nesne oluşturmak gerekir. Örn:ş g
R d d R d ()Random rnd = new Random();
10Programlama Dilleri 3
rnd nesnesi oluşturulduktan sonra artık bu nesnenint tl i bili i Ömetotlarına erişebiliriz. Örn:
int rastgelesayi=rnd.Next (10,20);
int rastgelesayi=rnd Next(50);int rastgelesayi rnd.Next(50);
int rastgelesayi=rnd.Next;
double rastgelesayi=rnd.NextDouble();
11Programlama Dilleri 3
using System;using System;
class dizi 3class dizi 3class dizi_3class dizi_3{{
static void Main()static void Main(){{
RandomRandom r = newr = new RandomRandom();();RandomRandom r = new r = new RandomRandom();();
int[] dizi = new int[20];int[] dizi = new int[20];char[] chr = new char[20];char[] chr = new char[20];
for (int i = 0; i < 20; i++)for (int i = 0; i < 20; i++){{
dizi[i] = r.dizi[i] = r.NextNext(1, 51);(1, 51);chr[i] = (char)rchr[i] = (char)r NextNext(20 126);(20 126);chr[i] = (char)r.chr[i] = (char)r.NextNext(20, 126);(20, 126);
}}for (int i = 0; i < 20; i++)for (int i = 0; i < 20; i++){{
Console Write("{0 2} değer {1 2}Console Write("{0 2} değer {1 2} --> " i dizi[i]);> " i dizi[i]);Console.Write( {0,2}. değer {1,2} Console.Write( {0,2}. değer {1,2} --> , i, dizi[i]);> , i, dizi[i]);for (int j = 0; j < dizi[i]; j++)for (int j = 0; j < dizi[i]; j++)
Console.Write(chr[i]);Console.Write(chr[i]);Console.WriteLine();Console.WriteLine();
}}} } }}
}}12Programlama Dilleri 3
Çok Boyutlu Diziler(M ltidi i l A )(Multidimensional Arrays)
İki türlü çok boyutlu dizi bulunur Herİki türlü çok boyutlu dizi bulunur. Herboyutta eşit miktarda elemanın olduğudüzenli diziler (matrisler) ve her boyutta( ) yfarklı sayıda eleman barındıran düzensizdiziler(jagged arrays). Aslında düzensizdiziler elemanları da dizi olan dizilerdir.
Çok boyutlu dizi tanımlaması yaparken “[ , , ]” şeklinde yazılır.
13Programlama Dilleri 3
Matris DizileriMatris Dizileri
int [,] dizi = {{1,2},{3,4},{5,6}};Şeklinde tanımlanan bir 3x2’lik dizinin elemanları:
di i[0 0] 1dizi[0,0]=1dizi[0,1]=2dizi[1,0]=3
dizi
[0,0] [0,1][ , ]
dizi[1,1]=4dizi[2,0]=5
[1,0] [1,1]
[2,0] [2,1]
dizi[2,1]=6
14Programlama Dilleri 3
Aşağıdaki programı bilgisayarınızda deneyiniz.
using System;using System;
class dizi_4class dizi_4{{
static void Main()static void Main(){{
int[,] dizi = { { 1, 2 }, { 3, 4 }, { 5, 6 } };int[,] dizi = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
for (int i=0; i<3; i++)for (int i=0; i<3; i++)for (int j =0; j < 2; j++)for (int j =0; j < 2; j++){{
Console.WriteLine(dizi[i, j]);Console.WriteLine(dizi[i, j]);}}
}}}}
15Programlama Dilleri 3
Düzensiz Diziler(Jagged Arrays)Düzensiz Diziler(Jagged Arrays)
Dizilerin elemanları da farklı diziler olabilir. BuDizilerin elemanları da farklı diziler olabilir. Budurumda tanımlanan dizinin birbirinden farklıboyutlarda alt elemanları olabilir. Bu gibiyapılara düzensiz diziler ismi veriliryapılara düzensiz diziler ismi verilir.
Bu diziler şu şekilde tanımlanırlar:ş ş
int[][] dizi new int[3][];dizi[0] = new int[2];dizi[0] = new int[2];dizi[1] = new int[4];dizi[2] = new int[3];
16Programlama Dilleri 3
Düzensiz tanımlanan bir dizinin yapısı şuDüzensiz tanımlanan bir dizinin yapısı şu şekildedir:
di idizi[0][0] dizi[0][1]
dizidizi[0]di i[1] dizi[1][0] dizi[1][1]
dizi[2][0] dizi[2][1]
dizi[1][2] dizi[1][3]
dizi[2][2]
dizi[1]dizi[2]
Düzensiz dizilerde eleman sayısı sabit olmadığı için dizi elemanlarını taramak için Array sınıfınıniçin dizi elemanlarını taramak için Array sınıfının metotları ve ya özellikleri kullanılır. Length özelliğibir dizinin eleman sayısını verir.
17Programlama Dilleri 3
using System;
class dizi_5{{
static void Main(){
int[][] dizi = new int[3][];
dizi[0] = new int[] { 1, 2 };dizi[1] = new int[] { 3, 4, 5, 6, 7 };dizi[2] = new int[] { 8, 9, 0 };dizi[2] new int[] { 8, 9, 0 };
for (int i = 0; i < dizi.GetLength(0); i++)for (int j = 0; j < dizi[i].GetLength(0); j++)
l i i ( di i[{0}][{1}] {2} i j di i[i][j])Console.WriteLine("dizi[{0}][{1}]={2}",i,j,dizi[i][j]);}
}
18Programlama Dilleri 3
using System;
class dizi 6class dizi_6{
static void Main(){
int[][] dizi = new int [3][];
dizi[0] = new int[] {1,2};dizi[1] = new int[] {3 4 5 6 7};dizi[1] = new int[] {3,4,5,6,7};dizi[2] = new int[] {8,9,0};
foreach (int[] boyut in dizi){
foreach (int eleman in boyut){
Console.Write("{0,3}", eleman);Console.Write( {0,3} , eleman);}Console.WriteLine();
}}}
}19Programlama Dilleri 3
System.Array SınıfıSystem.Array Sınıfı
Dizi nesneleri System Array sınıfındanDizi nesneleri System.Array sınıfındantüremişlerdir. Dolayısıyla bu sınıfınb ll k lbazı özellik ve metotlarınıbünyelerinde barındırırlar.
20Programlama Dilleri 3
Özellikler:
IsFixedSize Dizinin eleman sayısının sabit olup
Özellikler:
olmadığını verir. (Boolean)
IsReadOnly Dizideki elemanların sadece okunabilir yolup olmadığını verir. (Boolean)
Length Dizideki eleman sayısını verir.Length y
Rank Dizinin boyutunu verir.
Programlama Dilleri 3 21
Metotlar:BinarSearch Tek boyutlu dizide binary search algoritmasına göre
arama yapar.
Clear Dizinin elemanlarını varsayılan değere çeker.Clear Dizinin elemanlarını varsayılan değere çeker.
Clone Dizinin bit bit kopyasını çıkarır.
Copy Dizinin bir bölümünü başka bir diziye kopyalar.
CopyTo Bir dizinin belirlenen bir kısmını başka bir diziye kopyalar.
GetLength Dizideki eleman sayısını verir.GetLength y
GetValue Dizideki ilgili eleman değerini verir.
IndexOf Dizi içindeki bir değerin ilk görüldüğü indeksi verir.
Reverse Diziyi tersine çevirir.
SetValue Bir dizinin bir elemanına değer atar.
Sort Bir boyutlu dizilerde sıralama yapar.
Programlama Dilleri 3 22
Sort Bir boyutlu dizilerde sıralama yapar.
CreateInstance Yeni bir dizi nesnesi oluşturur.
CreateInstance( )CreateInstance( )CreateInstance metodu ile aşağıdaki gibi dizi nesnesioluşturulabilir:ş
Array dizi=Array.CreateInstance(typeof(int),5);
İlk parametre her zaman Type türünden olmalıdır.Yukarıdaki gibi bir kullanımda, typeof() operatörüg , yp () pyardımıyla int türünün type sınıfındaki karşılığı elde edilmişolmaktadır. Örn:
CreateInstance(Type,int,int,int);
3 boyutlu bir dizi oluşturulmakta.
Programlama Dilleri 3 23
CreateInstance( )CreateInstance( )using System;
class dizi 6class dizi_6{
static void Main(){
A di i A C t I t (t f(i t) 5 4 3)Array dizi = Array.CreateInstance(typeof(int), 5, 4, 3);Random r = new Random();
for (int i=0; i< dizi.GetLength(0); i++)for (int j=0; j< dizi.GetLength(1); j++)
for (int k = 0; k < dizi.GetLength(2); k++){
dizi.SetValue(r.Next(10, 100), i, j, k);jConsole.WriteLine("dizi[{0},{1},{2}]={3,3}",
i,j,k,dizi.GetValue(i,j,k));}
}}}
24Programlama Dilleri 3
CopyTo ( )CopyTo ( )CopyTo metodu ile bir dizinin tamamı, başka bir dizininistenilen yerine kopyalanabilir. Örn:y py
int[ ] dizi1= {1 2 3 4};int[ ] dizi1= {1,2,3,4};
int dizi2=new int[10];
dizi1.CopyTo(dizi2,3);py ( , );
Programlama Dilleri 3 25
Aynı işlem Copy() metodu kullanılarak da gerçekleştirilebilirAynı işlem Copy() metodu kullanılarak da gerçekleştirilebilir.
Copy(Array dizi1,Array dizi2,int uzunluk);
Bu şekildeki bir kullanım, uzunluk kadar elemanı dizi1’dendizi2’ye kopyalar. Kopyalama işlemi 0. indekten başlar.
Copy(Array dizi1,int x,Array dizi2,int y,int uzunluk);
dizi1’in x. İndeksinden sonraki uzunluk kadar elemanıdizi2’nin y. İndeksinden sonrasına kopyalar.
Programlama Dilleri 3 26
CopyTo ( )CopyTo ( )using System;
class dizi_7{{
static void Main(){
int[] dizi1 = { 1, 2, 3, 4, 5, 6, 7 };i t[] di i2 i t[10]int[] dizi2 = new int[10];int[] dizi3 = new int[10];
dizi1.CopyTo(dizi2, 2);f h (i t i i di i2)foreach (int i in dizi2)
Console.Write(i);
Console.WriteLine();
Array.Copy(dizi1, 2, dizi3, 5, 3);
foreach (int i in dizi3)Console Write(i);Console.Write(i);
}}
27Programlama Dilleri 3
Array.Sort ( )Array.Sort ( )Sort() metodunun birçok kullanım biçimi vardır. Temeldeaşağıdaki şekilde kullanımı yaygındır.Örn:ş ğ ş y yg
Array Sort(Array);Array.Sort(Array);
Programlama Dilleri 3 28
Array.Sort ( )Array.Sort ( )using System;
class dizi_8{{
static void Main(){
string[] dizi = { "Zeynep", "Fatma", "Ali", "Yılmaz", "Gökhan" "Osman" "Feride" };Gökhan , Osman , Feride };
Console.WriteLine("Dizinin Elemanları\n==================");foreach (string s in dizi)
Console WriteLine(s);Console.WriteLine(s);
Array.Sort(dizi);Console.WriteLine();
Console.WriteLine("Sıralanmış Dizi\n===============");foreach (string s in dizi)
Console.WriteLine(s);
}}
29Programlama Dilleri 3
Array.BinarySearchArray.BinarySearchBinarySearch metodunun iki önemli kullanım biçimi vardırÖrn:
BinarySearch(Array dizi, object nesne);
Bu yapı, dizi içerisinde nesneyi arar; eğer aranan nesnebulunursa bulunduğu index ile geri dönülür. Eğerbulunamazsa negatif bir sayıyla geri dönülürbulunamazsa negatif bir sayıyla geri dönülür.
BinarySearch(Array dizi, int baslangic, int uzunluk, object nesne);
Bu yapı ise, nesneyi başlangic indeksinden itibaren uzunlukkadar eleman içerisinde arar.
Programlama Dilleri 3 30
Array.BinarySearchArray.BinarySearchusing System;
class dizi_9{{
static void Main(){
string[] dizi = { "Zeynep", "Fatma", "Ali", "Yılmaz", "Gökhan" "Osman" "Feride" };Gökhan , Osman , Feride };
Console.Write("Aranacak İsmi Giriniz :");string isim = Console.ReadLine();
Array.Sort(dizi);int indeks = Array.BinarySearch(dizi, isim);
if (indeks < 0)if (indeks < 0)Console.WriteLine("Aranan isim dizide bulunamadı!");
elseConsole.WriteLine("Aranan isim dizinin {0}. elemanında
bulundu...",indeks);, );}
}31Programlama Dilleri 3
Diğer İşlemlerDiğer İşlemlerClear() metodu, belirtilen indis aralığındaki elemanlarısıfırlarsıfırlar.
Array.Clear(dizi,2,5);
Reverse() metodu, dizinin tümünü yada belirtilen indisaralığındaki elemanları ters çevirir.
Array.Reverse(dizi); veya
Array.Reverse (dizi,1,3);y ( , , );
Alttaki gibi bir kullanımda ise,1. elemandan itibaren ilk 3
Programlama Dilleri 3 32
elemanı ters çevirir.