8 Mart 2019 Cuma

C# Ders-5

Döngüler(Loops)

Döngüler, bir işlemin defalarca tekrarlanması gerekiyorsa, aynı kodu tekrar tekrar yazmaktan kurtulmamızı sağlar. Gerçekleştirmek istediğiniz algoritmaya göre işlemin kaç defa tekrarlayacağını belirleyebiliriz. Yaptıkları iş aynı olsa da kullanım şekillerine göre farklılaşan 3 döngü vardır("for" , "while" , "do-while").

"for" Döngü Örneği

İsimleri: "label1" "txtSayi1" "btnHesapla"
Senaryomuz ekran görüntüsünden de anlaşıldığı üzere girilen sayının faktoriyel hesabını yapıp sonucu mesaj kutusu içerisinde gösteren program yazmak.

  • Satir 20: btnHesapla için oluşturulmuş click event kodları
  • Satir 22,23: İhtiyaç duyacağımız değişkenler.
  • Satir 24: Kullanıcının txtSayi1 'e girdiği stringi long tipine parse etmeyi dene, dönüşüm başarıyla tamamlanırsa kontrol değişkenine true ata, dönüştürdüğün veriyi de sayi1 değişkenine ata.(TryParse metodunun bool tipinde geri dönüş yaptığını öğrenmiştik)
  • Satir 26: Eğer kontrol true ise,
  • Satir 28: IDE 'ye for yazıp iki defa TAB tuşuna basarsanız kod parçasını hızlı bir şekilde oluşturabilirsiniz. IDE 'ye kod yazarken çıkan  kod tamamlama önerilerinin sol tarafında, alt kenarı kesik çizgilerden oluşan ufak bir dörtgen görüyorsanız TAB TAB kullanabilirsiniz. Döngüde kullanmak üzere int tipinde "i" değişkeni oluşturuldu ve başlangıç değerini 1 olarak belirledik. Kullanıcının veri olarak 5 girdiğini varsayarsak, faktoriyel hesabı "5! = 1.2.3.4.5" şeklinde hesaplanacağı için i=1 olarak başlattık. Satır sonundaki "i++" döngü her döndüğünde i 'nin değerini 1 artıracak. Ortadaki ifade ise döngünün ne kadar döneceğinin belirlendiği kısım. Biz kullanıcının girdiği sayıdan küçük veya eşit olduğu sürece işleme devam etmesini istediğimiz için görselde ki gibi yazıyoruz.
  • Satır 30: Her döngüde sonuc ve i ile çarpma işlemi yapılıp çarpım sonucunu tekrar "sonuc" değişkenine atıyoruz.
  • Satır 32: Döngüden çıktıktan sonra mesaj kutusu içerisinde "5! = 120" gösterecek şekilde kodluyoruz.(kullanıcının 5 girdiği varsayıldı).
  • Satır 34: "kontrol" true olmadığı zaman çalışacak kod parçası.
  • Satir 36: Kontrol false olduğuna göre kullanıcı long tipine dönüştürülemeyecek bir veri girmiş demektir. Bu durum için uyarı mesajı oluşturuyoruz.

Breakpoint Kullanarak Hata Yakalama

Kırılma noktası anlamına gelir. Yazdığınız kod hatalı sonuç veriyorsa(hiç çalışmıyorsa Error List incelemelisiniz) şüphelendiğiniz kod parçasına bir breakpoint yerleştiriyorsunuz(sonucun yanlış hesaplanması için satır 28'de döngü bitiş şartını i küçüktür sayi1 yapıyoruz) ve F5 ile kodu derlemeye başlıyorsunuz. Veri olarak 5 giriyoruz, derlenme sırası işaretlediğiniz satıra geldiğinde, değişimini izlemek istediğimiz değişkene sağ tıklayıp Add Watch 'a tıklıyoruz.

Tıkladığınız anda ekranın altında izleme kısmı hemen açılacaktır. Aynı işlemi i ve sayi1 için de yapıyoruz. F10 tuşuna basarak yazdığınız kodu satır satır derlerken imlecin hareketini ve değişkenlerin nasıl değiştiğini gözlemleyebilirsiniz.
Veri olarak 5 girdiğimizde 120 sonucunu vermesi gerekirken 24 sonucuyla karşılaştık, çünkü döngünün şartını belirlerken eşittir operatörünü silerek, i sayi1 'den(5) küçük olduğu sürece işleme devam et dedik. Bu yüzden yapması gereken sonuc = 24 * 5 işlemini yapmadı.
Hata yakalamak dışında, yazılan bir kodun nasıl çalıştığını anlamak için de kullanılabildiği için breakpoint kullanımı çok önemlidir.

"while" Döngü Örneği

İsimleri: "label2" "txtToplama" "btnToplamHesapla"
Yeni proje açmadan aynı form üzerinde devam ediyorum. Siz yeni proje açmak isterseniz Ctrl+Shift+N ile açabilirsiniz. Amacımız girilen sayıdan itibaren sıfıra kadar, pozitif bir sayı girildiyse birer birer azaltarak, negatif ise artırarak toplama yapmak. Örneğin 6 için : "6+5+4+3+2+1" işlemini, -6 için : "(-6)+(-5)+(-4)+(-3)+(-2)+(-1)" işlemini yaptırabilmek.
  • Satır 45: İhtiyacımız olacak olan değişkenleri oluşturuyoruz.
  • Satır 46: Kullanıcının girdiği string'i double 'a çeviriyoruz.(numeric(sayısal) olmayan ifadeler girerseniz hata verecektir, bir önceki örnekteki gibi kontrol edebilirsiniz)
  • Satır 49: Eğer girilenSayi 0 'dan büyükse,(negatif/pozitif kontrolü)
  • Satır 51: 0 'a ulaşana kadar döngüye devam edeceğimiz için girilenSayi 0 'a eşit olmadığı sürece döngüye devam etmesi için bu şekilde yazıyoruz. Döngünün hangi durumda dönmesini istiyorsanız parantez içlerine onu yazıyorsunuz. Tam bu noktada dersin başında söylediğim gibi kullanılma amaçlarına göre farklılaşıyorlar. Daha iyi anlaşılması için örnek senaryomuz dışında bir örnek vereyim: Yaptığınız bir uygulamanızda kullanıcı adı ve şifre ile login işlemi olduğunu ve doğru kombinasyonu girene kadar sınırsız deneme hakkının olduğunu varsayalım. Bu işlemi while(kullanıcı adı ve şifre doğru olmadığı sürece) ile kolay bir şekilde yapabilirsiniz. Sonsuza kadar dönen bir for döngüsü kurup "kullanıcı adı ve şifre doğru ise döngüden çık" şeklinde de yapabiliriz ama for genelde başlangıcı ve sonu belli olan işlemlerde kullanılır.
  • Satır 53: girilenSayi 0 'dan küçükse,
  • Satır 55: Döngüyü kır. Bu kontrol ifadesini kullanma sebebimiz: Eğer kullanıcı küsüratlı(decimal, double, float) bir sayı girerse döngü ne kadar devam ederse etsin girilenSayi 0 'a eşit olmadığı için program döngüden çıkamıyor. Satır 53-56 arasını yorum satırı haline getirip Satır 49 'a breakpoint yerleştirip, toplamSonucu ve girilenSayi değişkenlerine Add Watch yaparak gözlemleyebilirsiniz..
  • Satır 57: Her döngüde girilenSayi değerini yapmak istediğimiz gibi öncekilerin toplamlarının üzerine ekliyoruz.
  • Satır 59: Her döngü sonunda girilenSayi 'yi 1 azaltıyoruz.
  • Satır 62: Döngü sonunda sonucu mesaj kutusu ile gösteriyoruz.
Aynı işlemi satır 64,68 ve 73 de sayının negatif olma durumuna göre operatör değişikliği yaparak tekrarlıyoruz. Satır 77: else durumunu kullanıcının 0 girdiği durum için yazıyoruz.

"do-while" Döngü Örneği

while() yanındaki parantez içindeki şart sağlanmazsa kendi bloğundaki kodlar çalıştırmadan geçilir. do-while 'da ise yazılan kodlar 1 kere mutlaka çalıştırıldıktan sonra eğer while şartı sağlanıyorsa döngüye devam edilir. Yazım şekli:
do
{
   .
   . // çalışacak kodlar
   .
}while(şart); 
şeklindedir. Tekrar bir önceki örnek senaryoyu kullanıyoruz. Bileşen isimleri: "label3" "txtDoWhile" "btnDoWhile"
Bir önceki senaryonun kodlarını şekilde gördüğünüz gibi do-while 'a çevirerek ve Satır 99,115 'e ara toplam görmek için mesaj kutusu ekliyoruz. while(girilenSayi != girilenSayi) yaparak while ve do-while farkını gözlemleyebilirsiniz. Kopyala yapıştır yaptığımız için değişken isimlerinin aynı kaldığını fark etmişsinizdir. Daha önce de söylediğim gibi oluşturulan her değişken, oluşturulduğu süslü parantezler içinde geçerlidir.(Kod ile erişim değişikliği yapılmadıysa.)

İYİ ÇALIŞMALAR


Hiç yorum yok:

Yorum Gönder

Son Eklenen

C# Ders-5

Döngüler(Loops) Döngüler, bir işlemin defalarca tekrarlanması gerekiyorsa, aynı kodu tekrar tekrar yazmaktan kurtulmamızı sağlar. Gerçekl...

Popüler Yayınlar