Array (Diziler)
Array Aynı tipten çok sayıda değişken topluluğudur. Birden fazla aynı tipteki değerle işlem yapmayı kolaylaştırır. X Y Score1 Score2 40 56 Grade 40 56 80 (0) (1) (2)... (13) Array tanımlama: 1. Array adını ve tipini belirtme 2.Array değişkenlerini nesne olarak yaratılması 3. Her bir değişkene, indeks numarası ile değer atama
Array Yaratma 1. Tip ve adını belirtme: int[] ogrencino; ogrencino 2. Değişkenlerini nesne olarak yaratılması ogrencino = new int[5]; // Tüm array ler 0 tabanlıdır. ogrencino 0 ogrencino[0] 0 ogrencino[1] 0 ogrencino[2] 0 ogrencino[3] 0 ogrencino[4] 3. İndeks numaraları ile değer atama ve kullanma ogrencino[0] = 45; ogrencino[1] = 23; ogrencino[2] = 157; ogrencino[3] = 544; ogrencino[4] = 651; ogrencino 45 ogrencino[0] 23 ogrencino[1] 157 ogrencino[2] 544 ogrencino[3] 651 ogrencino[4]
Array Kullanma Kullanma int[] ogrencino; ogrencino = new int[5]; ogrencino[0] = 45; ogrencino[1] = 23; ogrencino[2] = 157; ogrencino[3] = 544; ogrencino[4] = 651; MessageBox.Show(ogrenciNo[2]); int BaskaDegisken=0; BaskaDegisken = ogrencino[2] * 2; // BaskaDegisken (157 x 2) 314 olur Aşamalar birleştirilebilir: int[] ogrencino; ogrencino = new int[5]; int[] ogrencino = new int[5]; int[] ogrencino = new int[5] 45,23,157,544,651;
Array Örnekleri Her türlü değişken tipi için array tanımlanabilir int[] ogrencino = new int[5] 45,23,157,544,651; short[] sirano; double[] aylikucretler = new double[50]; string[] ad=new string[3] "halil","mehmet","mustafa"; string[] ad1 = new string[] "halil", "mehmet", "mustafa" ; lbsonuc.text = ""; lbsonuc.text = lbsonuc.text + " " + ogrencino[0]; lbsonuc.text = lbsonuc.text + " " + ogrencino[1]; lbsonuc.text = lbsonuc.text + " " + ogrencino[2]; lbsonuc.text = lbsonuc.text + " " + ogrencino[3]; lbsonuc.text = lbsonuc.text + " " + ogrencino[4]; for (int counter = 0; counter <= 4; counter++) lbsonuc.text = lbsonuc.text + " " + ogrencino[counter].tostring();
Array Uzunluğu Uzunluk (Length),array deki değişken sayısıdır int[] ogrencino = new int[5] 45,23,157,544,651; //array in uzunluğu 5 dir // 0..4 double[] rakamlar = new double[40]; // uzunluk 40 dır. // 0..39 Döngüde Length kullanmak for (int counter = 0; counter < ogrencino.length; counter++) lbsonuc.text = lbsonuc.text + ogrencino[counter].tostring();
Array için özel Döngü: foreach() foreach(), array in her bir elemanı için döngü bloğunu tekrarlar. for (int counter = 0; counter < ogrencino.length; counter++) lbsonuc.text = lbsonuc.text + ogrencino[counter].tostring(); yerine, foreach (int deger in ogrencino) lbsonuc.text +=deger.tostring(); kullanabilirsiniz.
Array lerde Boyut Tek boyutlu (One-Dimension) Tek Boyutlu int[] Nokta = new int[10]; Nokta[0] = 10; Nokta[9] = 100; Çok boyutlu (Multi-Dimension) 2 Boyutlu int[,] Nokta = new int[3, 10]; Nokta[0, 0] = 10; Nokta[1, 0] = 5; Nokta[2, 0] = 5; Nokta[0, 9] = 100; Nokta[1, 9] = 35; Nokta[2, 9] = 89; 10 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 35 0 0 0 0 0 89 10 0 0 0 3 Boyutlu int[,,] Nokta = new int[10, 2,5]; Nokta[0,0,0] = 10; Nokta[0,0,1] = 5; Nokta[0,0,2] = 6; Nokta[0,0,3] = 80; Nokta[0,0,4] = 5000; Nokta[0,1,0] = 20; Nokta[0,1,1] = 23; Nokta[0,1,2] = 30; Nokta[0,1,3] = 50; Nokta[0,1,4] = 75; 0 0 0 0 0 100
Çok Boyutlu Array Uzunluğu GetLength() ve Döngü içinde kullanma bool Negatifmi = false; for (int boyut0=0; boyut0 < Nokta.GetLength(0); boyut0++) if (Nokta[boyut0, 0] < 0) Negatifmi = true; if (Nokta[boyut0, 1] < 0) Negatifmi = true; if (Nokta[boyut0, 2] < 0) Negatifmi = true; for (int boyut0=0; boyut0 < Nokta.GetLength(0); boyut0++) for (int boyut1=0; boyut1 < Nokta.GetLength(1); boyut1++) if (Nokta[boyut0, boyut1] < 0) Negatifmi = true;
Uygulama 10 elamanlı 15, 24, 57, 89, 41, 25, 24, 12, 90, 85 dizisinin elemanlarının en büyüğünü, en küçüğünü, ortalamasını ve standart sapmasını bulan programı kodlayınız. Standart sapmanın formülü
Uygulama double[] dizi = 15, 24, 57, 89, 41, 25, 24, 12, 90, 85 ; double enb = -90000000, enk = 90000000, ort, toplam = 0, stdsapma = 0; for (int i = 0; i < dizi.length; i++) if (dizi[i] > enb) enb = dizi[i]; //en büyük elemanı bulmak için if (dizi[i] < enk) enk = dizi[i]; // en kücük elemanı bulmak icin toplam += dizi[i]; //elemanların toplamı için ort = toplam / dizi.length; for (int i = 0; i < dizi.length; i++) stdsapma += Math.Pow((dizi[i] - ort), 2); stdsapma = Math.Sqrt((stdsapma / dizi.length)); MessageBox.Show("enbüyük eleman = " + enb.tostring() + "\nenkücük eleman " + enk.tostring() + "\nortalama =" + ort.tostring() + "\nstandartsapma = " + stdsapma.tostring());
Uygulama (Fibonacci) Textbox dan girilen değere göre Fibonacci serisindeki sayıyı veren programı kodlayınız.
Uygulama (Fibonacci) int boyut = Convert.ToInt32(textBox1.Text); if (boyut > 2) int[] fibon = new int[boyut]; fibon[0] = 0; fibon[1] = 1; for (int i = 2; i < fibon.length; i++) fibon[i] = fibon[i - 1] + fibon[i - 2]; MessageBox.Show("Serideki " + boyut.tostring() + " eleman = " + fibon[boyut - 1].ToString()); else MessageBox.Show("UYARI!! 2'den Büyük bir tamsayı giriniz!!");
Uygulama (Matris Çarpımı) 1 3 0 1 2 1 A Örnek 3 2 5 1 2 1 B 12 1 15 5 B A C Form üzerine 1 buton ve 1 listbox ekleyin. Butona Basıldığında Sonuç Matrisi ListBox da görülecektir.
Uygulama (Matris Çarpımı) int[,] A = new int[2, 3] 1,2,1,0,3,-1; int[,] B = new int[3, 2] 1,2,1,5,2,3; int[,] C = new int[a.getlength(0), B.GetLength(1)]; string satir = ""; for (int i = 0; i < A.GetLength(0); i++) for (int j = 0; j < B.GetLength(1); j++) for (int k = 0; k < A.GetLength(1); k++) C[i, j] += A[i, k] * B[k, j]; satir += C[i, j].tostring()+" "; if (j == B.GetLength(1) - 1) listbox1.items.add(satir); satir = "";
C# da Array Sınıfı ve İşlemler
Array Üzerinde İşlemler ArrayAdı.Rank Kaç Boyut var? ArrayAdı.GetLength(0) 0 ıncı boyutta kaç eleman var? string[] ad = new string[] "hasan", "ayşe", "duygu", "mert", "salih" ; MessageBox.Show(ad.GetLength(0).ToString()); MessageBox.Show(ad.Rank.ToString()); string[,] fullname = new string[5, 2]; fullname[0, 0] = "hasan"; fullname[0, 1] = "tahsin"; fullname[1, 0] = "ayşe"; fullname[1, 1] = "parman"; fullname[2, 0] = "duygu"; fullname[2, 1] = "dikmen"; fullname[3, 0] = "mert"; fullname[3, 1] = "karlıkuş"; fullname[4, 0] = "salih"; fullname[4, 1] = "mender"; int BoyutSayisi = fullname.rank; MessageBox.Show(BoyutSayisi.ToString()); ad.getlength(1)?
Array Üzerinde İşlemler Arr1.Rank(); Arr1.GetLength(0); System.Array.Clear(Arr1, 0, 5); System.Array.Sort(Arr1); System.Array.Reverse(Arr1); System.Array.Resize(Arr1, 7); System.Array.Copy(Arr1,0, Arr2, 0, 5); System.Array.IndexOf(Arr1, Ankara );
System.Array.Clear(Arr1, X, U); Array deki elemanları tiplerine göre temizler X, kaçıncı elemandan itibaren temizleneceğini söyler U, kaç elemanın temizleneceğini (uzunluk) söyler Sayısal tipler 0 Referans tipleri (string vb) null Boolean tipi false string[,] fullname = new string[5, 2]; fullname[0, 0] null fullname[0, 0] = "hasan"; fullname[0, 1] null fullname[0, 1] = "tahsin"; fullname[1, 0] null fullname[1, 0] = "ayşe"; fullname[1, 1] null fullname[1, 1] = "parman"; fullname[2, 0] null fullname[2, 0] = "duygu"; fullname[2, 1] null fullname[2, 1] = "dikmen"; fullname[3, 0] null fullname[3, 0] = "mert"; fullname[3, 1] null fullname[3, 1] = "karlıkuş"; fullname[4, 0] null fullname[4, 0] = "salih"; fullname[4, 1] null fullname[4, 1] = "mender"; System.Array.Clear(fullname, 0, fullname.length);
System.Array.Sort(Arr1); Arr1 adında, tek boyutlu array lerde, elemanları sıralar Sayısal array Küçükten büyüğe (0 9 Metin Array Alfabetik olarak (A Z) string[] ad = new string[] "hasan", "ayşe", "duygu", "mert", "salih" ; System.Array.Sort(ad); ad[0] ayşe ad[1] duygu ad[2] hasan ad[3] mert ad[4] salih
System.Array.Resize(Arr1, X); Arr1, tek boyutlu array dir, eleman sayısını değiştirmek için kullanılır. X, yeni uzunluk sayısıdır. string[] ad = new string[] "hasan", "ayşe", "duygu", "mert", "salih" ; System.Array.Rezise(ref ad, 10); ad[6]= mahmut ; ad[0] ayşe ad[1] duygu ad[2] hasan ad[3] mert ad[4] salih ad[5] null ad[6] mahmut ad[7] null ad[8] null ad[9] null *ref kelimesini kullanmak zorunludur.
System.Array.Reverse(Arr1); Arr1 adındaki tek boyutlu array in elemanlarını ters sırada yerleştirir. string[] ad = new string[] "hasan", "ayşe", "duygu", "mert", "salih" ; System.Array.Reverse(ad); ad[0] ayşe ad[1] duygu ad[2] hasan ad[3] mert ad[4] salih ad[0] salih ad[1] mert ad[2] hasan ad[3] duygu ad[4] ayşe
System.Array.IndexOf(Arr1, BirDeger); Arr1 gibi tek boyutlu array içinde, verilen değeri arar. BirDeger, sayı ya da metin olabilir. Bulursa, elemanın indeksini verir. Bulamazsa -1 değerini verir. string[] ad = new string[] "hasan", "ayşe", "duygu", "mert", "salih" ; MessageBox.Show(System.Array.IndexOf(ad, "duygu").tostring()); MessageBox.Show(System.Array.IndexOf(ad, "Duygu").ToString()); MessageBox.Show(System.Array.IndexOf(ad, "feridun").tostring()); duygu Duygu feridun
System.Array.Copy(Arr1, X1, Arr2, X2, L); Arr1, var olan array dir, tek boyutlu olmak zorundadır. Arr2, yeni array dir, tek boyutlu olmak zorundadır. X1, kopyalamanın Arr1 deki hangi elemandan başlayacağını söyler. X2, kopyalamanın Arr2 deki hangi elemandan başlayacağını söyler. L, kaç elemanın kopyalanacağını söyler Arr2, gelen elemanları tutmaya yetecek uzunlukta olmalıdır. string[] ad = new string[] "hasan", "ayşe", "duygu", "mert", "salih" ; string[] ad2 = new string[7]; System.Array.Copy(ad,0,ad2,0,5); 0 ıncı elemandan itibaren tüm 5 elemanı ad2 array ine kopyalar ad[0] ayşe ad[1] duygu ad[2] hasan ad[3] mert ad[4] salih ad2[0] - ayşe ad2[1] - duygu ad2[2] - hasan ad2[3] - mert ad2[4] - salih ad2[5] - null ad2[6] - null
ArrayList Klasik dizilerle çalışırken karşılaşabileceğimiz temel sorunları şu şekilde sıralamak mümkündür: Dizilerin sınırları sabittir. Dizilerin tüm elemanları aynı türden olmalıdır. Kullanmadığımız dizi elemanlarından dolayı bellek alanları gereksiz yere işgal edilmektedir. Bu sorunların üzerinden gelebilşmek için Csharpda ArrayList sınıfı tanımlanmıştır. ArrayList i listbox in görünmeyeni olarak düşünebilirsiniz. ArrayList sınırları dinamik olarak değişebilen diziler olarak tanımlanır. Bu veri yapısı.net sınıf kütüphanesinin System.Collections isim alanında bulunur.
RASTGELE SAYI ÜRETİM FONKSİYONLARI C# da rasgele sayı üretme işini Random class ı gerçekleştirmektedir. Yapı son derece basittir. İstenilen aralıkta değer üretilebilir. Random sınıfının üç fonksiyonu vardır. Bunlar Next, NextDouble, NextBytes Random sınıfını kullanmak için ilk olarak nesnesini türetmelisiniz Random rassal = new Random(); Next Fonksiyonu: Üç farklı kullanımı vardır. Birincisinde parametre almadan bir sayı üretir. Bunun üst ve alt sınırı yoktur. Diğer kullanımında ise integer tipinde parametre alır, sıfır ile girilen parametre arasında bir sayı üretir. Son kullanımında ise iki parametre alır. Bunlar da alt ve üst sınırlardır. Next fonksiyonun ürettiği sayı, integer tipindedir, yani tam sayı üretir.
RASTGELE SAYI ÜRETİM FONKSİYONLARI Form üzerine 1 buton ve 3 textbox ekleyelim. Random rassal = new Random(); textbox1.text = rassal.next().tostring(); //Rastgele bir sayı üretir textbox2.text = rassal.next(50).tostring(); //0 ile 50 arasında rastgele sayı textbox3.text = rassal.next(14, 25).ToString();//14 ile 25 arasında rastgele sayı
RASTGELE SAYI ÜRETİM FONKSİYONLARI NextDouble Fonksiyonu: Bu fonksiyonu da 0 ile 1 arasında double tipinde rastgele sayı üretmek için kullanılır Random rassal = new Random(); textbox1.text = rassal.nextdouble().tostring(); //0 ile 1 arasında double tipinde rastgele bir sayı üretir NextByte Fonksiyonu: Byte tipindeki bir dizinin içini doldurmak için kullanırız.
RASTGELE SAYI ÜRETİM FONKSİYONLARI Form üzerine ilave olarak 1 listbox ekleyelim. listbox1.items.clear(); Random rassal = new Random(); textbox1.text = rassal.next().tostring(); textbox2.text = rassal.next(50).tostring(); textbox3.text = rassal.next(14, 25).ToString(); byte[] dizi = new byte[6]; rassal.nextbytes(dizi); foreach (byte eleman in dizi) listbox1.items.add(eleman);
UYGULAMA (Sayısal Loto Programı) Program 1 ile 49 arasında birbirinden farklı 6 adet rassal tam sayı üretecek ve bu sayıları listbox da sıralayacaktır.
UYGULAMA (Sayısal Loto Programı) listbox1.items.clear(); int[] loto = new int[6]; Random rassal = new Random(); loto[0] = rassal.next(1, 50); listbox1.items.add(loto[0]); for (int i = 1; i < loto.length; i++) loto[i] = rassal.next(1, 50); for (int j = 0; j < i; j++) if (loto[j] == loto[i]) loto[i] = rassal.next(1, 50); j = -1; listbox1.items.add(loto[i]);