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ş

 

Foreach Döngüsü

Foreach döngüsü bir koleksiyon veya bir dizi değişkenin elemanlarını sırayla okumak için kullanılır. Foreach döngüsünün kaç defa döneceğini dizi yada koleksiyonun eleman sayısı belirler.

Foreach Döngüsünü Kullanımı

foreach(eleman_tipi eleman_adi in koleksiyon)
{

Döngü komutları…

}

Örnek Uygulama;

textBox’a girilen string bir ifadenin elemanlarını (karakterlerini) alt alta yazan program.

[ipucu:string değişkenler dizi olmasa dahi karakter dizisi özelliği gösteren bir koleksiyon gibi çalışır.]


foreach (char harf in textBox1.Text)
{

label1.Text += harf.ToString()+"n";

}

Örnek Uygulama2;

textBox’a girilen string ifadeyi tersten yazan program.


foreach (char harf in textBox1.Text)
{

label1.Text = harf.ToString() + label1.Text;

}

While ve do-while Döngüsü

While Döngüsü

While döngüsü belirlenen şarta bağlı olarak while bloğu içindeki satırların bir döngü halinde tekrar tekrar işletilmesini sağlar. Başka bir ifadeyle döngüye giriş ve döngünün devam etmesi şarta bağlıdır.

Döngü içerisinde şartı etkileyen bir komut olmalıdır; aksi halde sonsuz döngü ihtimali ortaya çıkar.

While Kullanımı

while(şart)
{

Döngü komutları…

}
Aşağıda basit bir for döngüsü ve while uyarlaması verilmiştir.


private void button1_Click(object sender, EventArgs e)
{

for(int i = 1; i <= 10; i++)
{
label1.Text += i + " ";
}

}

Bu ifadenin while ile oluşturulmuş hali şu şekilde olacaktır.


private void button1_Click(object sender, EventArgs e)
{
int i = 1;

while( i <= 10)
{
label1.Text += i + " ";

i++;
}

}

Do-while Döngüsü

While döngüsünde şart döngünün başında kontrol edildiği için eğer şart sağlanmaz ise program döngüye girmeden çıkar ve diğer komutlar işletilir. Do-while’da ise şart döngünün sonunda kontrol edildiği için do bloğundaki komutlar en az bir defa çalıştırılır. Yani döngüye giriş değil sadece döngüde kalma şarta bağlıdır. Eğer şartı oluşturan komut aynı zamanda döngüde tekrar ettirilecek komut ise bu yapı kullanılır.

Do-while döngüsünde de while döngüsünde olduğu gibi döngü içerisinde şartı etkileyen bir komut olmalıdır; aksi halde sonsuz döngü ihtimali ortaya çıkar.

do
{

Döngü komutları…

}while(şart);

Örnek Uygulama: button1’e basıldığında sayı çifleri üretip satır satır yazan metot aynı sayı çifti ürettiğinde yazıp sonlanır;


private void button1_Click(object sender, EventArgs e)
{

Random rst = new Random();

int sayi1;

int sayi2;

do
{

sayi1 = rst.Next(1,6);

sayi2 = rst.Next(1,6);

label1.Text += sayi1.ToString() + " - " + sayi2.ToString()+"n";

} while (sayi1!=sayi2);

}

For Döngüsü

Belirli sayıda tekrar edilecek komut blokları veya her çevirimde kullanılacak bir sayaç değişkenine ihtiyaç duyulduğunda yaygın olarak for döngüsü kullanılır.

For döngüsü 3 parametre ile tanımlanır. Bunlar birbirlerinden metotlardaki gibi (,) ile değil (;) ile ayrılır:

  1. İlk parametresi sayaç değişkeni tanımlamasıdır. For kalıbı içinde tanımlanan sayaç değişkeni Local’dir; yani sadece for bloğu içinde çalıştırılır. Sayacı for dışında tanımladığımız zaman Global bir değişken olur ve for bloğu dışında da kullanılabilir.
  2. For döngüsünün ikinci parametresinde şart tanımlaması yapılır. Şart ifadesi true yada false değer almalıdır, döngünün her çevriminin başında şart kontrolü yapılarak değeri true ise çevrim başlatılır (çevrim: döngü komut bloğunun her bir tekrarıdır).
  3. Son parametrede ise sayaç işlemidir. Bu işlem her çevrimin sonunda gerçekleştirilir. Sayaç işlemi sayacı değiştiren her türlü matematiksel işlem olabilir böylece sayacı istediğimiz değerde arttırıp azaltabiliriz.

[ipucu: Visual Studio ile for yazdıktan sonra arka arkaya tab tuşuna bastığımızda visual studio for döngüsünün kalıbını bize otomatik olarak oluşturur.]

For Döngüsünün Kalıbı


for (int i = 0; i < length; i++)
{

//koşul true olduğu sürece yapılacak işlemler

}

 

Örnek Uygulama;

Form yüklendiğinde Label nesnesine 0dan 9a kadar sayıları alt alta for döngüsünü kullanarak yazdıralım.


label1.Text="";

for (int i = 0; i <= 9; i++)
{

label1.Text += i.ToString()+"\n";

}

Örnek uygulama;

label’a textBox’dan girilen metnin karakterlerini alt alta for döngüsü kullanarak yazdıralım.


for (int i = 0; i < textBox1.Text.Length; i++)
{

label1.Text += textBox1.Text.Trim().Substring(i,1)+"\n";

}