Aylık arşivler: Kasım 2012

Döngü İstisna Komutları

İki farklı istisna komutu vardır.  Bunlar;
a) break;
b) continue;
a) break;   : Bu komut her döngüde kullanılabilir. Kullanıldığı yerde döngüyü kırar. Döngü tamamen sonlandırılır.
b) continue;  : Bu komut döngüyü tamamen sonlandırmaz; ancak döngünün o andaki çevrimini sonlandırır ve sonraki çevrime geçer (yani sadece çalıştığı andan itibaren aynı bloktaki kalan komutları sadece o anki çevrim için atlamış olur).
Not: Her iki döngü istisna komutu da koşula bağlı olarak döngü bloğu içinde kullanılmalıdır.
Örnek Kullanımı
Soru: 1 , 26 arası rasgele 10 adet sayıyı yazdıran, oluşturulan sayılar 3’ün katı olmayacak ve sayılardan biri 23 olursa sayı üretilmesi sonlandırılsın?
Cevap:


private void button1_Click(object sender, EventArgs
{
Random rasgele_sayi = new Random();
for (int i = 0; i < 10; i++)
{
  int uretilen_degerler = rasgele_sayi.Next(1, 26);
  if ((uretilen_degerler % 3) == 0)
  {
    i--;
    continue;
  }

label1.Text += uretilen_degerler.ToString() + "\n";
if (uretilen_degerler == 23)break;

}
}

Dizi Değişkenler

Dizi Değişken:  Dizi değişken; içerisinde birden fazla aynı tipte değer tutabilen değişkenlerdir.  Benzer işlevi olan aynı tipte birden fazla değişkeni ayrı ayrı tanımlamak yerine bu değişkenleri bir defa da tanımlamamızı sağlarlar. Dizi değişken tanımlama şekilleri;
int[] ogrenci;  =>  Tamsayı türünde bilgileri saklayabilen “ogrenci” adında bir dizi değişken tanımlanmıştır. Dizilerde herbir veri saklama alanı dizinin elemanı>/strong> olarak adlandırılır.

int[] ogrenci;
ogrenci = new int[2];  => Bu dizi değişken iki parçalı komut şeklinde tanımlanmıştır. Bu dizi değişken int tipinde olduğu için elemanlara ilk değer olarak sıfır(0) aktarılır.
int[] ogrenci = new int[2];  => Yukarıda iki satırda tanımlanmış olan dizi değişken bu örnek kullanımda da tek satırda tanımlanmıştır.

a) Tek Boyutlu Diziler

Elemanı seçmek için tek bir numaraya ihtiyaç duyulan dizilere tek boyutlu dizi denir. Elemana işaret eden numaraya ise indeks numarası denir.
int    []        degisken           =  new int[2];
Tip   Dizi    Değişken Adı                      Eleman Adedi
Not: Değişkenlerin indeks numaralarının aldığı değerler sıfır(0)’dan başlar ve indeks numarası en fazla eleman adedinin bir eksiği olabilir (tek boyutlu dizilerde).
Örneğin;
int[] deger = new int[2];
deger[0] = 1;
deger[1] = 2;

Soru: button1’e basılınca 1 , 26 arası rasgele 10 adet sayı üretip label1’e yazan ve button2’ye basılınca oluşan değerleri küçükten-büyüğe sırayan program kodlarını ilgili olaya yazınız.

Cevap:

int[] sayi  = new int[10];
private void button1_Click(object sender, EventArgs e)
{
Random rsglsylr = new Random();
for(int i = 0; i<10; i++)
{
sayi[i] = rsglsylr.Next(1,26);
label1.Text += sayi[i] + "n";
}
}
private void button2_Click(object sender, EventArgs e)
{
Array.Sort(sayi); // => Diziyi küçükten-büyüğe sıralar.
foreach(int deger_verme in sayi)
{
label2.Text += deger_verme + "n";
}
}

b) Çok Boyutlu Diziler
Çok boyutlu dizi değişkenler bir elemanını seçebilmek için iki ya da daha fazla indeks numarasına ihtiyaç duyulan değişkenlerdir. Bir dizi değişken bir elemanının seçilmesi için kaç adet indeks numarası gerektiriyorsa bu dizi o kadar adet boyutlu bire dizidir. Çok boyutlu dizi değişken denildiği zaman genellikle 2 veya 3 boyutlu dizi değişkenler anlaşılmaktadır. 2 boyutlu diziler satır ve sütunlar olarak düşünülebilir.  Çok boyutlu dizi değişkenler;
int[,] dizi;
dizi = new int[2,3];  =>  Bu şekilde tanımlanan dizi değişkeni 2 satır ve 3 sütuna sahip bir tablo gibi düşünebilirsiniz.
int[ , , ] dizi;
dizi = new int[2,3];
dizi[0,0] = 10;
dizi[0,1] = 20;  => Çok boyutlu dizi değişkenin indekslerine değer atamasının yapılması.
şeklinde kullanılabilir.
Dizi değişkenlerin kaç boyutlu olduğu öğrenilmek istendiği zaman Rank() metodu kullanılır.
string[,] dizi = new string[4,5];
int boyut = dizi.Rank();  // 2 boyutlu dizi değişken.
int[] dizi1 = new int[3];               // Eleman sayısı aldığı değerdir(3)
int[,] dizi2 = new int[2,3];          // Eleman sayısı için alınan değerler çarıpılır. (2*3 =  6)
int[ , ,] dizi3 = new int[5,2,7];  // Eleman sayısı için alınan değerler çarpılır. (5*2*7 = 70)
Dizi Değişken                Eleman Sayısı            İlk Eleman            Son Eleman
dizi1                                              3                         dizi1[0]                  dizi1[2]
dizi2                                              6                         dizi2[0,0]               dizi2[1,2]
dizi3                                              70                       dizi3[0,0,0]           dizi3[4,1,6]
c) Varsayılan Değer Ataması ile Dizi Değişken Tanımlama

string[] isimler = {“Ali” , “Veli” , “Ayşe”};  => Tek boyutlu string dizi değişken.
string[,] isimler = {{“Hasan”,Mustafa”,”Burhan”} , {“Burak”,”Ali”,”Fatma”}};  => Çok boyutlu string dizi değişken.

Array Sınıfı’nın Metodları

1) Array.Sort(dizi) = Dizi değişken eğer sayısal ise küçükten-büyüğe , string ise sözcük sıralamasına(A-Z) göre sıralar. Sıralanacak dizi değişkeni parametre olarak alır.
Kullanımı:

 string[] dizi= new string[3];
 dizi[0] = "Ali";
 dizi[1] = "Veli";
 dizi[2] = "Ayşe";
 Array.Sort(dizi);   // Ali  Ayşe Veli

 int[] dizi= new int[3];
 dizi[0] = 1497;
 dizi[1] = 124;
 dizi[2] = 692;
 Array.Sort(dizi);   // 124  692  1497

 2) Array.Reverse(dizi)  = Dizinin mevcut sıralamasını ters çevirir.
Kullanımı:

 string[] dizi= new string[3];
 dizi[0] = "Ali";
 dizi[1] = "Veli";
 dizi[2] = "Ayşe";
 Array.Reverse(dizi);  // Ayşe Veli  Ali

 int[] dizi= new int[3];
 dizi[0] = 1497;
 dizi[1] = 124;
 dizi[2] = 692;
 Array.Reverse(dizi);  // 692  124  1497

3) Array.Copy(kaynak_dizi,hedef_dizi,eleman_adedi) = Bir dizinin tamamını veya bir kısmını başka bir diziye kopyalar. Kopyalamaya kaynaklık edecek dizi değişkeni 1. parametre olarak almaktadır. Kaynak diziden kopyalanan elemanların yerleştirileceği dizi ise 2. parametrede verilen hedef dizidir. 3. parametrede kullanılan eleman adedi ise kaynak dizinin başlangıcından itibaren kaç adet elemanın kopyalanacağı bilgisini alır.

Bu fonksiyonun bir farklı kullanımında da (overload’ı) kaynak_dizi parametresinden sonra kaynak_başlangıç_indexi verilerek kopyalanacak elemanların ilk indeksten değil de istenilen indeksten başlanması sağlanır; benzer şekilde hedef_dizi parametresinden sonra da indeks değeri verilerek kopyalanacak elemanlların hedef dizi üzerinde hangi indeksten itibaren yerleştirileceği bilgisi verilmiş olur.
Kullanımı:

Array.Copy(kaynak_dizi ,[kaynak_dizi_baslangic_index] , hedef_dizi , [hedef_dizi_baslangic_index] , kopyalanacak_eleman_adeti);

4) Array.Clear(dizi) = Dizi değişkenlerin içeriğini silmek için kullanılır.İkisi seçimlik olan 3 parametreye sahiptir. 1. parametre elemanları sıfırlanacak diziyi, 2. parametre (seçimlik) içeriği silinecek ilk elemanı, 3. parametre ise (secimlik) içeriği silinecek eleman sayısı belirtmektedir.
Kullanımı:

string[] iller = {"Bursa" , "Kayseri", "İzmir" , "Ankara"};
Array.Clear(iller, 1 , 1);

int[] sayilar = new int[3];
sayilar[0] = 100;
sayilar[1] = 1000;
sayilar[3] = 10000;
Array.Clear(dizi, 0 , 2);

5) Array.IndexOf(dizi,aranan_eleman) = Dizi değişken içinde arama yapmak için kullanılır. Bu metod ile aramaya konu edinilen dizi değişkenin sıralı olması şart değildir.  IndexOf metodu geriye aranan elemanın sırasını göndermektedir. Aranan eleman dizide yoksa -1 değeri gönderir.

Bu fonksiyonun farklı kullanımlarında (overload’larında) 3. parametresine arama başlangıç indeksi ve 4. parametresine ise başlangıç indeksinden itibaren kaç adet eleman üzerinde arama yapılacağı bilgileri seçimlik olarak verilebilir.

Kullanımı:

string[] dizi = new string[3];
dizi[0] = "Ali";
dizi[1] = "Veli";
dizi[2] = "Ayşe";
string aranan_deger = textBox1.Text;
int sirasi =  Array.IndexOf(dizi , aranan_deger);
if(sirasi > 0)
MessageBox.Show("Aranan eleman var.");
else
MessageBox.Show("Aranan eleman yok.");

6) Array.Resize(ref dizi, yeni_kapasite) = Dizi değişkenin kapasitesini artırmak veya azaltmak için kullanılır. Aslında dizi=new dizi_tipi[kapasite]; ifadesi ile de mevcut dizi yeni kapasite değeri ile yeniden oluşturulur. Ancak bu işlem yeniden oluşturma işlemi olduğundan dizinin bütün elemanları sıfırlanmış olur. Array.Resize ise kapasite değişikliğini mevcut değerleri silmeden yapar. Tabi eğer kapasite azaltma şeklinde bir değiştirme işlemi yapılıyorsa kapasite dışında kalan elemanların değeri silinmiş olacaktır.
Kullanımı:

string[] dizi = {"kartal","kanarya","serçe"};
Array.Resize(ref dizi,6);
dizi[3] = "doğan";
dizi[4] = "şahin";
dizi[5] = "baykuş";

label1.Text="";
foreach(string eleman in dizi)label1.Text+=eleman+"\n";

//ÇIKTIDA LABEL1'DE ALT ALTA
// kartal
// kanarya
// serçe
// doğan
// şahin
// baykuş