Döngüler ve Karar Yapıları Karşılaştırma İşaretleri ve Matematiksel İşaretler Visual Basic te karşılaştırma işaretleri iki ifadeyi büyüklük, küçüklük veya eşitlik gibi kriterlerde karşılaştırmayı sağlar. İşaret Anlamı = Eşit <> Eşit Değil > Büyük < Küçük >= Büyük veya Eşit <= Küçük veya Eşit Bu işaretlerle karşılaştırılacak değişkenlerin sonucu karar yapılarında kullanılacaktır. Örneğin programda, Tutar değişkeninin içeriği Para değişkeninin içerdiğinden büyük ise Paranız yetmedi şeklinde mesaj vermek için karar yapılarıyla karşılaştırma ifadelerini kullanmamız gerekilidir. Karşılaştırma işaretlerinin kullanımını örnekleyelim: A=B A<>B A>B A<B A>=B A<=B * A değişkeninin içeriği B değişkeninin içeriğine eşit * A değişkeninin içeriği B değişkeninin içeriğine eşit değildir. * A değişkeninin içeriği B değişkeninin içeriğinden büyük * A değişkeninin içeriği B değişkeninin içeriğinden küçük * A değişkeninin içeriği B değişkeninin içeriğinden büyük ya da eşit * A değişkeninin içeriği B değişkeninin içeriğinden küçük ya da eşit Matematiksel işaretler ise, sayılar veya sayı türünde veri bulunduran değişkenler arasında matematiksel işlem yapılmasını sağlar. İşaret Anlamı + Toplama - Çıkarma / Bölme * Çarpma ^ Üst Alma Birden fazla matematiksel işlemler hesaplanırken işlem sırasına tabi tutulur. Önce parantez içlerindeki ifadeler, üstlü ifadeler, çarpa ve bölme daha sonra çıkarma ve toplama işlemleri gerçekleştirilir. Örneğin; Dim A As Currency A=(3535^2)/(54*321+5) Şeklindeki matematiksel ifade önce 3532 sayısının karesi alınır daha sonra 54 ile 321 çarpılarak 5 ile toplanır ve 3535 sayısının karesine bölünür. İşlem sırası düşünülmeden yazılan denklem ya da işlemlerde, işlem sırası sonuca etki edeceğinden hata oranı yüksek olur.
If-Then-Else Karar Yapısı ve Kullanımı Bir koşul verilerek bu koşulun doğru olması ya da olmaması halinde işlem yapmak için bu yapı kullanılır. Çeşitli kullanım seçenekleri vardır. If koşul Then End If Örnek: Koşul sağlandığında işlenecek komutlar If a>=b Then End If MsgBox A sayısı b sayısından büyüktür veya eşittir. Bu kod satırlarıyla, eğer A sayısı B sayısında büyükse veya eşitse A sayısı b sayısından büyüktür veya eşittir. şeklinde bir mesaj gösterimi sağlanmaktadır. If koşul Then End If Örnek: Koşul sağlandığında işlenecek komutlar Else Koşul sağlanmadığında işlenecek komutlar If a<5 Then MsgBox A sayısı 5 ten küçüktür. Else MsgBox A sayısı 5 ten büyüktür. End If Bu kod parçasıyla a sayısı 5 ten küçükse A sayısı 5 ten küçüktür., değilse A sayısı 5 ten büyüktür. mesajı verilecektir. If yapısında gerçekleşecek komut örneklerdeki gibi tek satır ise, End If ibaresinin yazımına gerek yoktur ve komutlar Then ibaresinden sonra yazılır. If a<5 Then MsgBox A sayısı 5 ten küçüktür. Else Msgbox A sayısı 5 ten büyüktür. If Koşul1 Then
Koşul1 in sağlandığında işlenecek komutlar Else If Koşul2 Then Koşul2 nin sağlandığında işlenecek komutlar Else If Koşul3 Then Else End If Koşul3 ün sağlandığında işlenecek komutlar Bu koşulların sağlanmadığında işlenecek komutlar Bu yapıda Koşul1 kontrol edilir, koşul sağlanıyorsa altındaki komutlar işlenir ve if yapısından çıkılır. Koşul sağlanmıyorsa Koşul2 kontrol edilir, sağlanıyorsa Koşul2 deki komutlar işlenir ve if yapısından çıkılır. Sağlanmıyorsa bir sonraki koşula geçer ve bu işlemler yine yapılır. Tüm şartlar sağlanmadığı takdirde eğer varsa Else ibaresinden sonraki komutlar çalıştırılır ve karar yapısından çıkılır.
Mantıksal Operatörler Mantıksal operatörler, programlama dillerinde karar yapılarında birden fazla koşul gerektiğinde kullanılır. Başka bir deyişle birden fazla koşulun birbirine başlanmasını sağlarlar. Bu operatörlerden kullanacaklarımız: * AND * OR * XOR * EQV olmak üzere 4 tanedir. Örnekleri inceleyelim. If a= 5 And b= 8 Then MsgBox a sayısı 5 e eşittir, b sayısı 8 e eşittir. Bu komut satırıyla, a değişkeninin içeriğinin 5 ve b içeriğinin içeriği 8 olduğunda a sayısı 5 e eşittir, b sayısı 8 e eşittir. şeklinde mesaj verilmesi sağlanır. If a= 5 Or b= 8 Then MsgBox a sayısı 5 e eşit veya b sayısı 8 e eşittir. Bu komut, a değişkeni 5 veya b değişkeni 8 olduğunda ilgili mesajı verecektir. If a= 5 XOR b= 8 Then MsgBox a sayısı 5 e eşittir veya b sayısı 8 e eşittir. XOR operatörü OR operatörü görevini görmektedir. Tek farkı, verilen ifadelerin tümü doğruysa komut satırı çalışmaz. Yani bu örnekte a= 5 ve b= 8 olursa mesaj gösterilmeyecektir. Aynı şekilde, Or operatörü gibi iki ibareden biri doğru olduğunda da çalışacaktır. If a= 5 EQV b=8 Then MsgBox a sayısı 5 e, b sayısı 8 e eşittir ya da a sayısı 5 e eşit değildir ve b sayısı da 8 e eşit değildir. Biraz karmaşık gibi görünen EQV operatörü, verilen ifadelerden hepsi doğru ya da hepsi yanlış olduğunda denklemi True olarak döndürür ve if yapısı içerisindeki komutlar çalışır. Örnekte a= 5 ve b= 8 ya da a değişkeni 5 ten farklı, b değişkeni 8 den farklı olduğunda mesaj verecektir. If yapısı verilen koşul veya koşulların sağlanması halinde çalışır. Koşul sağlandığında if yapısına true değerini döndürür. Eğer koşul sağlanmazsa bu dönen değer False olacaktır. If yapısı bu dönen değere göre işlem görür.
Select Case Karar Yapısı Bu karar yapısı, bir değişkenin alabileceği değerlere göre işlenecek komutları uygular. If yapısından farklı olarak bu yapı içerisinde birden fazla durumu kontrol edebilme olanağı vardır. Select Case Değişken Case İçerik1 Değişkenin içeriği İçerik1 ise işlenecek komutlar Case İçerik2 Değişkenin içeriği İçerik2 ise işlenecek komutlar Case İçerik3 Değişkenin içeriği İçerik3 ise işlenecek komutlar Case İçerik4 Değişkenin içeriği İçerik4 ise işlenecek komutlar End Select Select Case yapısı görüldüğü gibi, Select Case ve End Select komut satırlarından ve bu satırların arasında bulunan Case ifadelerinden oluşur. Select Case satırında belirtilen değişken Case ile belirtilen içeriği aldığında ilgili komutlar işlenir ve Select Case yapısı terk edilir. Select Case yapısında belirtilen değişken, case ile belirlenen içeriklere eşit olmadığında bir takım komut satırları işlenmek istenirse Case Else ifadesi kullanılır. Select Case Değişken Case İçerik1 Değişkenin içeriği İçerik1 ise işlenecek komutlar Case İçerik2 Değişkenin içeriği İçerik2 ise işlenecek komutlar Case İçerik3 Değişkenin içeriği İçerik3 ise işlenecek komutlar Case Else Değişkenin içeriği yukarıdaki tüm içeriklere eşit değilse işlenecek komutlar End Select Eğer içerik sağlandığında yapılacak işlem bir satırsa case ifadesinin altına yazılması gerekmez, case ile aynı satırda yazılabilir. Select Case Değişken Case İçerik1:Değişkenin içeriği İçerik1 ise işlenecek komutlar Case İçerik2:Değişkenin içeriği İçerik2 ise işlenecek komutlar Case İçerik3:Değişkenin içeriği İçerik3 ise işlenecek komutlar
End Selct Case İçerik4:Değişkenin içeriği İçerik4 ise işlenecek komutlar Case Else: Değişkenin içeriği yukarıdaki tüm içeriklere eşit değilse işlenecek komutlar Case satırında birden fazla değişken içeriği aralarına virgül konularak yazılabilir. Böyle bir durumda bu satırda bulunan içeriklerden biri sağlandığında ilgili komutlar çalışır. Select Case Değişken Case İçerik1, İçerik2: Değişkenin içeriği İçerik1 veya İçerik2 ise işlenecek komut Case İçerik3, İçerik4, İçerik5:Değişkenin içeriği İçerik3, İçerik4 veya İçerik5 ise işlenecek komutlar Case Else: Değişkenin içeriği yukarıdaki tüm içeriklere eşit değilse işlenecek komut End select Case ifadesi ile direkt olarak içerik yazılabildiği gibi belirli sınırlarda ya da büyüklük küçüklük gibi kıstaslardan oluşan koşullarda verilebilir. Select Case Değişken Case İçerik1 To İçerik2: Değişkenin içeriği İçerik1 ile İçerik2 arasında ise işlenecek komut Case is < İçerik4: Değişkenin içeriği İçerik4 ten küçük ise işlenecek komut Case is >İçerik5: Değişkenin içeriği İçerik5 ten büyük ise işlenecek komut Case Else : Değişkenin içeriği yukarıdaki tüm içeriklere eşit değilse işlenecek komut End Select
For-Next Döngüsü Bazen program yazımında bir komutu ya da komut grubunu bir çok defa çalıştırmak gerekir. Bu işlemler için döngüler kullanılır. For sayaç değişkeni = başlangıç değeri To bitiş değeri İşenecek komutlar Next değişken For döngüsü, belirleyeceğiniz sayaç değişkeninin başlangıç değerinden başlar bitiş değerine kadar komutları çalıştırır. Sayaç değişkenine ilk olarak başlangıç değişkeni nin içeriği atanır ve komutlar bir kez çalıştırılıp for döngüsünün başına dönülür. Sayaç değişkeni 1 arttırılır ve komutalar yeniden çalıştırılır. Başa dönülür sayaç değişkeni yine 1 arttırılır ve komutlar yine işlenir. Bu döngü, sayaç değişkeni Bitiş Değeri ne eşit oluncaya kadar devam eder. For i =1 to 100 Print Merhaba Next i Bu örnekte sayaç değişkeni i, başlangıç değeri 1, bitiş değeri ise 100 olarak belirlenmiştir. Döngü içerisine Print Merhaba ifadesi eklenmiştir. Bu döngü ile formun üzerine 100 kere Merhaba yazılması sağlanır. Mantığı inceleyecek olursak; i sayaç değişkenimiz, 1 değerini alacak ve merhaba yazılacak, tekrar başa dönülecek. i sayaç değişkenimiz 2 değerini alacak ve yine merhaba yazacak. i değişkenimiz en son 100 değerini alıp merhaba yazdırıldıktan sonra döngü terk edilecektir. For döngüsündeki sayaç değişkenimiz daima 1 artarak tekrar eder. Bu artış miktarını Step ifadesiyle kontrol edebiliriz. For sayaç değişkeni= başlangıç değeri To bitiş değeri Step artış miktarı İşlenecek komutlar Next değişken For döngüsünde sayaç değişkenimize her tekrarda Step ifadesiyle vereceğimiz artış miktarı eklenecek ve bitiş değerine ulaşınca döngü son bulacaktır. For i =1 to 100 Step 5 Next i Print merhaba Bu döngüyle forma 20 defa merhaba yazılır.
Sayaç değişkeni her zaman artmak zorunda değildir. Step ifadesiyla sayacımızı her seferinde azaltabiliriz. For i = 100 to 1 Step -5 Next i Print merhaba Print i Bu döngüde sayacımız 100 den başlayarak 1 e kadar 5 er 5 er düşecek ve bitiş değeri olan 1 e ulaşınca döngü son bulacak. Forma 20 kez merhaba ve değişkenin o anki değerini yazacaktır. Dikkat edilecek nokta geri sayımlarda step ifadesinde negatif sayı kullanılmaktır. Buna ilave olarak başlangıç değeri bitiş değerinden büyük olmalıdır. For döngüsünden döngü bitmeden çıkmak için Exit for deyimi kullanılır. Bu deyim işlendiği an döngü terk edilir. For i = 100 to 1 Step -5 Next i Print merhaba Print i Exit for Bu örnekte forma merhaba ve i değişkeninin içeriği yazdırılır ve exit for deyimi sayesinde döngü terk edilir.
Do Loop Döngüsü Do-Loop şartlı döngüdür. Şart sağlanıncaya kadar ya da şart sağlandığında çalışacak bir döngüdür. Başka bir deyişle Do-Loop yapısında koşul belirtilmelidir. Koşullar, While (olduğunda) veya Until (olana kadar) ifadeleriyle belirtilir. Amaca göre 4 farklı kullanım tarzı vardır. Do While koşul Loop Koşul sağlandığında işlenecek komutlar Bu yapıda koşul sağlandığında ilgili komutlar döngüye girer. Koşul sağlandığı sürece döngü devam eder. Koşul sağlanmadığında döngü terk edilir. Dim a As Integer a = 10 Do While a<100 Loop a=a+1 Print a Bu örnekte a adına integer tipinde bir değişken tanımlanıyor ve 10 değeri atanıyor. Do-Loop döngüsüyle a değişkeninin içeriği 100 den küçük olduğu sürece a değişkeni 1 arttırılıyor ve forma o anki içeriği yazdırılıyor. a değişkeni 100 e eşit veya 100 den büyük olduğunda döngü son buluyor. Bu kodda geçen a = a+1 ifadesiyle for yapısındaki gibi döngünün her tekrarında artan bir sayaç değişkeni meydana getirmiş olduk. Do Until koşul Loop Koşul sağlanana kadar işlenecek komutlar Until ifadesiyle bu döngü koşul sağlanana kadar devam edecektir. Koşul sağlandığında döngü terk edilir. Dim a As Integer a=120 Do Until a<100 a=a-1 Print a Loop
Bu kodla a adında bir değişken tanımlanıp 120 değeri atanıyor. Daha sonra döngüye giriliyor ve her defasında a değişkeninin değeri 1 eksiltilip forma yazılıyor. Bu işlem a değişkeni 100 den küçük olana kadar devam edilip döngüden çıkılıyor. Do Koşul sağlandığında işlenecek komutlar Loop While koşul Bu döngüyle koşul sağlandığında ilgili komutlar işlenir. Bu döngüde farklı olan, While ifadesiyle belirtilen koşulun Loop deyiminde yer almasıdır. Yani koşul, döngünün başında değil sonunda kontrol edilir. Böylece kodlar en az bir defa çalışır. Dim a As Integer a = 10 Do a = a+1 Print a Loop While a>100 Bu döngüde, a değişkeninin içeriği 100 den büyük olduğu sürece devam etmesi amaçlanmıştır. Fakat a değişkeni 10 olduğundan döngü bir defa çalışır ve koşul satırında a değişkeninin foyası ortaya çıkar. Döngü terk edilir. Do Koşul sağlanana kadar işlenecek komutlar Loop Until koşul Bu döngüyle koşul sağlanıncaya kadar ilgili komutlar işlenir. Kontrol satırı komutlardan sonra olduğundan komutlar en az bir kere çalışır. Dim a As Integer a=120 Do a = a-1 Print a Loop Until a>100 Bu örnekte a değişkeni 100 den büyük olana kadar 1 eksilmesi ve içeriğin forma yazılması amaçlanmıştır. Fakat a değişkeni 120 olduğundan komutlar bir kez işlenir ve kontrol satırından sonra döngü terk edilir.
UYGULAMALAR 1) Bir ilkokul öğrencisi, programımıza ilk dönem karnesindeki matematik dersinin notunu girsin. Biz ise aldığı nota göre onu uyaralım veya tebrik edelim. Bu programda ilk olarak öğrencinin notunu girmesi gerekmektedir. Daha sonra bu notun If karar yapısıyla ele alınıp sonucun öğrenciye verilmesi gerekir. Kullanıcıdan bilgi girişi için InputBox komutu kullanılır. Bu komut ileriki bölümlerde ayrıntıyla işlenecektir. Şimdi sadece işimize yarayacak şekliyle kullanımını görelim. Dim Cevap As String Cevap= InputBox ( Adınız Nedir? ) Bu satırlar ile kullanıcının karşısına Adınız nedir? şeklinde soru soran bir kutucuk çıkar ve bu kutucukta cevabın yazılabileceği bir alan bulunur. Kullanıcı cevabı yazıp Tamam tuşuna bastığında bu alana yazılan metin veya sayı Cevap değişkenine aktarılır. InputBox komutu mutlaka bir değişkene aktarılmalıdır. Aksi takdirde kullanım doğru olmaz ve hatayla karşılaşırsınız. Yeni bir proje açın. Formun Load olayına aşağıdaki kodları yazın. Private Sub Form_Load() Dim Matematik As Integer Matematik= InputBox( Matematik dersinizin notunu girin ) If matematik < 0 Then MsgBox "Yanlış not girişi" ElseIf matematik > 5 Then MsgBox "Yalancı" ElseIf matematik = 1 Then MsgBox "Hiç yakıştıramadım." ElseIf matematik = 2 Then MsgBox "Paçayı zor yırtmışsın" ElseIf matematik = 3 Then MsgBox "Daha az çizgifilm izlemelisin" ElseIf matematik = 4 Then MsgBox "iyi bir not almışsın ama yeterli değil" ElseIf matematik = 5 Then MsgBox "notuna güvenip 2.dönem çalışmayı bırakma" End If End Sub
2) Ekrandan, InputBox ile programı çalıştırmak için 100 sayısının girilmesini isteyen bir program yazalım. Yeni bir proje açın. Formun Load olayına aşağıdaki kodları girin ve programı çalıştırın. Private Sub Form_Load() Do a = InputBox("100 yazdığınızda program başlayacak") If a <> 100 Then MsgBox "Programı çalıştırma için 100 yazmalıydınız" Loop Until a = 100 End Sub
3) For Next dögüsüne örnek. Form üzerine bir komut butonu yerleştiriniz. Komut butonunun Caption özelliğini TOPLAM yapınız. Komut butonunun kod penceresine aşağıdaki kodu giriniz: Private Sub Command1_Click() n= Val(InputBox( sayı miktarı )) s=0 For i=1 To n sayi=val(inputbox(str(i) + nci sayıyı giriniz )) s= s + sayi Next i MsgBox Str(s),, GENEL TOPLAM End Sub Run/Start ı seçiniz. TOPLAM adlı komut butonunu tıklatınız. Aşağıdaki pencere gelecektir:
Burada sayı miktarını 3 olarak girerek OK butonunu seçiniz. Daha sonra gelen ekranlarda sırası ile 30, 20, 300 sayılarını giriniz. Program sonuçta aşağıdaki gibi, bu sayıların toplamını bulacak ve listeleyecektir. Anlaşıldığı gibi bu program, bilgisayara önceden miktarı bildirilen sayıları tek tek isteyerek bunların toplamını hesaplayan bir programdır.