Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 0 KONTROL YAPILARI (CONTROL STRUCTURES) GĠRĠġ Kontrol yapıları, program akışını değiştirmek için kullanılan yapılardır. Yapısal programlama dillerinde programın işleyişi ilk satırdan son satıra doğru ilerler ve bu işleyiş sırası, şartlı veya şartsız olarak değiştirilebilir. İşte; programın işleyiş yönünün şartlı veya şartsız olarak değiştirilmesi işlemine dallanma (branching) denir. Dallanma işlemini gerçekleştiren komutlara da kontrol komutları denir. Program akışının değişmediği sıralı yapıları saymaz isek seçimli ve tekrarlı yapılar olmak üzere iki farklı tipte kontrol yapısı ve komutları mevcuttur. Programın işleyiş yönünü şartsız olarak değiştirmede GOTO ( Git) deyimi kullanılır. Kullanım Şekli; GoTo <etiket> şeklindedir. Yapısal programlamada GOTO komutunu sık kullanmaktan kaçınmak gerekir. GOTO kullanımı, hata kontrolü ve program takibini zorlaştırır. NOT: GOTO komutu yerine seçimli ve tekrarlı kontrol yapıları kullanılmalıdır. SIRALI YAPI (SEQUENCE STRUCTURE) Sıralı yapı, komutların sırası ile gerçekleştiği en basit kontrol yapısıdır. Program işleyişi ilk satırdan son satıra doğru sırası ile gerçekleşir. Tek girişli, tek çıkışlı basit bir kontrol yapısıdır.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 1 ġekil 3.1. Sıralı Yapı SEÇĠMLĠ (KARAR) YAPILAR (SELECTION STRUCTURES) Seçimli (selection) yapıda bir şarta (koşula) bağlı olarak bir ya da daha fazla seçeneklerden bir tanesine dallanma işlemi gerçekleştirilir. Şartlı dallanma işlemi sayesinde, program şarta bağlı olarak hangi işlemi yapacağına karar verir. Visual Basic, Java gibi dillerde üç adet seçme işlemini gerçekleştiren yapı vardır. Bunlar IF, IF / ELSE, SELECT( SWITCH) CASE yapılarıdır. TEK SEÇĠMLĠ YAPI ( IF/THEN DEYĠMĠ) Koşula bağlı olarak tek bir işlemi yerine getiren yani şartlı dallanma işlemini gerçekleştiren yapıdır. Hemen hemen tüm programlama dillerinde bu işlem için IF deyimi kullanılır. Tek seçimli yapılara örnek verirsek; Eğer Hava yağmurlu Ġse şemsiyeni al. Eğer Yemek pişti Ġse ocağın altını kapat Eğer Aldığın Not 50 den fazla Ġse sınavı geçtin
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 2 Şeklindeki ifadelerde bir koşula bağlı olarak tek bir işlem gerçekleşir. Koşul doğru (true) ise işlem yapılır. Koşul yanlış (false) ise herhangi bir işlem yapılmaz, program işleyişi bir alt satırdan devam eder. ġekil 3.2. Tek Seçimli Yapı (IF/THEN deyimi) Örnek 3.1. Dışardan girilen Sayı sıfırdan büyük ise girilen sayının karesini alan programı yazınız. Algoritması; 1. Başla 2. Sayı gir (sayi) 3. Eğer sayi >0 ise kare=sayi^2 4. Yaz kare yi 5. Dur VB Dilinde Kodlanması; Sayi=Val(Inputbox( Sayı gir )) IF sayi >0 THEN kare=sayi^2 END IF PRINT kare NOT: IF li ifade tek bir satıra sığmıyorsa END IF ile sonlandırılır ÇĠFT SEÇĠMLĠ YAPI ( IF /THEN / ELSE DEYĠMĠ )
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 3 Bu kullanımda eğer (IF) den sonra verilen şart sağlanırsa <işlem 1> şart sağlanmazsa ELSE den sonraki < işlem 2 >gerçekleştirilir. EĞER < koşul > doğru ĠSE < işlem 1 > yap değilse < işlem 2> yap. ġekil 3.3. Çift Seçimli Yapı (IF/THEN/ELSE deyimi) Kullanım ġekli; a). b). IF < Şart >THEN <İşlem 1> ELSE <İşlem 2> IF <Şart> THEN <Yapılacak İşlemler 1> ELSE <Yapılacak İşlemler 2> END IF NOT: Bu kullanım şekilleri arasındaki tek fark If /Then yapısı tek satıra sığmıyorsa End If komutu ile sonlandırılmaktadır. NOT: Koşul kısmında karşılaştırma operatörlerinden =, < >, >, <, >=, <= biri mutlaka kullanılmalıdır. Örnek 3.2. Dışardan girilen nota göre öğrencinin o dersten geçip, geçmediğini ekranda gösteren programı yazınız. Algoritması; 1. Başla
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 4 2. Eğer öğrencinin notu 50 den büyük veya eşitse Yaz Geçti Değilse Yaz Kaldı 3. Dur VB Dilinde Kodlanması; Dim not1 As Integer not1 = Val(InputBox("Notu giriniz")) If not1 >= 50 Then Print "Geçti" End If If not1 < 50 Then Print "Kaldı" End If IIF FONKSĠYONU: IF deyiminin kısıtlı bir şeklidir. Yalnızca iki olasılığın söz konusu olduğu durumlarda IF /THEN/ELSE deyimi yerine IIF fonksiyonu kullanılabilir c). Kullanım ġekli: IIF (Koşul, birinci ifade, ikinci ifade) Örnek 3.3. Örnek 3.2 i IIF Fonksiyonunu kullanarak yazınız. Dim not1 as integer, sonuc as string not1=val(inputbox( Notu giriniz )) sonuc = IIf (not1 >= 50, "Geçti", "Kaldı") Print sonuc Örnek 3.4. Dışardan girilen sayının negatif mi, pozitif mi olduğunu ekranda gösteren programı yazınız. Bu programı 3 farklı şekilde kodlayabiliriz. Doğal olarak üçü de aynı sonucu verecektir. a). sayi=val(inputbox( Sayı Giriniz )) IF sayi<0 THEN
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 5 PRINT Sayı Negatif ELSE PRINT Sayı Pozitif END IF b) c) sayi=val(inputbox( Sayı Giriniz )) IF sayi<0 THEN PRINT Sayı Negatif ELSE PRINT Sayı Pozitif sayi=val(inputbox( Sayı Giriniz )) Print IIF( sayi<0, Sayı Negatif, Sayı Pozitif ) ÇOK SEÇĠMLĠ YAPI ( Ġç Ġçe IF ya da Select Case Yapısı ) Bu yapıda koşula veya koşullara bağlı olarak ikiden fazla seçim varsa Select Case deyimi veya iç içe IF/THEN/ELSE yapıları kullanılır. Yani bu yapıda birden fazla karar yapısı iç içe kullanılır. ġekil 3.4.Çoklu Seçim Yapıları (Select Case Deyimi)
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 6 ĠÇ ĠÇE IF/ ELSEIF YAPISI Daha önce belirttiğimiz gibi koşul sayısı ikiden fazla olduğunda kullanılacak yapılardan biridir. İç içe IF yapısında kontrol edilmesi gereken koşul sayısının bir eksiği kadar IF komutu kullanılır. Kullanım ġekli; IF <Koşul 1> Then Yapılacak İşlemler 1 ELSEIF <Koşul 2> Then Yapılacak İşlemler 2 ELSEIF <Koşul 3> Then Yapılacak İşlemler 3 ELSE Yapılacak İşlemler 4 END IF SELECT CASE YAPISI Girilen değişkenin belirli değerlerine göre yapılacak farklı işlemlerin seçiminde kullanılır. Select Case deyimi tek bir değişkenin değerine göre, sınırsız sayıda işlem yapma imkânı veren bir komuttur. Kullanım ġekli; Select Case değişken Case d1 Değişkenin d1 değeri aldığı durumlarda yapılacak işlemler Case d2 Değişkenin d2 değeri aldığı durumlarda yapılacak işlemler Case d3 to d9
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 7 Case Is > d10 Case Else End Select d3 ve d9 aralığındaki tüm değerler için yapılacak işlemler Değişkenin d10 dan daha büyük değerler aldığında yapılacak işlemler Değişkenin farklı değerler aldığı durumlarda yapılacak işlemler NOT: Koşul sayısının 4 den fazla olduğu durumlarda iç içe IF ya da Select Case yapısı kullanılır. Örnek 3.5: Girilen yaş değerine göre kişinin durumunu aşağıdaki kriterlere göre bulan programı yazınız. Algoritması; 1.Başla
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 8 2.Yaş Değerini gir 3.Eğer Girilen Yaş Değeri 0 ile 5 arasında ise Bebek 4.Değilse-Eğer 5 ile 14 arasında ise Çocuk 5.Değilse-Eğer 15 ile 35 arasında ise Genç 6.Değilse-Eğer 36 ile 45 arasında ise Orta Yaşlı Değilse İhtiyar Yaz 7.Dur Algoritmasını oluşturduğumuz programı 3 farklı komut yapısı ile Visual Basic dilinde kodunu yazarsak; a) Ġç içe IF / THEN / ELSE kullanarak Dim yas As Integer yas = Val(InputBox("Yaşı giriniz")) If yas >= 0 And yas <= 5 Then Print "Bebek" ElseIf yas > 5 And yas <= 14 Then Print "Çocuk" ElseIf yas > 15 And yas <= 35 Then Print "Genç" ElseIf yas > 35 And yas <= 45 Then Print "Orta Yaşlı" Else Print "İhtiyar" End If b) Select Case Deyimini kullanarak; Cls yas = Val(InputBox("Yaşı Giriniz")) Select Case yas Case 0 To 5: Print "BEBEK" Case 6 To 14 MsgBox("ÇOCUK") Case 15 To 35: Print "GENÇ" Case 36 To 45: Print "ORTA YAŞLI" Case Else Print "İHTİYAR"
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 9 End Select c) Switch komutunu kullanarak (Visual Basic 2010 da kaldırıldı); Cls Dim yas as integer, sonuc as string yas = Val(InputBox("Yaşı Giriniz")) Sonuc = Switch(yas <= 5, "BEBEK",yas <= 15, "ÇOCUK", yas <= 35, "GENÇ", _ yas <= 45, "ORTA YAŞLI", yas > 45, "İHTİYAR") Print Sonuc NOT: Visual Basic dilinde kod yazımı bir alt satırdan itibaren devam edecekse boģluk ve _ iģareti konur. Choose FONKSĠYONU: İkiden fazla çoklu seçimlerde IF /THEN/ELSE veya IIF yerine choose fonksiyonu kullanılabilir c). Kullanım ġekli: Choose (Değişken, birinci değer, ikinci değer, üçüncü değer, ) Örnek 3.6: Girilen ay numarasına göre ayın ismini yazan program Dim ay As Integer, sonuc As String ay = Val(InputBox("ay değerini giriniz")) sonuc = Choose(ay, "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık") MsgBox(sonuc)
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 10 Örnek : Select Case komutları ile dört iģlem yapan programı yazınız. Sub Main() Dim sayi1, sayi2 As Integer Dim sonuc As Single Dim islec As String sayi1 = Val(InputBox("birinci sayi")) sayi2 = Val(InputBox("ikinci sayi")) islec = InputBox("işlem operatotorunu giriniz") Select Case islec Case "+" : sonuc = sayi1 + sayi2 Case "-" : sonuc = sayi1 - sayi2 Case "*" : sonuc = sayi1 * sayi2 Case "/" : sonuc = sayi1 / sayi2 Case "^" : sonuc = sayi1 ^ sayi2 End Select MsgBox("sonuc=" & sonuc) Uygulama Örneği: Aşağıdaki hesap makinesini gerçekleştiriniz.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 11 Public Class Form1 Dim sayi1 As Single Dim sayi2 As Single Dim sonuc As Double Dim islec As String Private Sub cmd0_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd0.click text1.text = text1.text & "0" Private Sub cmd1_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd1.click text1.text = text1.text & "1" Private Sub cmd2_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd2.click text1.text = text1.text & "2" Private Sub cmd3_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd3.click text1.text = text1.text & "3" Private Sub cmd4_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd4.click text1.text = text1.text & "4" Private Sub cmd5_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd5.click text1.text = text1.text & "5" Private Sub cmd6_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd6.click text1.text = text1.text & "6" Private Sub cmd7_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd7.click text1.text = text1.text & "7" Private Sub cmd8_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd8.click text1.text = text1.text & "8" Private Sub cmd9_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmd9.click text1.text = text1.text & "9" Private Sub cmdesit_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdesit.click
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 12 sayi2 = Val(text1.Text) Select Case islec Case "+" : sonuc = sayi1 + sayi2 Case "-" : sonuc = sayi1 - sayi2 Case "*" : sonuc = sayi1 * sayi2 Case "/" : sonuc = sayi1 / sayi2 Case "^" : sonuc = sayi1 ^ sayi2 End Select text1.text = sonuc Private Sub cmdtopla_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdtopla.click sayi1 = Convert.ToSingle(text1.Text) text1.clear() islec = "+" Private Sub cmdnokta_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdnokta.click text1.text = text1.text & "." Private Sub cmdcikar_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdcikar.click sayi1 = Convert.ToSingle(text1.Text) text1.clear() islec = "-" Private Sub cmdus_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdus.click sayi1 = Convert.ToSingle(text1.Text) text1.clear() islec = "^" Private Sub cmdkarakok_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdkarakok.click text1.text = Math.Sqrt(Val(text1.Text)) Private Sub cmdclear_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdclear.click text1.clear() Private Sub cmdcarp_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdcarp.click sayi1 = Convert.ToSingle(text1.Text) text1.clear() islec = "*" Private Sub cmdbol_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdbol.click sayi1 = Convert.ToSingle(text1.Text) text1.clear() islec = "/"
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 13 Private Sub cmdyuzde_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles cmdyuzde.click text1.text = (Val(text1.Text)) / 100 End Class TEKRARLI YAPILAR -DÖNGÜLER (REPETITION STRUCTURES - LOOPS) Algoritma geliştirirken bazı işlemleri sürekli tekrarlanmamız gerekir. Tekrar edilen işlemleri göstermenin ya da ifade etmenin daha kolay ve anlaşılır bir yolu vardır, bu yola döngü ya da tekrarlı yapılar denir. Tekrarlama işleminin kaç kez yapılacağının baştan belli olduğu yapılara tekrar sayısı belli olan döngüler (for next döngüsü gibi), tekrarlamanın bitişinin koşula bağlı olduğu diğer bir ifade ile koşul gerçekleştiği veya gerçekleşmediği sürece işlemlerin tekrar ettiği yapılara tekrar sayısı koģula bağlı döngüler ( Do While.. Loop, Do Until Loop döngüleri gibi ) denir. Örnek vermek gerekirse 1 den 10 a kadar sayıları toplayan bir program yazdığınızda 9 kez tekrarlama yaptırıyorsanız bu tekrarlama sayısının başlangıçta belli olduğu anlamına gelir. Ancak girilen sayı sıfırdan farklı olduğu sürece sayının karesini alan bir programda tekrar sayısını baştan bilemeyiz. TEKRAR SAYISI BELLĠ OLAN DÖNGÜLER Daha önceki bölümlerde işlemleri tekrar etmek için Sayaç kullanmıştık. Sayaç değişkenine başlangıç değerini atadıktan sonra artırma ya da azaltma işlemi yapıyorduk ve sayacın son değerine ulaşıp ulaşmadığını her işlemden sonra kontrol ediyorduk. Döngü yapıları bu işlemleri oldukça basitleştirmektedir. Tekrar sayısının baştan belli olduğu döngülere en güzel örnek For / Next döngü yapılarıdır. Bu yapının akış şeması aşağıda gösterilmiştir.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 14 ġekil 3.5. Tekrar Sayısı Belli Olan Döngüler ( For / Next Deyimi ) Döngü Sonu: Döngü değişkeninin son değere ulaşıp ulaşmadığını kontrol eder. Bir nevi döngü yapısının patronudur. Döngü değiģkeni: Döngü yapısının tekrarının denetlenmesi amacı ile kullanılan değişkendir. Ġlk değer: Döngü değişkeninin alacağı ilk değerdir. Son değer: Döngü değişkeninin alacağı son değerdir. ArtıĢ miktarı: Döngü Değişkeninin ilk değerden son değere kadar alacağı değerlerdeki artış miktarıdır. Artış miktarı belirtilmez ise bu değer bir (1) kabul edilir. Tekrarlanan ĠĢlemler: Döngü içerisinde yapılan işlemlerdir. For / Next Deyiminin Kullanım ġekli; FOR değişken= ilk değer TO Son değer [ Step Artış Miktarı ] * NEXT değişken * ArtıĢ Miktarı ( STEP komutu ) isteğe bağlıdır, belirtilmez ise artım miktarı 1 kabul edilir Örnek 3.9a. 2 den 20 ye kadar olan çift sayıları ekranda gösteren programı döngü ile yazınız. For s=2 to 20 Step 2 Print s; Next s Komut satırlarını yazmamız yeterlidir.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 15 NOT: Programın Ekran Çıktısı şeklindedir. Örnek 3.9b: 1 den 10 a kadar çift sayıların toplamını veren programın konsol uygulaması: Sub Main() Dim i, t As Integer For i = 1 To 10 Step 2 t += i Next Console.WriteLine(t) Console.ReadKey() NOT: For/Next döngüsünden çıkmak için Exit For deyimi kullanılır. Örnek 3.10. Aşağıdaki programın ekran çıktısı ne olur. Dim i As Integer For i = 1 To 10 If i = 6 Then Exit For Döngüden çıkılıyor End If Print i; Next i Print "döngüden çıkıldığında i değeri ="; i Program normalde 1 den 10 kadar yazması gerekirken i=6 değerine ulaştığında döngüden çıkılır ve Programın ekran çıktısı şeklindedir Örnek 3.11. 5 defa ekrana HANZAR yazan programı döngü ile yapınız. Dim i As Integer For i = 1 To 5 Print "hanzar"
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 16 Ekran çıktısı: Next i Örnek 3.12. Dışardan girilen sayının faktöriyelini alan programı yazınız. Algoritması; 1. Başla 2. Faktöriyeli alınacak Sayıyı gir ( N ) 3. Faktöriyel değişkenini 1 e eşitle (Fakt=1) 4. Döngü oluştur ( For I= 1 TO N ) 5. Döngü içerisinde gerçekleşecek işlemi yaz. ( Fakt=Fakt * I ) 6. Döngüyü Sonlandır ( Next I ) 7. Sonucu göster ( Fakt ) 8. Dur VB Dilinde Kodlanması; Dim n As Integer, fakt As Integer n = Val(InputBox("faktöriyeli alınacak sayıyı giriniz")) fakt = 1 For i = 1 To n fakt = fakt * i Next i Print n; "!=" ; fakt Programın Ekran Çıktısı; 5 sayısı girildiğinde yandaki sonuç elde edilmiştir. Örnek 3.13. 0 dan 100 e kadar olan tek sayıların toplamını bulan programı yazınız. Algoritması ;
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 17 1. Başla 2. Toplam değişkenini sıfıra eşitle(top=0) 3. Sadece tek sayıları sayan Döngüyü başlat (For a=1 to 100 step 2) 4. Tek sayıları birbiri ile topla (Top=Top + a) 5. Döngüyü sonlandır ( Next a) 6. Toplam değeri ekranda göster 7. Dur VB Dilinde Kodlanması; Cls Top=0 For a=1 To 100 Step 2 Top=Top+a Next a Print Toplam= ; Top Programın ekran çıktısı; Toplam=2500 olarak elde ettik. Örnek 3.14. Klavyeden girilen iki pozitif tamsayının çarpımını çarpma operatörü kullanılmadan bulan programı yazınız. Algoritması ; 1. Başla 2. Toplama değişkenini sıfıra eşitle { Carp=0 } 3. Birbiri ile çarpılacak olan sayıları gir { S1, S2 } 4. Döngüyü başlat {1 den ilk sayıya kadar -- For I= 1 To S1 } 5. İkinci sayıyı kendisiyle topla { Carp=Carp+S2 } 6. Döngüyü sonlandır { Next I } 7.Toplam sonucunu ekrana yaz ( S1*S2=Carp) 8. Dur VB Dilinde Kodlanması; Cls Dim Carp as integer, S1 as integer, S2 as integer, I as integer Carp=0 S1=Val( Inputbox( 1.Sayıyı Giriniz: ))
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 18 S2=Val( Inputbox( 2.Sayıyı Giriniz: )) For I= 1 To S1 Carp=Carp+S2 Next I Print S1; * ; S2 ; = ; Carp Program, Örneğin 3*4 işlemini, çarpma operatörünü kullanmadan 4 sayısını 3 kez toplayarak gerçekleştirir. Örnek: Dim numara = {125, 138, 156, 205, 308, 947} Dim dizi As Integer For Each dizi In numara Console.Write(dizi & " ") Next Console.ReadKey() Programın ekran çıktısı: TEKRAR SAYISI KOġULA BAĞLI DÖNGÜLER İşlemlerin ne kadar tekrarlanacağının baştan belli olmadığı ancak bir koşulun doğru ya da yanlış olmasına bağlı olarak tekrar sayısının belirlendiği bu döngüleri, koşul kontrolünün yapıldığı yere göre ikiye ayırırız. Birincisinde program başında koşul kontrolü yapılır,
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 19 diğerinde ise bir defa işlem yapıldıktan sonra koşulun doğru ya da yanlış olmasına göre işlem tekrarı yapılır. Koşul denetiminin döngü başında gerçekleştiği yapılarda Do While / Loop, Do Until / Loop ve While / End While deyimleri kullanılırken, koşul denetiminin bir defa işlem gerçekleştikten sonra yapıldığı döngülerde Do / Loop While ve Do / Loop Until deyimleri kullanılır. Bu deyimlerin akış şemaları ile gösterimi aşağıda verilmiştir. ġekil 3.6. Do / Loop döngülerinin Akış şemaları ile gösterimi NOT: Do While / Loop döngüsü ile While / End While döngüsü aynı işleve sahiptir. Ancak While / End While döngüsü yerine daha hızlı çalışan Do While / Loop döngüsü tercih edilir.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 20 DO - LOOP DÖNGÜLERĠNĠN KULLANIM ġekġllerġ a) Do While (koşul) Loop (İşlemler) Sürece < koģul > yap (iģlemler) Verilen koşul doğru olduğu sürece belirtilen işlemler tekrar edilir. Verilen Koşul koşul kontrol doğru işlemi olduğu döngünün sürece belirtilen başında yapılır. işlemler tekrar edilir. Koşul kontrol işlemi döngünün baģında yapılır. b) Do (İşlemler) Loop While (Koşul) Tekrarla (iģlemler) ta ki <koģul> Bir defa işlem yapıldıktan sonra koşul doğru olduğu sürece belirtilen işlemler tekrar edilir. Koşul kontrol işlemi döngünün sonunda yapılır. c) Do Until (Koşul) Loop (İşlemler) Sürece < koģul > yap (iģlemler) Verilen koşul yanlıģ olduğu sürece belirtilen işlemler tekrar edilir. Koşul kontrol işlemi döngünün baģında yapılır. d) Do (İşlemler) Loop Until (Koşul) Tekrarla (iģlemler) ta ki <koģul> Bir defa işlem yapıldıktan sonra koşul yanlıģ olduğu sürece belirtilen işlemler tekrar edilir. Koşul kontrol işlemi döngünün sonunda yapılır. NOT: While ifadesi koşul doğru olduğu sürece işlem yapılacağını, Until ifadesi ise koşul yanlış olduğu sürece işlem yapılacağını belirtir. Örnek 3.15. Aşağıdaki programların ekran çıktılarını dikkatle inceleyiniz.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 21
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 22 NOT: Döngü yapılarında muhakkak döngüden çıkışı gerçekleştirecek yani koşulu sağlayacak bir ifade döngü içerisinde bulunmalıdır. Aksi takdirde program çıktı vermez, kısır döngüye girer. Örnek 3.16. AĢağıdaki programın ekran çıktısı ne olur. Program normalde 1 den 10 kadar olan sayıların toplamını yapıyor ancak değişkenler ilk değerlerini aldıktan sonra Exit Do ifadesi döngüden çıkmamıza neden olur ve Ekrana t nin değerini 1 olarak yazılır. Programdan Exit Do ifadesini çıkarırsak ekrana 55 değerini yazar. NOT: Do / Loop döngülerinden çıkmak için Exit Do deyimi kullanılır. Örnek 3.18. Dışardan girilen sayı sıfırdan farklı olduğu sürece o sayının karesini alan programı yazınız. Algoritması; 1. Başla 2. Döngüyü başlat 3. Sayı gir 4. Karesini al (Kare=Sayi^2) 5. Sonucu ekranda göster 6. Döngü kontrolü yap (sayi <>0) 7. Dur VB Dilinde Kodlanması;
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 23 Dim sayi As Integer Do sayi = Val(InputBox("bir sayı giriniz")) Kare = sayi ^ 2 Print Kare Loop While sayi <> 0 ĠÇ ĠÇE DÖNGÜ KULLANIMI Birden fazla döngü ve kontrol yapısını iç içe kullanabiliriz. Sıralama, matris veya tablo gibi iki üç boyutlu işlemlerin yapıldığı uygulamalarda sıklıkla iç içe döngüleri kullanırız. İç içe döngü yapıları, bir döngü içerisinde başka bir döngü ya da döngülerin kullanıldığı yapılardır. İç içe döngülere verebileceğimiz en güzel örneklerden biri zaman sistemimizdir. Bir gün, 24 saatten, 1 saat 60 dakikadan, 1 dakika 60 saniyeden ibarettir ve hepsi iç içedir. Zaman sisteminde en içteki döngüyü saniye temsil etmektedir. Saniye en son değerine ulaştığında yani 60 değerini aldığında dıştaki döngü bir artar yani dakika bir artar. Dakika en son değerine ulaştığında dıştaki döngü yani saat bir artar. Saat son değerine ulaştığında yani 24 olduğunda bir gün tamamlanmış olur. ġekil 3.7. Bir yıllık zaman döngümüz
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 24 Zaman sistemimize dikkat edilirse, saniye tamamlanmadan dakika, dakika tamamlanmadan saat başlamaz. Yani dakika saniyenin, saat dakikanın önüne geçmez, birbirine karışmaz. Benzer şekilde ç içe döngü kurulurken dikkat edilmesi gereken en önemli nokta, içteki döngü tamamen bitmeden dıştaki döngüye geçilmemesidir. Yani döngülerin birbiri ile çakışmamasına dikkat edilmelidir. ġekil 3.8. İç içe For / Next Döngüleri ġekil 3.9. İç içe Do/ Loop Döngüleri NOT: İç içe döngülerde For / Next döngüsü ile Do / Loop döngüleri birlikte kullanılabilir Örnek 3.19. Şekildeki Çarpım Tablosunu oluşturup ekranda gösteren programı yazınız.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 25 İç içe For / Next döngülerine en güzel örnek çarpım tablosudur. İçteki döngünün her tamamlanışından sonra dıştaki döngü otomatik olarak bir artar. Dıştaki döngü değişkeni i=1 iken içteki döngü değişkeni j, 1 den 10 a kadar değer alır. j=10 olduktan sonra i değişkeni 2 değerini alır. i=2 iken j değişkeni tekrar 1 den 10 a kadar değer alır ve bu işlem 10 kez tekrarlanır. Yani toplam 100 kez çarpma işlemi gerçekleşir. Algoritması; VB Dilinde Kodlanması; Örnek 3.22. Aşağıdaki ekran çıktısını veren programı yazınız.
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 26 Programın VB Dilinde Kodlanması; a = "BULENT" For i = 1 To Len(a) harf = Mid(a, i, 1) For j = 1 To i Print harf; Next j Print Next i NOT: Örneğimizde MID komutu String bir ifadenin (a), istenilen bir karakterinden başlamak üzere (i), istenilen sayıda (1) karakterini alır ve değişkene (harf) aktarır. Konsol Uygulama Kodu: Dim a As String = "BULENT" Dim harf As Char For i = 1 To Len(a) harf = Mid(a, i, 1) For j = 1 To i Console.Write(harf) Next j Console.WriteLine() Next i Console.ReadKey() Örnek 3.23. Dışardan girilen 8 adet sayı içerisinden pozitif ve negatif olanların sayısını bulan programı yazınız. Algoritması; 1) Başla 2) Pozitif ve negatif sayı âdeti değişkenlerini (po, ne) sıfıra eşitle. 3) Döngüyü başlat {For i=1 to 8 } a) Sayı gir b) Eğer girilen sayı sıfırdan büyükse po yu 1 artır {po=po+1} c) Eğer girilen sayı sıfırdan küçükse ne yi 1 artır {ne=ne+1} 4) Döngüyü Sonlandır { Next i }
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 27 5) Pozitif ve Negatif sayıların adedini ekrana yaz { po, ne } 6) Dur VB Dilinde Kodlanması; Dim i As Integer, a As Integer, po As Integer, ne As Integer po = 0: ne = 0 For i = 1 To 8 a = Val(InputBox("sayi giriniz")) If a > 0 Then po = po + 1 End If If a < 0 Then ne = ne + 1 End If Next i Print "pozitif sayıların sayısı..:"; po Print "negatif sayıların sayısı..:"; ne
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 28 Diyalog Pencereleri INPUTBOX fonksiyonu, kullanıcının ekrandan bilgi girişini sağlar. Bu fonksiyonun genel formu aşağıdaki şekildedir : INPUTBOX (Mesaj, Açılacak formun başlığı, Giriş kutusunda başlangıçta bulunması istenen değer, Giriş formunun sol üst köşesinin X,Y koordinatları) Örnek: ad = InputBox("adinizi girin", "ögrenci girisi", "umit", 0, 0) MessageBox.Show Kullanım Ģekli: MessageBox.Show (Kullanıcıya verilecek mesaj, Form Başlığı, Butonlar, İkon, Varsayılan buton) Örnek: MessageBox.Show("siralama yapildi", "ornek mesaj kutusu", 2, 64) veya
Öğr.Gör.Bülent ÇOBANOĞLU, Visual BASIC Ders Notları-I 29 MessageBox.Show("siralama yapildi", "ornek mesaj kutusu", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Information) Örnek bir uygulama: Bir kafedeki garsona sipariş almada yardımcı olacak bir program yazalım. { Basılan mesaj kutusundan alınan mesaja göre iş yapan bir program olacak} Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If MessageBox.Show("Kahve İstermisniz?", "VBasic Cafe", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = MsgBoxResult.Yes Then MessageBox.Show("Evet, isterim") Else MessageBox.Show("Hayır, teşekkürler") End If Me.Close() End Class