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
© Copyright 2024 Paperzz