Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

 2006 Pearson Education, Inc. All rights reserved. Görsel C# Programlama Güz 2009 (6. Hafta)

Benzer bir sunumlar


... konulu sunumlar: " 2006 Pearson Education, Inc. All rights reserved. Görsel C# Programlama Güz 2009 (6. Hafta)"— Sunum transkripti:

1  2006 Pearson Education, Inc. All rights reserved. Görsel C# Programlama Güz 2009 (6. Hafta)

2  2006 Pearson Education, Inc. All rights reserved. Diziler (Arrays) Diziler (arrays), aynı veri tipine sahip birden fazla veriyi bünyelerinde saklayan veri 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  2006 Pearson Education, Inc. All rights reserved. 3 c bu dizinin adıdır. c.Length bize dizinin kaç elemana sahip olduğunu söyler. c dizisi 12 elemana sahiptir. ( c[0], c[1], … c[11] ) [ ] sayesinde dizinin elemanlarına ulaşırız. (indeks)

4  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. !!! 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  2006 Pearson Education, Inc. All rights reserved. 6 Dizilerin Deklare Edilmesi ve Oluşturulması Diziler bellekte yer kaplayan nesnelerdir. (objects) Diziler new anahtar kelimesiyle bellekte dinamik olarak oluşturulurlar. int[] c = new int[ 12 ]; // Aynı anda deklare et ve olustur Veya int[] c; // once deklare et c = new int[ 12 ]; // sonra olustur

7  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 8 Dizilerle İşlemler 1.Dizinin deklarasyonu 2.Dizinin oluşturulması 3.Dizi elemanlarına ilk değer atanması 4.Dizinin manipulasyonu

9  2006 Pearson Education, Inc. All rights reserved. 9 InitArray.cs Declare array as an array of int s Create 10 int s for array ; each int is initialized to 0 by default array.Length returns length of array array[counter] returns int associated with index in array Each int is initialized to 0 by default

10  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 11 InitArray.cs Declare array as an array of int s Compiler uses initializer list to allocate array

12  2006 Pearson Education, Inc. All rights reserved. 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. Sabit Değişkenler (Constant Variables)

13  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 15 InitArray.cs (1 of 2) Declare constant variable ARRAY_LENGTH using the const modifier Declare and create array that contains 10 int s Use array index to assign array value

16  2006 Pearson Education, Inc. All rights reserved. 16 InitArray.cs (2 of 2)

17  2006 Pearson Education, Inc. All rights reserved. 17 SumArray.cs Declare array with initializer list Sum all array values

18  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 19 foreach Deyimi 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ı in dizinin adı ) deyimler

20  2006 Pearson Education, Inc. All rights reserved. 20 ForEachTest.cs For each iteration, assign the next element of array to int variable number, then add it to total for(int i=0;i

21  2006 Pearson Education, Inc. All rights reserved. 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. 1. Dizinin deklarasyonu double[] a = new double[ 24 ]; 2. Metodun çağrılması DiziyiDegistir( a ); 3. Metodun tanımı void DiziyiDegistir( double[] b )

22  2006 Pearson Education, Inc. All rights reserved. 22 PassArray.cs (1 of 3) Declare 5 - int array with initializer list Pass entire array to method ModifyArray

23  2006 Pearson Education, Inc. All rights reserved. 23 PassArray.cs (2 of 3) Pass array element array[3] to method ModifyElement Method ModifyArray manipulates the array directly

24  2006 Pearson Education, Inc. All rights reserved. 24 PassArray.cs (3 of 3) Method ModifyElement tries to manipulate an array’s element

25  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 27 İçinde Dizi Saklayan Diziler (Jagged Arrays) int [][] jagged = { new int [] { 1, 2 }, new int [] { 3 }, new int [] { 4, 5, 6 } };

28  2006 Pearson Education, Inc. All rights reserved. 28 Çok Boyutlu Diziler 3 satır ve 4 sütunlu ( 3 -by- 4 array) bir dizi deklarasyonu int[, ] b; b = new int[ 3, 4 ]; İçinde dizi saklayan dizi deklarasyonu int[][] b; b = new int[ 2 ][ ]; // 2 satırlı b[ 0 ] = new int[ 5 ]; // 1. satır 5 sütunlu b[ 1 ] = new int[ 3 ]; // 2. satır 3 sütunlu

29  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 31 InitArray.cs (2 of 3) Iterates through each of the array’s “rows” Passes in a “rectangular” array Iterates through each of the array’s “columns” GetLength returns the length of each dimension

32  2006 Pearson Education, Inc. All rights reserved. 32 InitArray.cs (3 of 3) Iterates through each of the array’s “rows” Passes in a “jagged” array Iterates through each of the array’s “columns” array[row].Length returns number of columns associated with row subscript

33  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 36 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(); “Selection Sort” Sıralama Algoritması ile Küçükten Büyüğe Sıralama (Ascending Sort)

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

38  2006 Pearson Education, Inc. All rights reserved. 38 //Kendisine arguman olarak aldigi diziyi kucukten buyuge dogru siralayan fonksiyonun tanimi public static void DiziyiKucuktenBuyugeSirala(int[ ] b) { int minimumunIndeksi; int geciciDegisken; for(int i=0;i<(b.Length-1);i++) { minimumunIndeksi=i; for(int j=i+1;j


" 2006 Pearson Education, Inc. All rights reserved. Görsel C# Programlama Güz 2009 (6. Hafta)" indir ppt

Benzer bir sunumlar


Google Reklamları