Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web
If Yapısı

PROGRAM KONTROL DEYİMLERİ

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
If(ort < 49.5) Or (f < 50 ) Then b=Inputbox("Not girişi","Bütünleme notunuz:","50")
End Sub




Ö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 Sub
Form_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_ Dim mx,my,i
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()
Dim
bas=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ı
Options Explicit
Dim a(3.3), b(3,3), c(3,3)
Private Sub Command1_Click()
Dim i,j
Text1 = ""
'A Matrisini sor
For i = 1 To 3
For j = 1 To 3
a(i,j)= Val (InputBox("A Matrisi", i& "," &j& ".elemanın değeri: "," 1 "))
Text1 = Text1 + " " & a(i,j)

Next
Text1 = Text1 & Chr(13)& Chr(10)'Satırbaşı ekle
Next
End Sub

Private Sub Command2_Click()
Dim i,j
Text2 = ""
'B Matrisini sor
For i = 1 To 3
For j = 1 To 3
b(i,j)= Val (InputBox("A Matrisi", i& "," &j& ".elemanın değeri: "," 1 "))
Text2 = Text2 + " " & b(i,j)

Next
Text2 = Text2 & Chr(13)& Chr(10)'Satırbaşı ekle
Next
End Sub

Private Sub Command3_Click()
Dim i,j
Label3 = "A + B Matrisi"
Text3 = ""
For i = 1 To 3
For j = 1 To 3
c(i,j) = a(i,j) + b(i,j)
Text3 = Text3 & " " & c(i,j)
Next
Text3 = Text3 & Chr(13)& Chr(10)
Next
End Sub

Private Sub Command4_Click()
Dim i,j,k,x
Label3 = "A x B Matrisi"
Text3 = ""
For i = 1 To 3
For j = 1 To 3
x = 0
For k = 1 To 3
x = x + a(i,k) * b(k,j)
Next
c(i,j) = x
Next
Next
For i = 1 To 3
For j = 1 To 3
Text3 = Text3 & " " & c(i,j)
Next
Text3 = Text3 & Chr(13)& Chr(10)
Next
End Sub


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