1 / 38

Görsel C # Programlama Güz 200 9 (6. Hafta)

Görsel C # Programlama Güz 200 9 (6. Hafta). Diziler (Arrays). Diziler (arrays), ayn ı veri tipine sahip birden fazla veriyi b ü nyelerinde saklayan veri yap ı lar ı d ı r . (Data Structures)

hedy
Télécharger la présentation

Görsel C # Programlama Güz 200 9 (6. Hafta)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Görsel C# Programlama Güz 2009 (6. Hafta)

  2. Diziler (Arrays) • Diziler (arrays),aynıveritipinesahipbirdenfazlaveriyi bünyelerindesaklayanveri yapılarıdır. (Data Structures) • Değişkenler içerisinde yalnız bir tek bilgi depolarken dizileri kullanarak aynı türden birden fazla bilgiyi saklayabiliriz. • Programımız içerisinde kullanacağımız 100 adet tamsayıyı 100 farklı değişken içinde saklamak yerine bu amaçla içinde 100 tamsayı saklı bir dizi kullanmak daha mantıklıdır.

  3. cbu dizinin adıdır. • c.Lengthbize dizinin kaç elemana sahip olduğunu söyler. • cdizisi 12 elemana sahiptir. ( c[0], c[1], … c[11] ) • [ ] sayesinde dizinin elemanlarına ulaşırız. (indeks)

  4. İndeks (Index) • İndeks dizi elemanlarına ulaşmamızı sağlayan pozisyon numarasıdır. • İndeks ya pozitif bir tamsayı ya da tamsayılarla ilgili bir deyim olabilir. • Dizilerin ilk elemanının indeksi daima SIFIR dır. a = 5; b = 6; c[ a + b ] += 2; deyimi c dizisinin c[ 11 ] elemanının içeriğine 2 ekler.

  5. !!! Dikkat !!! Dizilerin indeks numaralarısıfırdan başladığı için, c[7] ile bu dizinin yedinci elemanı farklışeyleri ifade eder. c[7] normalde dizinin sekizinci elemanıdır.

  6. Dizilerin Deklare Edilmesi ve Oluşturulması • Diziler bellekte yer kaplayan nesnelerdir. (objects) • Diziler new anahtar kelimesiyle bellekte dinamik olarak oluşturulurlar. • int[] c = newint[ 12 ];// Aynı anda deklare et ve olustur • Veyaint[] c; // once deklare et c = newint[ 12 ]; // sonra olustur

  7. Hatırlatma • C++’tan farklı olarak C#’ta dizi deklare ederken boyutu köşeli parantezler içerisinde girmek bir derleyici hatasına sebep olur. (Örneğin, int[ 12 ] c;)

  8. Dizilerle İşlemler • Dizinin deklarasyonu • Dizinin oluşturulması • Dizi elemanlarına ilk değer atanması • Dizinin manipulasyonu

  9. Each int is initialized to 0 by default Create 10ints for array; each int is initialized to 0 by default Declare array as an array of ints InitArray.cs array.Length returns length of array array[counter] returns int associated with index in array

  10. İlk Değer Atama Listeleri (Initializer Lists) • Dizi elemanlarına atanacak ilk değerler { } arasına birbirlerinden virgülle ayrılarak yazılırlar. int[] n = { 10, 20, 30, 40, 50}; • değimi n adında, içerisinde 5 tamsayı saklayan bir dizi oluşturur. • Dizi elemanlarının indeks değerleri : 0, 1, 2, 3, 4 • İlk değer atama listeleri kullanıldığında new anahtar kelimesine gerek yoktur. Derleyici dizinin boyutu olarak girilen değerlerin sayısını kullanır.

  11. Declare array as an array of ints InitArray.cs Compiler uses initializer list to allocate array

  12. Sabit Değişkenler (Constant Variables) • Bu başlık sizlere de ilginç geldi mi? (Oxymoron) • Bu tür değişkenler “const” anahtar kelimesi ile deklare edilirler. • Sadece okunabilir değişkenler (read-only variables) olarak da adlandırılırlar. • Bu tür değişkenlere, deklare edildikleri anda muhakkak bir ilk değer ataması yapılır ve bu değer daha sonra değiştirilemez. • Sabit değişken tanımlamak ve bunu dizilerin boyutu olarak kullanmak genel olarak tercih edilen bir yoldur.

  13. Sabit Değişkenler (Constant Variables) • Sabit değişkenleri diğer değişkenlerden ayırtedebilmek için kullanılabilecek bir notasyon: Sabit değişken isimlerinin bütün karakterlerini büyük harfle yaz, değişken ismi birden fazla kelimeden oluşuyorsa kelimeleri birbirinden alt çizgilerle ayır. • ÖRNEK:const int DIZI_BOYUTU;

  14. Hatırlatma • Deklare edilmiş ve ilk değer atanmış bir sabit değişkene yeni bir değer atamaya çalışmak derleyici hatası verir. • Örnek: • const int DIZI_BOYUTU=10; • DIZI_BOYUTU=11; • Sabit bir değişkeni ilk değer atamadan deklare etmeye çalışmak derleyici hatası verir. • Örnek: • const int DIZI_BOYUTU; • DIZI_BOYUTU=10;

  15. Declare constant variable ARRAY_LENGTH using the const modifier InitArray.cs (1 of 2) Declare and create array that contains 10 ints Use array index to assign array value

  16. InitArray.cs (2 of 2)

  17. Declare array with initializer list Sum all array values SumArray.cs

  18. Hatırlatma • Bir dizinin elemanları içerisinde bir döngü vasıtasıyla gezilirken dizi indeksinin sıfıra eşit veya büyük ayrıca dizinin boyutundan küçük olmasına dikkat edilmelidir. Döngüye devamı test eden koşulun indeks değerlerinin bu aralıkta olacağını garanti etmesi gerektiğini unutmayınız.

  19. foreachDeyimi foreach deyimi bir dizinin elemanlarının indeks kullanılmadan ziyaret edilebilmesine imkan tanır. foreach deyimi dizi elemanları üzerinde değişiklik yapamaz. • Kullanım foreach ( veri tipi tanımlayıcısıindizinin adı ) deyimler

  20. For each iteration, assign the next element of array to int variable number, then add it to total ForEachTest.cs for(inti=0;i<array.Length;i++) total+=array[i];

  21. Dizileri ve Dizi Elemanlarını Metodlara Argüman Olarak Kullanma • Diziler metodlara otomatik olarak referans argüman biçiminde gönderilirler. Dizi adları aslında dizinin ilk elemanının bellekteki adresidir çünkü. • Dizi adı metod argümanı olarak köşeli parantezsiz kullanılır. • Dizinin deklarasyonu double[] a = newdouble[ 24 ]; 2. Metodun çağrılması DiziyiDegistir( a ); 3. Metodun tanımı voidDiziyiDegistir( double[] b )

  22. Declare 5-intarray with initializer list PassArray.cs (1 of 3) Pass entire array to method ModifyArray

  23. Pass array element array[3] to method ModifyElement PassArray.cs (2 of 3) Method ModifyArray manipulates the array directly

  24. Method ModifyElement tries to manipulate an array’s element PassArray.cs (3 of 3)

  25. Bir Diziyi Bir Metodun Argümanı Olarak Kullanma • Diziler metod argümanı olarak referansla (call-by-reference)çağrılırlar. • Bir metod, dizinin baslangıç adresini argüman olarak kullanır ve böylece bellekteki yeri bilinmiş olur. • Çağıran metod böylelikle çağırdığımetoda argüman olarak verilen bilgiyi manipule edebilme hakkını da vermiş olur. • Diziler değer ile (call-by-value) metodlara argüman olarak atansalardı eğer bu bir performans eksikliğine yol açardı. (Metod içerisinde işlensin diye dizinin herbir elemanının kopyası alınırdı.)SIKLIKLAçağrılan metodlardaki kapasitesi büyük diziler böyle bir soruna sebep olurdu.

  26. Çok Boyutlu Diziler • Örneğin 2 boyutlu dizileri ele alalım. (Matrisler) • İçinde bilgi saklanan tablolar gibi düşünülebilirler. Satırlar (rows) ve sütunlar (columns) vardır. • Dizinin elemanlarına birbirlerinden virgüller ayrılmış 2 indeksle ulaşılır. int[ , ] b= { { 1, 2 }, { 3, 4 } }; • b[0,0] =1 b[0,1]=2 • b[1,0] =3 b[1,1]=4

  27. İçinde Dizi Saklayan Diziler (Jagged Arrays) int[][]jagged = { newint[] {1, 2},newint[] {3},newint[] {4, 5, 6 } };

  28. Çok Boyutlu Diziler • 3 satır ve 4 sütunlu (3-by-4 array) bir dizi deklarasyonu int[ , ] b; b = newint[ 3 , 4 ]; • İçinde dizi saklayan dizi deklarasyonu int[][] b; b = newint[ 2 ][ ]; // 2 satırlı b[ 0 ] = newint[ 5 ]; // 1. satır 5 sütunlu b[ 1 ] = newint[ 3 ]; // 2. satır 3 sütunlu

  29. Çok Boyutlu Dizilerin Manipülasyonu • Genelde for döngüleri kullanılır. int total = 0 for ( int row = 0; row < a.GetLength(0); row++ ) { for ( int column = 0; column < a.GetLength(1); column++ ) total += a[ row, column]; }

  30. InitArray.cs (1 of 3) Use nested array initializers to initialize the “rectangular” array array1 Use nested array initializers of different lengths to initialize the “jagged” array array2

  31. Passes in a “rectangular” array Iterates through each of the array’s “rows” GetLengthreturns the length of each dimension Iterates through each of the array’s “columns” InitArray.cs (2 of 3)

  32. Passes in a “jagged” array Iterates through each of the array’s “rows” array[row].Length returns number of columns associated with row subscript Iterates through each of the array’s “columns” InitArray.cs (3 of 3)

  33. Bir Dizinin En Küçük ve En Büyük Elemanını Bulma using System; class DizilerleIslemler { static void Main(string[] args) { int enKucuk, //Dizinin en kucuk elemanini saklayan degisken enBuyuk;//Dizinin en buyuk elemanini saklayan degisken const int DIZI_BOYUTU = 10; //Dizinin boyutunu saklayan sabit degisken int[] a = new int[DIZI_BOYUTU]; Random rastgele = new Random(); Console.WriteLine("Dizinin Icerigi:"); for (int i = 0; i < a.Length; i++) { a[i] = rastgele.Next(5, 50);//Dizinin i. elemanina 5 ile 50 arasinda rastgele bir sayi ata Console.Write("{0} ", a[i]); } Console.WriteLine();

  34. Bir Dizinin En Küçük ve En Büyük Elemanını Bulma KucuguBuyuguBul(a, out enKucuk, out enBuyuk); //Neden out, ref degil???? Console.WriteLine("a dizisinin en kucuk elemani: {0}", enKucuk); Console.WriteLine("a dizisinin en buyuk elemani: {0}", enBuyuk); }

  35. Bir Dizinin En Küçük ve En Büyük Elemanını Bulma //Kendine arguman olarak aldigi dizinin en kucuk ve en buyuk elemanini bulan metodun tanimi //Referans kullanarak geriye birden fazla degerin donduruldugune dikkat ediniz!!!!!!! public static void KucuguBuyuguBul(int[] b, out int minimum, out int maksimum) { minimum = b[0];//Dizinin en kucuk elemaninin ilk eleman oldugunu varsay maksimum = b[0];//Dizinin en buyuk elemaninin ilk eleman oldugunu varsay for (int i = 1; i < b.Length; i++)//i’nin 1 den basladigina dikkat ediniz!!!! { if (b[i] < minimum) minimum = b[i]; if (b[i] > maksimum) maksimum = b[i]; } } }

  36. “Selection Sort” Sıralama Algoritması ile Küçükten Büyüğe Sıralama (Ascending Sort) using System; class DizilerleIslemler { static void Main(string[] args) { const int DIZI_BOYUTU = 10; //Dizinin boyutunu saklayan sabit degisken int[] a = new int[DIZI_BOYUTU]; Random rastgele = new Random(); Console.WriteLine("Siralanmamis Dizinin Icerigi:"); for (int i = 0; i < a.Length; i++) { a[i] = rastgele.Next(5, 50);//Dizinin i. elemanina 5 ile 50 arasinda rastgele bir sayi ata Console.Write("{0} ", a[i]); } Console.WriteLine();

  37. “Selection Sort” Sıralama Algoritması ile Küçükten Büyüğe Sıralama (Ascending Sort) DiziyiKucuktenBuyugeSirala(a); Console.WriteLine("Siralanmis Dizinin Icerigi:"); foreach (int eleman in a) Console.Write("{0} ", eleman); Console.WriteLine(); }

  38. “Selection Sort” Sıralama Algoritması ile Küçükten Büyüğe Sıralama (Ascending Sort) //Kendisine arguman olarak aldigi diziyi kucukten buyuge dogru siralayan fonksiyonun tanimi public static voidDiziyiKucuktenBuyugeSirala(int[] b) { int minimumunIndeksi; int geciciDegisken; for(int i=0;i<(b.Length-1);i++) { minimumunIndeksi=i; for(int j=i+1;j<b.Length;j++) if(b[j]<b[minimumunIndeksi]) minimumunIndeksi=j; //swap yap geciciDegisken=b[i]; b[i]=b[minimumunIndeksi]; b[minimumunIndeksi]=geciciDegisken; } } }

More Related