duyuruElektroArge.com'a Hoşgeldiniz. Üye Olmak İçin Tıklayın. duyuru





houseForum ana sayfa   iletişimİletişim   bilgiSSS  
kırmızı yeşil mavi
ekleKayıt  anahtarGiriş
evForum ana sayfa goE-Kütüphane goE-Ders goC#
 

  • Reklam

Ders 30 - Koşul Kontrolleri

C Dili Dersleri - Okan Bilke

Ders 30 - Koşul Kontrolleri

Mesajgönderen okanbilke » 10 Eyl 2015 20:40

IF BLOKLARI
Sanıyorum dallanma işlemlerinde en çok tercih edilen yapının "if" olduğunu söylersek doğru bir cümle kurmuş oluruz. Kendi içerisinde bir çok seçeneği bulunmaktadır. Bu seçenekleri teker teker inceleyeceğiz.
private void button1_Click(object sender, EventArgs e)
{
String Sehir = "ANKARA";
if (Sehir == "ANKARA") // Çift Eşittir
{
//Koşula Uyan Kodlar
}
this.Text = Sehir; //Burası Koşula Bağlı Değildir.
}

Kodlamaya dikkat edin "Sehir" isimli "String" tip değişken şayet "ANKARA" içeriğine sahipse, "{-}" blokları arasındaki kodlar işletilecektir. Aşağıdaki örnek sanıyorum bu hususu daha iyi anlatacaktır.
private void button1_Click(object sender, EventArgs e)
{
String Sehir = "ANKARA";
if (Sehir == "ANKARA") // Çift Eşittir
{
label1.Text = "Oturulan Şehir=" + Sehir;
}
this.Text = Sehir; //Burası Koşula Bağlı Değildir.
}

Dilerseniz daha önceki bölümlerde belirttiğimiz operatörleri kullanarak sayısal kıyaslamalarda yapabilirsiniz.
private void button2_Click(object sender, EventArgs e)
{
Byte OgrenciNotu;
OgrenciNotu = Convert.ToByte(textBox1.Text);
if (OgrenciNotu >= 50)
{
label1.Text = "Geçer Not Aldınız";
}
this.Text = OgrenciNotu.ToString();
}

Kodlamaya dikkat edin "this.Text = OgrenciNotu.toString" satırı if küme bloğu içerisinde olmadığı için not her zaman sayfanın başlığında yazdırılacaktır. "Geçer Not Aldınız" mesajının verilebilmesi için muhakkak öğrenciye ait olan notun "50" veya "50énin üzerinde olması gerekmektedir.

IF - ELSE BLOKLARI
Dallanma durumunda alternatifleriniz sadece iki taneyse, bu durumlarda "if-else" bloklarından faydalanabilirsiniz. Aşağıda bu hususa örnek verilmiştir.
private void button1_Click(object sender, EventArgs e)
{
String Sehir = "ANKARA";
if (Sehir == "ANKARA")
{
// Koşul Geçerli İse İşleyecek Olan Blok
}
else
{
// Koşul Geçerli Değilse İşleyecek Olan Blok
}
}

Bu aşamada daha somut bir örnek verelim. Kodunuzu aşağıdaki şekilde değiştirin.
private void button1_Click(object sender, EventArgs e)
{
String Sehir = "ANKARA";
if (Sehir == "ANKARA")
{
label1.Text = "Başkentte Oturuyor";
}
else
{
label1.Text = "Başkentte Oturmuyor";
}
this.Text = Sehir; // Burası koşullara bağlı değildir.
}

Dilerseniz aşağıdaki şekilde Sayısal ifadeler içinde "if-else" bloklarından faydalanabilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
Byte OgrenciNotu;
OgrenciNotu = Convert.ToByte(textBox1.Text);
if (OgrenciNotu >= 50)
{
label1.Text = "Geçer Not Aldınız";
}
else
{
label1.Text = "Maalesef Başarısız Oldunuz"
}
this.Text = OgrenciNotu.ToString();
}

Şimdi her halükarda başarılı veya başarısız mesajlarından bir tanesi verilecektir.

IF - ELSE IF - ELSE BLOKLARI
Alternatiflerin "2" den fazla olması durumunda bu bloklardan faydalanmalısınız. "else" bloklarında herhangi bir koşul belirtilmemektedir (Kalan diğer bütün koşulları içerir). Fakat "else if" bloklarından sonra muhakkak "if" de olduğu gibi koşulunuzu girmeniz gerekecektir.
private void button1_Click(object sender, EventArgs e)
{
String Sehir = "ANKARA";
if (Sehir == "ANKARA")
{
// Ankarada Oturuyorsa Burası İşler
}
else if (Sehir == "İSTANBUL")
{
// İstanbulda Oturuyorsa Burası İşler
}
else if (Sehir == "İZMİR")
{
// İzmirde Oturuyorsa Burası İşler
}
else
{
// Diğer Şehirlerde Oturuyorsa Burası İşler
}
this.Text = Sehir; // Burası Koşullara Bağlı Değildir.
}

Dikkat edin koşul kontrolleri yapılırken istediğiniz kadar "else if" bloğu kullanabilirsiniz. Yani her farklı koşul için "else if" bloğu kullanılabilir. Fakat bu "if" ve "else" blokları için geçerli değildir. Aynı alternatifi inceleyen kod bloklarında sadece bir tane "if", sadece bir tane "else" kullanılabilir. Aşağıda daha somut bir örnek verilmektedir. Dikkatlice inceleyiniz.
private void button1_Click(object sender, EventArgs e)
{
String Sehir = textBox1.Text;
if (Sehir == "ANKARA")
{
label1.Text = "Başkentte Oturuyor";
}
else if (Sehir == "İSTANBUL")
{
label1.Text = "En Büyük İlde Oturuyor";
}
else if (Sehir == "İZMİR")
{
label1.Text = "Üçüncü Büyük İlde Oturuyor";
}
else
{
label1.Text = "Büyük Şehirler Dışında İkamet Ediyor";
}
this.Text = Sehir; // Burası Koşullara Bağlı Değildir.
}

Dilerseniz bu blokları sayısal değerler (bool olabilir) içinde kullanabilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int OgrenciNotu;
OgrenciNotu = Convert.ToInt32(textBox1.Text);
if (OgrenciNotu < 0)
{
label1.Text = "Yanlış Not";
}
else if (OgrenciNotu < 50)
{
label1.Text = "Maalesef Başarısız Oldunuz";
}
else if (OgrenciNotu <= 100)
{
label1.Text = "Tebrikler Geçer Not";
}
else
{
label1.Text = "Yanlış Not";
}
this.Text = OgrenciNotu.ToString();
}

Uygulamayı çalıştırdıktan sonra "TextBox" içerisinde her türlü duruma uyan değerleri girerek sonuçları test edin.
BİRDEN FAZLA KOŞULU KONTROL ETMEK
Yukarıdaki örnek uygulamada öğrencinin notunun "0" dan küçük veya "100" den büyük girilmesi durumunda aynı mesaj içeriği ile uyarılmaktadır. O zaman bu iki koşulu aynı satırda düzenleyebiliriz.
Aşağıdaki örnek uygulamada öğrenciye ait notun "0" dan küçük veya "100" den büyük olması durumu "if" bloğu içerisinde kontrol edilerek "else" bloğunun koddan çıkartılması sağlanmıştır. Bu sayede daha kısa satırlı kodlar yazabilirsiniz. Ayrıca bu örnekte "else" bloğunun zorunlu olmadığını da anlamışsınızdır.
Resim

Şimdi yukarıdaki sayfa tasarımını oluşturup aşağıdaki kod bloklarını uygun olan yerlere ekleyiniz.
private void button1_Click(object sender, EventArgs e)
{
int OgrenciNotu;
OgrenciNotu = Convert.ToInt32(textBox1.Text);
if (OgrenciNotu < 0 || OgrenciNotu > 100) // İki Farklı Koşul
{
label1.Text = "Yanlış Not";
}
else if (OgrenciNotu < 50)
{
label1.Text = "Maalesef Başarısız Oldunuz";
}
else if (OgrenciNotu <= 100)
{
label1.Text = "Tebrikler Geçer Not";
}
this.Text = OgrenciNotu.ToString();
}

Aynı sonuca ulaşmak için veya ("||") yerine and ("&&") de kullanabilirsiniz. Tercih tamamen programcıya kalmıştır.
private void button1_Click(object sender, EventArgs e)
{
int OgrenciNotu;
OgrenciNotu = Convert.ToInt32(textBox1.Text);
if (OgrenciNotu > 0 && OgrenciNotu <=49)
{
label1.Text = "Maalesef Başarısız Oldunuz";
}
else if (OgrenciNotu >= 50 && OgrenciNotu <= 100)
{
label1.Text = "Tebrikler Geçer Not";
}
else
{
label1.Text = "Yanlış Not";
}
this.Text = OgrenciNotu.ToString();
}

Bu uygulamayı çalıştırdığınız zaman öncekiyle aynı davranışı gösterdiğini göreceksiniz. Aralık dışı durumları kontrol ederken "||", aralık içi durumlarda ise "&&" operatörleri kullanılır.

IF ÖZEL KODLAMASI
Koşullarımızı dallandırırken "if" blokları içerisine yazılacak kod tek satırdan ibaretse "{-}" bloğu kullanmayabilirsiniz. Biz olayı tam olarak kavrayana kadar her zaman küme işaretlerini kullanmanızı öneririz.
private void button3_Click(object sender, EventArgs e)
{
int OgrenciNotu;
OgrenciNotu = Convert.ToInt32(textBox1.Text);
textBox1.Text = OgrenciNotu > 50 ? "Geçti" : "Kaldı";
}

Dikkat edin, şayet herhangi bir koşuldaki satır sayısı "1" den fazla ise o zaman "{-}" bloğu kullanmak zorunlu hale gelecektir. OgrenciNotu > 50 ? "Geçti" : "Kaldı"; Bu satır "50" den büyük notlar için "?" den sonrasını, küçük notlar içinse ":" operatöründen sonrasını işletir.

BOOL TİP DEĞİŞKEN KULLANMAK
Aslında bu hususu özel bir başlık altında incelemek ne kadar doğrudur bilinmez, fakat bir çok kodlamada rastlayabileceğiniz için aşağıdaki yapıya dikkatinizi çekmek istedim.
private void button3_Click(object sender, EventArgs e)
{
bool Durum;
Durum = checkBox1.Checked;
if (Durum) // Eşitlik Belirtilmedi
{
label1.Text = "Personel Evli";
}
else
{
label1.Text = "Personel Bekar";
}
}

Resim

Yukarıdaki kodlamada "Durum" değişkeni için "if" bloğunda herhangi bir eşitlik belirtilmemiştir. Böyle bir kodlama "bool" tip değişkenine özeldir ve "true" değeri anlamını taşımaktadır. Yani yukarıdaki kod bloğunu aşağıdaki şekilde de yazabilirsiniz.
private void button3_Click(object sender, EventArgs e)
{
if (checkBox1.Checked) // Eşitlik Belirtilmedi
{
label1.Text = "Personel Evli";
}
else
{
label1.Text = "Personel Bekar";
}
}

SWITCH BLOKLARI
Alternatifli dallanma durumlarında "if" bloklarına alternatif olarak kullanılabilir bir ifadedir. "if" blokları kadar kullanışlı olmamakla beraber, bir çok durumda kodların daha anlaşılır olması açısından tercih edebileceğiniz bir kodlamaya sahiptir. Sebebi basittir, iç içe "if" bloklarının bulunduğu kod satırlarında, iç içe "switch - if" blokları kullanmanız daha uygun olabilir.
private void button1_Click(object sender, EventArgs e)
{
switch (OgrenciNotu)
{
case İlkDeger:
//Kodlar
break;
case İkinciDeger;
//Kodlar
break;
default:
//Kodlar
break;
}
}

Aşağıda basit anlamda bir kodlama verilmiştir. Sanıyorum anlaşılamayacak bir durum yoktur.
private void button1_Click(object sender, EventArgs e)
{
int OgrenciNotu;
OgrenciNotu = Convert.ToInt32(textBox1.Text);
switch (OgrenciNotu)
{
case 10:
this.Text = "Girilen Sayı = 10";
break;
case 20:
this.Text = "Girilen Sayı = 20";
break;
case 30:
this.Text = "Girilen Sayı Farklı";
break;
}
}

Bu ifadeyi kullanırken her "case" ifadesini "break" komutuyla bitirmeyi unutmamalısınız. Amaç her farklı koşulu "case" ifadeleri içerisinde kodlamak olacaktır. Bu ifade ile "String" tip içerikleri de kontrol edebilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
String Sehir;
Sehir = textBox1.Text;
switch (Sehir) // Dallandırılacak Değişken
{
case "ANKARA":
this.Text = "Personel ANKARA da Oturuyor";
break;
case "İZMİR":
this.Text = "Personel İzmirde Oturuyor";
break;
case "İSTANBUL":
this.Text = "Personel İstanbul'da Oturuyor";
break;
default:
this.Text = "Büyük Şehirde Oturmuyor";
break;
}
}

Bu bloklar içerisinde dallandıracağınız değişken "Double" tip olamaz. Bu durumlarda hata ile karşılaşırsınız. Fakat aşağıdaki şekilde basit bir "Boxing" olayı çözecektir.
private void button2_Click(object sender, EventArgs e)
{
Double OgrenciNotu;
OgrenciNotu = Convert.ToInt32(textBox1.Text);
switch ((int)OgrenciNotu)
{
case 10:
this.Text = "Girilen Sayı=10";
break;
case 20:
this.Text = "Girilen Sayı=20";
break;
case 30:
this.Text = "Girilen Sayı=30";
break;
default:
this.Text = "Girilen Sayı Farklı";
break;
}
}

Şayet "Char" tipli karakterlerle işlem yapacaksanız kodlarınızı aşağıdaki şekilde kullanabilirsiniz.
private void button4_Click(object sender, EventArgs e)
{
try
{
Char Karakter;
Karakter = Convert.ToChar(textBox1.Text);
switch ((Byte)Karakter)
{
case 65:
this.Text = "A Tuşuna Bastınız";
textBox1.Text = null;
break;
case 66:
this.Text = "B Tuşuna Bastınız";
textBox1.Text = null;
break;
default:
this.Text = "Diğer Tuşlara Bastınız";
textBox1.Text = null;
break;
}
}
catch
{
}
}

Aşağıda "DateTime" sınıfı kullanılarak haftanın gününü "switch" bloğuyla hesaplatmaktayız. Dikkat edin Text içerisindeki tarih bilgisi dallandırma işlemine tabi tutularak, girilen tarihin hangi güne ait olduğu belirlenebilmektedir.
private void button5_Click(object sender, EventArgs e)
{
DateTime Tarih;
Tarih = Convert.ToDateTime(textBox1.Text);
int Numara;
Numara = (int)Tarih.DayOfWeek;
switch (Numara)
{
case 0:
this.Text = "Bugün Pazar";
break;
case 1:
this.Text = "Bugün Pazartesi";
break;
case 2:
this.Text = "Bugün Salı";
break;
case 3:
this.Text = "Bugün Çarşamba";
break;
case 4:
this.Text = "Bugün Perşembe";
break;
case 5:
this.Text = "Bugün Cuma";
break;
case 6:
this.Text = "Bugün Cumartesi";
break;
}
}

ENUM DEĞİŞKENLERİNİ KULLANMAK
Dallanma değişkeni olarak "enum" tanımlanmış bir tipi kullanabilirsiniz. Aşağıda bu husus örneklendirilmektedir.
Resim

enum Hafta
{
Pazar = 0,
Pazartesi = 1,
Sali = 2,
Carsamba = 3,
Persembe = 4,
Cuma = 5,
Cumartesi = 6
}
private void button3_Click(object sender, EventArgs e)
{
DateTime Tarih;
Tarih = Convert.ToDateTime(textBox1.Text);
int Numara;
Numara = (int)Tarih.DayOfWeek;

Hafta Bugun;
Bugun = Hafta.Pazar + Numara;
switch ((int)Bugun)
{
case 0:
label1.Text = "Bugün Pazar";
break;
case 1:
label1.Text = "Bugün Pazartesi";
break;
case 2:
label1.Text = "Bugün Salı";
break;
case 3:
label1.Text = "Bugün Çarşamba";
break;
case 4:
label1.Text = "Bugün Perşembe";
break;
case 5:
label1.Text = "Bugün Cuma";
break;
case 6:
label1.Text = "Bugün Cumartesi";
break;
}
}
okanbilke@gmail.com
Kullanıcı avatarı
okanbilke
Site Kurucusu
Site Kurucusu
 
Mesajlar: 721
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 15 Mar 2013 13:09
Konum: Ankara

Reklam

Dön C#

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir


  • Reklam