|
|||||||
|
|
|
|||||
|
|
|||||||
Programlar normalde satır satır çalışırlar. İstenirse belirli şartlar aranarak programın bir kısmının çalıştırılmasını veya çalıştırılmamasını sağlayabiliriz.
If Yapısı
If şart yapısı bütün programlama dillerinde olan bazı şartların gerçekleşmesi durumunda ve gerçekleşmemesi durumunda yarı ayrı kodların çalıştırılmasına imkan veren yapıdır.
If Şart Then Komutlar
Else Komutlar
End If
Şartın gerçekleşmesi halinde Then deyiminden sonraki satır
işletilir. Gerçekleşmemesi durumunda ise else deyiminden sonraki satırlar
işletilir.
Şartın gerçekleşmemesi durumunda çalışacak else bloğu istenirse
verilmeyebilir.
If şart then komutlar
End if
Ayrıca tek satırda şart yazılıyorsa End If deyimi kullanılmaz.
If Şart Then Komutlar Else Komutlar
If Şart Then Komutlar
formlarından birinde de kullanılabilir.
Örnekler:
ÖRNEK: Tek Satırlık If-Then
Private SubForm_Load( )
Dim v , f , ort , b
v=Val(InputBox ( " Not girişi " , " Vize notunuz:
" ,"50") )
f=Val (InputBox ("Not girişi " , " Final notunuz:
" ,"50") )
Ort=(v + f)/2
ÖRNEK: Tek Satırlık If-Then
'Ortalama 49.5'den küçükse veya final 50'den küçükse bütünleme notu sor
ÖRNEK:Çok Satırlı If-Then
Private SubForm_Load( )
Dim v , f , ort , b
v=Val(InputBox ( " Not girişi " , " Vize notunuz:
" ,"50") )
f=Val (InputBox ("Not girişi " , " Final notunuz:
" ,"50") )
Ort=(v + f)/2
'Ortalama 49.5'den küçükse veya final 50'den küçükse bütünleme notu sor
If(ort < 49.5) Or (f < 50 ) Then
b=Val(Inputbox("Not girişi","Bütünleme
notunuz:","50"))
Ort=(v + b)/2
End If
MsgBox("Ortalamanız: " &ort)
End Sub
ÖRNEK:If-Then-Else
Private Sub Form_Load( )
Dim v , f , ort , b
v=Val(InputBox ( " Not girişi " , " Vize notunuz:
" ,"50") )
f=Val (InputBox ("Not girişi " , " Final notunuz:
" ,"50") )
Ort=(v + f)/2
'Ortalama 49.5'den küçükse veya final 50'den küçükse bütünleme notu sor
If(ort < 49.5) Or (f < 50 ) Then
b=Val(Inputbox("Not girişi","Bütünleme
notunuz:","50"))
Ort=(v + b)/2
End If
If ort > 49.5Then
MsgBox("Geçtiniz,Ortalamanız: " &ort)
Else
MsgBox("Kaldınız,Ortalamanız: " &ort)
End If
Select Case Yapısı
Bir değişkenin aldığı birçok değere göre ayrı komutların çalıştırılması gereken durumlar için If yapısını kullanmak yerine Case yapısını kullanmak daha avantajlıdır.
Select Case Değişken
case Durum1: Komutlar
case Durum2,Durum3: Komutlar
case Durum4 to Durum7: Komutlar
case is < durum8:Komutlar
case is > durum9:Komutlar
.......
case Durum N: Komutlar
case Else Komutlar
End Select
Burada Değişken parametresi ile belirlenen değişkenin aldığı duruma göre DurumN değerinin karşısındaki komutlar işleme girer. Eğer değişkenin değeri durumlardan hiçbirine uymuyorsa Case Else kısmındaki komutlar çalışacaktır.
ÖRNEK: Select Case
Private Sub Form_Load( )
Dim v
v = InputBox( " Not girişi " , " Vize notunuz: "
,"50") )
Select Case v
Case 0:MsgBox ("Hiç birşey öğrenememişsiniz.")
Case 1 to 20:MsgBox ("Durumunuz hiç iyi değil.")
Case 21 to 40:MsgBox ("Durumunuz iyi değil.")
Case 41 to 49:MsgBox ("Daha çok
çalışmalısınız.")
Case 50:MsgBox ("Sınırda bir not aldınız.")
Case 51 to 65:MsgBox ("iyi bir not aldınız.")
Case 66 to 75:MsgBox ("Tebrikler.İyi bir not
aldınız.")
Case 76 to 100:MsgBox ("Tebrikler.Çok iyi bir not
aldınız.")
Case Else:MsgBox ("Böyle bir not almış
olamazsınız.")
End Select
End Sub
Select Case yapısında şartları verirken araya virgül konarak birden fazla şart
verilebilir.
Case 1,2,3:'1-2 ve 3 olması durumunda
Case 5,7 to 9:'5 veya 7 ile 9 arasında olma durumu Case Is<100, 120, Is>200:'100
den küçük, 120 veya 200 den büyük olma durumu
Şimdi aile yardımını hesaplayacak bir örnek verelim. Bunun için form üzerine combo1 elemanını yerleştiriyoruz. Program için gerekli kodumuz aşağıdaki gibi olacaktır.
ÖRNEK:Select Case
Private Sub Combol_Click()
Dim aileyard, mks
mks=3315
Select CaseCombo1.Text
Case"Bkar":aileyard=0
Case"EşÇ1ş":aileyard=0
'1000 Tl den küçük paralar atlıyor.
Case"EşÇ1ş.1Ç":aileyard=Int(50*mks/1000)*1000
Case"EşÇ2ş.1Ç":aileyard=Int(100*mks/1000)*1000
Case"E0Ç":aileyard=Int(300*mks/1000)*1000
Case"E1Ç":aileyard=Int(350*mks/1000)*1000
Case"E2Ç":aileyard=Int(400*mks/1000)*1000
Case Else
End Select
Form1.Caption="Aile yardımı:"& Format(aileyard,"###,###,###")
End Sub
Private SubForm_Load()
With Combo1
.AddItem"bkar"
.AddItem"EşÇ1ş.1Ç"
.AddItem"EşÇ1ş.2Ç"
.AddItem"E0Ç"
.AddItem"E1Ç"
.AddItem"E2Ç"
End With
End Sub
IIF
Bir değişkenin değeri iki durumundan birine göre değer alıyorsa if yapısı yerine IIF kullanılabilir. Bu size daha az satırla aynı işi yapabilme imkanı verir.
IIF (şart;doğru ise;yanlış ise)
Bu fonksiyonda şart doğru ise birinci ifade, yanlışsa ikinci ifade işleme girer.
Örneğin x sayısının kökünü alıp ekrana yazdırayacağımızı düşünelim. Kök
alma işlemi olduğu için önce sayının negatif olup almadığını kontrol etmeliyiz.
Private Sub Form_Load()
Dim x
x=InputBox("Kökü alınacak sayı")
Ifx<0 then
MsgBox("Negatif sayının kökü olmaz")
Else
MsgBox("Sonuç:"& sqr(x))
End if
End Sub
Aynı kodu IIF kullanarak şöyle yazabiliriz.
Private Sub Form_load()
Dim x,y
x=InputBox("Kökü alınacak sayı")
y=IIf(x<0, MsgBox("Negatif sayının kökü olmaz"),
MsgBox("Sonuç:"& sqr(x)))
End Sub
Örneğin y değişkeni 100'den küçük iken x'in 50 olması diğer durumda ise 10 olması gerektiğini düşünelim.
If y < 100 Then x=50 Else x=10
yerine
x=IIF(y < 100,50,10)
şekline kullnabiliriz
Choose
Bir değişkenin aldığı değer bir sayıya bağlı ise Choose yapısını kullanmak daha uygundur.
Sonuç=Choose(Sayı, değer1, değer2, değer3,.......,değerN)
formatında kullanılır. Buradaki sonuç sayıya bağlı olarak değer listesinden bir
değerdir. Örneğin sayı 3 ise sonuç değer3 olacaktır.
örneğin bir değişkenin 1 olması Pazar gününü 2 olması Pazartesi gününü vb.
temsil ediyorsa
gun=Choose(GunNo,"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi")
satırı ile GunNo değişkenine uygun gün ismi gun değişkenine atanacaktır.
Örneğin WeekDay fonksiyonundan geriye dönen sayı o günün numarasıdır. Bugünün
ismini yazdırmak içinse
Print
Choose(InputBox(WeekDay(Date),"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi")
satırını kullanabilirsiniz.
Kullanıcının girdiği bir rakamın yazı olarak karşılığını bulmak içinde Print
Choose(InputBox("Bir rakam
girin"),"Bir,"İki","Üç","Dört","Beş","Altı","Yedi","Sekiz,","Dokuz",)
satırını kullanabiliriz.
Switch
Switch fonksiyonunda ise birden fazla şartı aynı satırda kontrol
etmek mümkündür.
Sonuç=Switch(Şart1, Değer1, Şart2, Değer2,......,ŞartN,DeğerN)
şeklinde kullanılır. Buradaki şartlardan hangisi tutuyorsa Sonuç değişkenine ona
karşılık gelen değer atanacaktır.
Dim n
n=Val(InputBox("Notunuz"))
Print Switch(n > 0 And n < 40, "Kötü",n > =40 And n <
60,"Orta",n > =60,"İyi")
DÖNGÜ DEYİMLERİ
Belirli bir komut parçasının belli şartlar gerçekleşinceye kadar defalarca çalışması gerekebilir. Çalışma sayısının belli olduğu durumlarda For döngüsü diğer durumlarda yani döngü sayısının değişken olduğu durmlarda ise While-Wend, Do-Loop blokları kullanılır.
FOR Döngüsü
For Sayaç=BaşlangıçDeğeri to BitişDeğeri[step artım] komutlar
Next
For dögüsü Sayaç'ın Başlangıçdeğeri'nden başlayarak BitişDeğeri'ne
kadar sayacı birer arttırarak blok içindeki komutları çalıştırır. Eğer birer
artması değilde sizin belirleyeceğiniz aralıklarla artıp azalmasını istiyorsanız
Step parametresinden sonra artım miktarını yazmanız gerekir.
BaşlangıçDeğeri, BitişDeğeri'nden küçükse döngüye hiç
girilmeyecektir.
Sayaç'ın artarak değilde azalarak çalışması için step'ten sonra
negatif sayı vermeniz gerekir. Bu durumda ise BaşlangıçDeğeri, BitişDeğeri'nden
büyükse döngüye hiç girilmeyecektir.
Örnek olarak ekranda rasgele koordinatlara içiçe dikdörtgenler çizerek bir program
yazalım. Programımız için formunuzun üzerine bir komut düğmesi yerleştirin.
ÖRNEK:For-Next
Private Sub Form_Load()
ScalaMode=3'pixel
Randomize Timer
BackColor&HFFFFFF'beyaz
End Sub
Private Sub Command1_
mx=Rnd*Form1.ScaleWidth
mx=Rnd*Form1.ScaleHeight
For i=10To 0 Step-1
Line (mx+i*10,my+i*10)-(mx-i*10,my-i*10),,B
Next
End Sub
Kullanıcının gireceği iki aralık arasındaki tek, çift veya bütün sayıları
toplayacak bir program yapalım. Örneğimiz için bir form oluşturalım.
ÖRNEK:For-Next
Private Sub Command1_Click()
Dimbas=Val(Text1)
son=Val(Text2)
If Check1 And Check2 Then
'Her ikiside işaretli ise bütün sayıları
Fori = bas To son
top=top+1
Next
End If
If Check1 And Not Check2 Then
'Check1 işaretli Check2 değilse tek sayıları
If bas Mod 2 = 0 Then
'başlangıç çiftse tek yap
bas = bas + 1
End If
For i = bas To son Step 2
top = top + i
Next
End If
If Not Check1 And Check2 Then
'Check2 işaretli Check1 değilse çift sayıları.
If bas Mod 2 < > 0 Then
'başlangıç tekse çift yap
bas = bas + 1
End If
For i = bas To son Step 2
top = top + i
Next
End If
Label3 = top
End Sub
Yukarıdaki programı hazır formüller kullanarak da yapabilirsiniz. Ancak biz
For-Next döngüsüne örnek olması açısından döngüler kullanarak yaptık.
Başka bir örnek olarakta kullanıcının gireceği 3 x 3 boyutlu iki matrisi toplayıp,
çarpacak bir program yapalım. Örneğimiz için aşağıdaki formu oluşturun ve Text
kutularının MultiLine Özelliklerini True yapın.
ÖRNEK:For-Next
'Formun General Declarations kısmı
While-Wend ve Do While-Loop Döngüsü
Bir şart gerçekleştiği sürece çalışması gereken program
bloklarında kullanılır. While Şart komutlar
Wend
Do While Şart komutlar
Loop
Yukarıdaki her iki döngününde mantığı aynıdır. Şart gerçekleştiği sürece döngüde kalınır.
Do Until-Loop Döngüsü
Bu döngü yapısı da şart gerçekleşene kadar çalışması gereken program bloklarında kullamılır. Dikkat ederseniz yukarıdaki döngüler şart gerçekleştiği sürece çalışıyordu bu ise şart gerçekleşene kadar çalışır. Yani şart gerçekleşmediği sürece çalışır.
Do Until Şart Komutlar
Loop