Do Loop Döngüsü

Do Loop Döngüsü
En basit döngü yapısıdır. Hiçbir kontrol yapılmadan Do ve Loop ifadeleri arasındaki
satırların işlem görmesi için kullanılır. Bu yapıda programın terkedilmesi için herhangi bir
kontrol olmadığından, döngü içine karar verme komutlarından birisi ile bir kontrol yapısı
kurulması gerekir, aksi halde program sonsuz döngüye girer. Genel kullanılışı;
Do
Ara işlemler
Loop
Şekil: Do-Loop döngüsü için genel bir akış diyagramı
Örnek
Yandaki örnekte ekrana mesajbox penceresi içinde
sonsuz sayıda (siz programa müdahale edene
kadar), “Ahmet” ifadesi yazılır. Çünkü döngüden
çıkış için herhangi bir kontrol yoktur.
Do
Msgbox (“Ahmet”)
Loop
Yukardaki gibi sonsuz döngülü programlara Ctrl+Break tuş takımı
edilmesi gerekir, aksi halde program sonsuz döngüye girer.
Örnek
Yandaki örnekte ekrana mesajbox penceresi içinde
sadece 5 kez “Ahmet” ifadesi yazılır. Çünkü
döngüden çıkış için döngünün içine bir if bloğu
yerleştirilmiştir.
ile müdahale
Dim t as byte
t=0
Do
t=t+1
If t=5 then
Exit do
else
Msgbox (“Ahmet”)
End if
Loop
Exit komutunun açıklaması döngü işlemlerinin sonundadır
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 1
Do While-Loop Döngüsü
Do While-Loop döngüsünün genel yazım şekli şu şekildedir;
Do While (koşul veya ifade)
Ara işlemler
Loop
Do While döngüsünde önce koşula bakılır. Eğer koşul doğru ise aradaki satırlar Loop
satırına kadar çalıştırılır. Loop satırında tekrar While satırına dönülür. Koşul tekrar kontrol
edilir, koşul doğru ise ara satırlar tekrar çalıştırılır, yanlış ise Loop satırından sonraki ilk
satırdan program çalışmaya devam eder. İç içe Do While döngüleri de kurulabilir. Bu
durumda her Do While döngüsü için mutlaka bir Loop kullanılması gerekir.
Do While Kosul1
Ara işlemler
Do While Kosul2
Ara işlemler
Loop
Ara işlemler
Loop
Şekil: Do While-Loop döngüsü için genel bir akış diyagramı
Örnek
Fact=1
B=2
Do While B<=Sayi
Fact=Fact * B
B=B+1
Loop
Yandaki örnekte, faktöriyel programı Do While döngüsü
ile yazılmıştır. Burada sayaç olarak B değişkeni
kullanılıyor. Eğer faktöriyeli hesaplanacak değer 2 den
küçük ise (1 veya 0), döngü içine girilmemektedir.
Döngü içinde sayaç artımı, birer birer olmaktadır. Sayaç
sayı değerine eşit olduğunda program sona ermektedir.
Örnek
Dim cevap as string = “e”
Do While cevap = “e” OR cevap = “E”
isim = InputBox(“İsmi verin”)
no = InputBox(“numarayı verin”)
cevap = InputBox(“Tamammı devammı (e/h)?”)
Loop
Yandaki
örnekte,
cevap
değişkeninin karşılığı “h” yani
“hayır” olana kadar program do
while
döngüsünün
içinde
kalmaktadır.
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 2
Do-Loop While Döngüsü
Do-Loop While döngüsünün genel yazım şekli şu şekildedir;
Do
Ara işlemler
Loop While (Kosul veya ifade)
Bu döngü tipinde ara işlemler en az bir kez mutlaka işleme girer, daha sonra koşul
kontrol edilir. Eğer koşul doğru ise tekrar Do satırına dönülür ve aradaki işlemler
(satırlar) tekrar icra edilir, yanlış ise döngüden çıkılır. Bu yapıyı da iç içe kullanmamız
mümkündür.
Do While-Loop döngüsü ile Do-Loop While döngüsü arasındaki en önemli fark: Do WhileLoop döngüsünde koşul veya koşullar en başta kontrol edilirken, Do-Loop While
döngüsünde en sonda kontrol edilmektedir.
Do
Ara işlemler
Do
Ara işlemler
Loop While Kosul1
Ara işlemler
Loop While Kosul2
Şekil: Do-Loop While döngüsü için genel bir akış diyagramı
Örnek
Örnek
Fact=1
B=1
Do
Fact=Fact * B
B=B+1
Loop While B<=Sayi
Do
isim = InputBox(“İsmi verin”)
no = InputBox(“numarayı verin”)
cevap = InputBox(“Tamammı devammı (e/h)?”)
Loop While cevap = “e” OR cevap = “E”
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 3
Do Until-Loop Döngüsü
Bu döngünün genel yazım
şekli aşağıdaki gibidir.
Do Until (Kosul veya ifade)
Ara işlemler
Loop
Do Until döngüsünde önce koşula
bakılır. Eğer koşul yanlış ise aradaki
satırlar
Loop
satırına
kadar
çalıştırılır. Loop satırında tekrar Do
Until satırına dönülür. Koşul tekrar
kontrol edilir. Eğer koşul yanlış ise
ara satırlar tekrar çalıştırılır, koşul
doğru ise Loop satırından sonraki ilk
satırdan program çalışmaya devam
eder. Do While-Loop döngüsünden
tek farkı koşul yanlış olduğunda ara
işlemler çalıştırılırken, Do While-Loop
döngüsünde koşul doğru ise ara
işlemler çalıştırılır. İç içe Do UntilLoop döngüleri de kurulabilir. Bu
durumda her Do Until döngüsü için
mutlaka
bir
Loop
kullanmamız
gerekir.
Do Until Kosul1
Ara işlemler
Do Until Kosul2
Ara işlemler
Loop
Ara işlemler
Loop
Örnek
Fact=1
B=Sayi
Do Until B<=1
Fact=Fact * B
B=B-1
Loop
Yandaki örnekte, faktöriyel programı bu kez Do Until
döngüsü ile yazılmıştır. Burada sayaç olarak B değeri
kullanılıyor. Eğer faktöriyeli hesaplanacak değer 2 den
küçük ise (1 veya 0), döngü içine girilmemektedir.
Döngü içinde sayaç azaltımını kendimiz veriyoruz. Sayaç
2 değerine eşit olduğunda program sona ermektedir.
Do-Loop Until Döngüsü
Bu döngünün genel yazım
şekli aşağıdaki gibidir.
Do
Ara işlemler
Loop Until (Kosul veya ifade)
Do Loop Until döngüsünde, ara
işlemler en az bir kez mutlaka
çalıştırılır. Daha sonra Koşul
kontrol edilir. Eğer koşul yanlış
ise tekrar Do satırına dönülür ve
aradaki satır veya satırlar tekrar
çalıştırılır.
Koşul
doğru
ise
döngüden çıkılır. Bu döngüyü de
iç içe kullanmamız mümkündür.
Do
Ara işlemler
Do
Ara işlemler
Loop Until Kosul1
Ara işlemler
Loop Until Kosul2
Örnek
Fact=1
B=1
Do
Fact=Fact * B
B=B+1
Loop Until B>Sayi
Yandaki örnek, faktöriyel hesabını bu kez Do-Loop Until
döngüsü ile gerçekleştirilmiş halini göstermektedir.
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 4
Exit Komutu
Herhangi bir döngü veya yordamın içindeyken, işlem sona ermeden (tamamlanmadan),
bulunulan döngüyü veya yordamı terk etmek için kullanılır.
Exit komutu;

For döngüsünde Exit For,

Do döngülerinde (do loop, do while, do until) Exit Do,

herhangi bir yordamın içindeyken Exit Sub
şeklinde kullanılır.
Örnekler
For A=1 to 5
If A=2 then
Exit for
End if
Next A
A=0
Do while A<6
A=A+1
If A=2 then
Exit do
End if
Loop
Yandaki iki örnekte for ve do döngüleri içindeki
satırlar 5 kez işlem görecekken, A değeri 2
olduğunda, Exit for ve Exit Do komutları sayesinde
sadece 2 kez dönebilmekte ve Next ve Loop
satırlarından sonraki satırlardan itibaren işleme
devam etmektedir.
Program çıktılarının
Msgbox, Debug.Write, Debug.WriteLine ve Listbox
nesnesi ile ekrana yazdırılması
Hazırladığınız programdan elde edilen çıktıları (ekran görüntülerini) msgbox,
debug.write, debug.writeline komutları veya listbox nesnesi ile yazdırabilirsiniz.
Msgbox Komutu: Bunlardan kullanımı en basit
olanı msgbox nesnesidir. Msgbox komutunun
dezavantajı özellikle birden fazla çıktının elde
edildiği programlarda, her bir ekran görüntüsü için
her
defasında
"Tamam"
tuşuna
basma
zorunluluğudur. Örneğin yandaki programda for
döngüsü 1 sayısından 10 sayısına kadar birer artan
sayı üretmekte ve her üretilen sayı msgbox komutu
ile ekranda görüntülenmektedir. Dolayısıyla 10 defa
ekran görüntüsüne karşılık her defasında tamam
tuşuna basılması ve bir sonraki sayıya geçilmesi
gerekmektedir.
Private Sub Form_Load()
For y = 1 To 10
MsgBox y
Next
End Sub
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 5
Debug.Write ve Debug.WriteLine Komutları:
Halbuki elde edilen değerler (msgbox komutunda
olduğu gibi yapılmadan) doğrudan bir pencereye
veya nesneye yazılabilir. Bunun için kullanılacak
yöntemlerden bir tanesi “immediate” penceresidir.
Bu pencere ekrana Ctrl+G ile getirilir veya önceki
programda (msgbox y) satırı yerine (debug.write)
veya (debug.writeline) komutu kullanılarak program
tarafından otomatik olarak açılır. Önceki program ile
yandaki programın tek farkının msgbox y satırı
yerine (debug.writeline y) satırının kullanılmış
olduğuna ve bundan dolayı program tarafından elde
edilen çıktıların ekrana nasıl yazdırıldığına dikkat
edin!.
Programda
(debug.writeline)
komutu
kullanıldığında ve işlem sırası bu komutun olduğu
satıra geldiğinde, VB tarafından ekranın altında
otomatik olarak bir “immediate” penceresi açılır ve
program tarafından elde edilen çıktılar bu pencerede
listelenir (yandaki programı çalıştırdığınız halde
“immediate”
penceresini
ekranın
altında
göremediyseniz, Ctrl+G tuş takımını kullanın).
Private Sub Form_Load()
For y = 1 To 10
Debug.WriteLine (y)
Next
End Sub
Debug.Write ve Debug.WriteLine Komutları arasındaki fark: Debug.Write
komutu, son yazılandan sonra, satır atlamadan yanına yazılanları immediate
penceresine yazmak için kullanılırken, Debug.WriteLine komutu, yanına yazılanları her
defasında ayrı bir satıra yazar.
Debug.Writeline komutu, Debug.Writeline (“”) şeklinde de kullanılır.
Bu durumda ekran görüntüsüne bir boş satır ilave edilecektir
Yukarıdaki ifadelerin örnekleri, aşağıda verilmiştir.
Program
Program
çıktılarının
görünümü
For y = 1 To 3
Debug.WriteLine (y)
Next
Debug.WriteLine (“”)
Debug.WriteLine ("Son Satır")
1
2
3
Program
Program
çıktılarının
görünümü
For y = 1 To 3
Debug.Write (y & " ")
Next
Debug.Write ("Son Satır")
çalıştırıldığında
ekran
immediate penceresindeki
Son Satır
çalıştırıldığında
ekran
immediate penceresindeki
1 2 3 Son Satır
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 6
Listbox nesnesi: Hazırlanan programdan elde edilen ekran görüntülerinin bir nesne
içinde listelenmesi için kullanılacak yöntemlerden bir tanesi, çıktıların listbox
nesnesine ilave ettirilmesidir. Bunun için form ekranına tasarım aşamasında listbox
nesnesinin ilave edilmesi gerekir. Burada listbox nesnesinin iki metodundan
bahsedeceğiz. Birincisi listbox nesnesinin içeriğinin silinmesi için kullanılan clear
metodudur ve listbox1.items.clear() şeklinde kullanılır (burada listbox1 örnek olarak
verilmiştir). İkincisi, listbox nesnesine program tarafından elde edilen değerlerin
ilave edilmesi anlamındaki add metodur ve listbox1.items.add() şeklinde kullanılır.
Aşağıdaki örnek, 1 sayısından 15 sayısına kadar birer artan sayıları elde eden bir for
çevriminin, button1 nesnesi ile ilişkilendirilmesi ve for çevriminden elde edilen
değerlerin listbox nesnesine ilave edilmesi ile ilgilidir. Örnek ile ilgili form ekranları ve
programın kodu aşağıdadır.
Private Sub Button1_Click()
Dim t As Byte
ListBox1.Items.Clear()
For t = 1 To 15
ListBox1.Items.Add("Sayı:" & t)
Next
End Sub
Programın Form tasarım ekranı
Programın çalıştırma ekranı
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 7
Örnek: Basit bir hesap makinesi programının yazılması
Tasarım Ekranı
Label1
Textbox1
Label1
Textbox2
RadioButton
1
RadioButton
2
RadioButton
Button1
Button2
Textbox3
Button3
Amaç
Programdan
beklenenler
1.Sayı ve 2.Sayı kısmına yazılan sayı değerlerinin, birbirlerine göre 4
işlem sonuçlarının bulunması.
1. 1.sayı metin kutusuna (textbox1) bir sayı girilmemiş ama 2.sayı
kutusuna (textbox2) bir sayı girilerek “Hesapla” (button1) tuşuna
basılırsa, “Sonuç” kutusunda (textbox3), “1.sayı değerini
GİRMELİSİNİZ” ifadesi görülsün.
2. 2.sayı metin kutusuna bir sayı girilmemiş ama 1.sayı kutusuna bir
sayı girilerek “Hesapla” tuşuna basılırsa, “Sonuç” kutusunda,
“2.sayı değerini GİRMELİSİNİZ” ifadesi görülsün.
3. Hem 1.sayı metin kutusuna, hem de 2.sayı kutusuna sayı
girilmeden “Hesapla” tuşuna basılırsa, “Sonuç” kutusunda, “1.sayı
ve 2.sayı değerini GİRMELİSİNİZ” ifadesi görülsün.
4. Toplama-Çıkarma-Çarpma-Bölme
işlemlerinden
bir
tanesi
seçilmeden “Hesapla” butonuna basılırsa, “Sonuç” kutusuna,
"İŞLEM SEÇMEDİNİZ" ifadesi görülsün. Not: bu işlemin doğru
olarak
çalışabilmesi için, program
f5 tuşuna basılarak
çalıştırıldığında (form1_load) ve ayrıca “Temizle” (button2) tuşuna
basıldığında, işlemleri gösteren nesnelerin (4 radio button)
öncelikle basılmamış (radiobutton.visible=false) olarak işlemle
girmesi gerekir.
5. Bölme işlemi seçildiğinde, 2.sayı değerinin sıfır (0) olması
probleminin kontrol ettirilmesi ve böyle bir durumda, “Sonuç”
kutusunda, “Payda (2.sayı) sıfır OLAMAZ” ifadesinin görülmesi
sağlanmalıdır.
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 8
Örnek programda, radiobutton nesnesinin birçok özelliğinden
sadece “Checked” özelliğinden faydalanılmıştır. Bu özellik
radiobutton nesnesinin seçilip seçilmediğini kontrol etmek için
kullanılmaktadır. Bu özelliğin True karşılığı nesnenin
seçildiğini, False karşılığı seçilmediğini göstermektedir.
RADIOBUTTON nesnesi:
Program içinde birden fazla
seçenek içinden sadece bir
tanesinin seçilmesi ve ona
göre işlem yapması
durumunda kullanılan bir
nesnedir.
Yukarıdaki 2 radiobutton nesne örneğinin kodları aşağıdaki
gibidir.
RadioButton1.Checked = False
RadioButton2.Checked = True
Programın amaca uygun çalışabilmesi için, form nesnesine 4 işlemin her birini temsil
etmesi amacıyla ve textbox1 ve textbox2 nesnelerine girilen her iki sayıya karşılık aynı
anda sadece bir işlem yapılabileceği için, 4 işlemi temsilen 4 adet radiobutton nesnesi
ilave edilmelidir.
Private Sub Form1_Load()
RadioButton1.Checked
RadioButton2.Checked
RadioButton3.Checked
RadioButton4.Checked
End Sub
=
=
=
=
False
False
False
False
Private Sub Button1_Click()
Dim bsa, isa As Double
bsa = Val(TextBox1.Text)
isa = Val(TextBox2.Text)
If TextBox1.Text = "" And TextBox2.Text = "" Then
TextBox3.Text = "1.sayı ve 2.sayı değerini GİRMELİSİNİZ"
ElseIf TextBox1.Text = "" Then
TextBox3.Text = "1.sayı değerini GİRMELİSİNİZ"
ElseIf TextBox2.Text = "" Then
TextBox3.Text = "2.sayı değerini GİRMELİSİNİZ"
ElseIf RadioButton1.Checked = True Then
TextBox3.Text = bsa + isa
ElseIf RadioButton2.Checked = True Then
TextBox3.Text = bsa - isa
ElseIf RadioButton3.Checked = True Then
TextBox3.Text = bsa * isa
ElseIf RadioButton4.Checked = True Then
Select Case Val(TextBox2.Text)
Case 0
TextBox3.Text = "Payda (2.sayı) sıfır OLAMAZ"
Case Else
TextBox3.Text = bsa / isa
End Select
Else
TextBox3.Text = "İŞLEM SEÇMEDİNİZ"
End If
End Sub
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 9
Private Sub Button2_Click()
RadioButton1.Checked = False
RadioButton2.Checked = False
RadioButton3.Checked = False
RadioButton4.Checked = False
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End Sub
Private Sub Button3_Click()
End
End Sub
Aşağıdaki soruları cevaplandırınız
1
Neden RadioButton nesneleri Form1_Load nesnesinde False olarak işleme alınmıştır?.
2
If TextBox1.Text = "" And TextBox2.Text = "" Then
TextBox3.Text = "1.sayı ve 2.sayı değerini GİRMELİSİNİZ"
ElseIf TextBox1.Text = "" Then
TextBox3.Text = "1.sayı değerini GİRMELİSİNİZ"
ElseIf TextBox2.Text = "" Then
TextBox3.Text = "2.sayı değerini GİRMELİSİNİZ"
Yukarıdaki sıralamanın sebebini açıklayınız, örneğin birinci elseif satırı if satırı yerine
yazılabilir mi? Yani aşağıdaki gibi olabilir mi?
If TextBox1.Text = "" Then
TextBox3.Text = "1.sayı değerini GİRMELİSİNİZ"
ElseIf TextBox1.Text = "" And TextBox2.Text = "" Then
TextBox3.Text = "1.sayı ve 2.sayı değerini GİRMELİSİNİZ"
ElseIf TextBox2.Text = "" Then
TextBox3.Text = "2.sayı değerini GİRMELİSİNİZ"
3
Else
TextBox3.Text = "İŞLEM SEÇMEDİNİZ"
Yukarıdaki satırın yerine amaca uygun yazılabilecek alternatif satır nasıl olabilir.
4
“Hesapla” butonunu programda kullanmadığınızı ve 4 işlem butonlarından herhangi
birine basıldığında işlemin doğrudan yapıldığını düşünerek programı tekrar yazınız
(İpucu: RadioButton1_Click).
Gültekin Çağıl, Bilgisayar Programlama ders notları, Sakarya Üniv. Endüstri Mühendisliği/Hafta 7/Sayfa 10