Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

C# While ve Do-While Döngüleri

C# severlere selamlar olsun :)

Bu makalemizde döngülere devam ediyor ve while döngüsünü öğreneceğiz.

Bir önceki makalemizden hatırlarsanız for döngüsünü görmüştük ve for döngüsünün yapısını hatırlarsak genellikle int tipinde sıfırdan başlayan bir değişkeni 1'er 1'er artırarak koşul sağlanmayıncaya dek çalıştırıyorduk.
While döngüsünde ise while deyimi içerisinde if karar yapısı gibi sadece koşulumuzu yazıyor ve döngünün yönünü döngü içerisinde tanımlıyoruz,aşağıda ise while döngüsünün genel yapısını görüyoruz:

while

Gördüğünüz gibi while döngüsü yapı itibariyle for döngüsüne nazaran oldukça sade bir yapıya sahip olmakla birlikte esnek bir yapıya sahip olduğu için kullanımıda kolay oluyor.

While döngüsü ile ilgili küçük bir örnek yapalım ve döngünün nasıl çalıştığını daha rahat anlayalım; örneğimizde kullanıcı istediği herhangi bir sayının üs kuvvetini yazsın ve while döngümüz sonucu hesaplayıp form üzerindeki labela yazdırsın.
Şimdi Visual Studio'yu açıyor ve "whileCS" adında yeni bir Windows Form projesi oluşturalım,ardından formumuzu aşağıdaki gibi tasarlayalım:

windows-form

Formumuz hazır olduğuna göre artık kod yazmaya başlayabiliriz,şimdi butonumuza çift tıklayarak click eventine geçelim.
Öncelikle kullanıcının textboxları boş geçmesini engellemek için if-else karar yapılarını kullanalım:

c#-if-else

Kullanıcı değerleri girdi diyelim,peki ya sayı yerine harf girerse?

Bu durumda try-catch yapısını kullanıyor ve doğru format girip girmediğini anlamak için FormatException sınıfını kullanıyoruz:

try-catch-format-exception

Şimdi değişkenlerimizi tanımlamaya geldik,öncelikle kullanıcının girdiği değerleri yakalayalım ancak kullanıcıya ondalıklı sayı girme şansını tanımak için değerlerimizi bu defa int değil decimal değişkenimizde tutalım:

decimal

Değişkenlerimizi tanımladık ve convert ettik,artık while döngümüzü yazmaya hazırız!

While döngüsünden önce neyi nasıl kodlamamız gerektiği çok önemli çünkü yanlış kodlama hatalı programlamaya ve hatalı programlama bizi yanlış sonuçlara götürebilir,o yüzden önce konuyu matematiksel olarak düşünmeliyiz:

Matematikte üs almak tabanların üs sayısı kadar yan yana çarpılmasıdır,yani 2'nin 5'inci üssünü almak için 2x2x2x2x2=32 formülü ile sonucu bulabiliyoruz.Demek ki while döngümüz üs sayısı kadar dönecek ve her dönüşünde taban sayılarını kendi aralarında çarpacak ancak her yeni çarpımdaki önceki değeri unutmayıp sonraki çarpımla yeniden çarpacak.

Öyle görülüyor ki doğru algoritma konusunda programımızı kodlamamız biraz uğraştıracak ancak korkmayın bir yazılımcının asıl yeteneği kodları ezbere bilmesi değil algoritma yeteneğinin gücüyle doğru orantılıdır ve algoritmik zeka (ben öyle diyorum) deneyim ve azimle gelişir,o yüzden şimdi konuyu anlayarak ve adım adım yaparak öğreneceğiz :)

Öncelikle yapmamız gereken nokta while döngüsünün kaç kez döneceği; mantık olarak üs alma işleminin gerçekleşmesi için taban sayısının kendi arasında en az bir kez çarpılması gerekir, yani 1 üzeri 1 eşittir 1 gibi.O halde ilk önce üssün kaç kez döneceğine dair bir değişken tanımlamalıyız:

c#-decimal-variable

İlk değişkenimizi tanımladık,şimdi tüm taban sayılarının kendi aralarında çarpıldıktan sonra ondalıklı bir sayı çıkma ihtimaline sahip son değeri tutan bir değişkenine ihtiyacımız var,bu değişkenin başlangıç değerini 1 veriyoruz.
Eğer önceki makalelerimizde olduğu gibi sıfır verseydik tabanların çarpımlarının sonucu ne olursa olsun sıfırla çarpılırlarsa sonuç sıfır olur ve program hatalı çalışırdı:

while-algoritma

Şimdi geldik while döngümüzü kurmaya:

c#-while

Şu anda döngümüz üssü kadar dönmeye hazır,şimdi ise her dönüşünde taban sayılarını çarpıp önceki çarpım değerini tutabilmeye geldi:

c#-operand

Sonuç değişkenimiz her taban sayısıyla tekrar tekrar çarpılacak ve üs alma işlemi gerçekleşmiş olacak ancak nereye kadar tekrar çarpılması gerektiğini tam bu noktada gösteriyoruz.Diyoruz ki madem sayılar üs sayısı kadar çarpılacak o halde az önce belirlediğimiz dönüş sayısı üs kadar olacak ve bunu sağlamanın yolu da döngü içerisinde her dönüş anında dönüş sayısını 1 artırmak:

variable++

Burada döngünün nasıl çalıştığını bir hayal edelim; 2 üssü 5 sayısını girdiğimizi varsayarsak while döngüsü,başlangıç değeri 1 olan dönüş sayısının 5'ten küçük olmadığını kontrol edecek ve koşul sağlandığı için başlangıç değeri 1 olan sonuç değişkenini taban sayımız olan 2 ile çarpacak.
Böylece ilk sonucumuz 1x2=2 olacak.Ardından dönüş sayımızı 1 artırarak 2 yapacağız ve 2'nin 5'ten küçük olup olmadığına bakacak ve yine döngü başlayıp önceki sonuç değişkenimiz olan 1x2=2'yi yeniden 2 ile çarpıp sonucu 4 yapacak.Bu döngü dönüş sayısı 6 olduğunda son bulacak çünkü 6 sayısı 5'ten küçük olmadığı için while döngüsü son bulacak ve son sonucumuz 32 olarak kalacak.

Buraya kadar son sonucumuzu bulduğumuza göre döngü son bulmuş ve gelen değeri labela yazdırmaya hazırız demektir:

label.text

Dikkat ederseniz son sonucu labela yazdırdığımız yer while döngüsünün içinde değil dışında yer alıyor,bunun nedeni while döngüsü her dönüşünde sonuç değişkenini yeniden değerlendirip o anda labela sonucu defalarca yazdırıyor olacak ve programlama hatası yapmış olacaktır.
O yüzden sonuç değişkenimiz döngü sonunda son değerini aldığında sonucu while döngüsü dışında yazdırıyoruz.Şimdi programımızı test edelim:

c#-form

windows-form-label

Görüldüğü gibi while döngüsü ile üs alma işlemlerini artık kolaylıkla hesaplayabiliyoruz :)


Makalemizi sonlandırmadan önce while döngüsünün bir uzantısı olduğunu varsaydığım basit bir döngüyü daha öğreneceğiz: Do-While

Do-While döngüsü while döngüsüne oldukça benziyor ancak do while döngüsünde önce iş sonra kontrol mantığı güdüldüğü için while deyimi içerisindeki koşul sağlanmasa bile kodlar bir defalığına çalışmış oluyor.

Do-While döngüsünün yapısı ise şu şekilde:

do-while

Döngü yapısına bakarsak do önce while sonra yazılıyor ve while döngüsünün tersine çalıştırılacak kodlar do deyimi içerisinde yer alıyor.
Programın kodları satır satır çalıştırdığını varsayarsak önce do içerisindeki kodlar çalışıyor ardından while döngüsü içerisindeki koşul sağlanıyorsa kodlar tekrar çalıştırılıyor,koşul sağlanmıyorsa döngüye tekrar girilmiyor.

Basit bir örnek olması için şöyle bir do-while döngüsü kuruyoruz:

do-while-test

Şimdi programı tekrar çalıştıralım:

c#-do-while-koşul

Gördüğünüz gibi do-while döngüsü koşul sağlanmasa bile bir kez çalışabiliyor,bu döngüyü şimdiye kadar hiç kullanmadım ancak gereksiz bir döngü olduğunu söyleyemeyiz çünkü illa ki bir projede kullanılması gerekebilir tabi umarım o şans size de kısmet olur :)

While ve Do-While döngüleriyle ilgili anlatacaklarım buraya kadar,faydalı olmasını umarım.

Bir sonraki makalemizde görüşmek dileğiyle,hoşçakalın :)

Projeyi İndir

8 Yorum:

  1. EmRe
    9/3/2014

    Gayet Başarılı.

  2. Serkan Çamur
    11/2/2013

    Sn.Ulaş Bey, Öneriniz için teşekkür ederim,ilerleyen makalelerimizde daha fazla örnekler sunmaya çalışacağım.

  3. ulaş
    10/30/2013

    siteniz ve açıklamalarınız çok güzel ama örnekleriniz çok az daha çok örnek olursa daha iyi olabilir..

  4. Serkan Çamur
    11/23/2013

    Sn.Zeynep Hnm, Hesaplama öncesinde Textbox.Text.Clear(); metodunu uygularsanız program önce sonucu yazan değeri temizleyecek ve daha sonra sizin yeni sonucunuzu görüntüleyecektir.

  5. zeynep
    11/21/2013

    örnekleriniz biraz daha fazla olabilir :)

  6. zeynep
    11/21/2013

    while döngüsünde iki sayı arasında toplama ve çarpma yapan programı yazdık ama textin içinde sonuçları temizlemeden diğer sonucu üzerine yazıyo napabilirim acaba bana yardımcı olur musunuz ?

  7. programcı
    3/23/2014

    10. sınıf c# d while örnekleri lazımdı hiç biri benim istediklerimden değilll !

  8. ömer
    3/25/2014

    çok karışık bunlar

Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu