AccessTr.neT
Karar Yapıları 2 -İf..then ve case select - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Dersleri (https://accesstr.net/forum-access-dersleri.html)
+--- Konu Başlığı: Karar Yapıları 2 -İf..then ve case select (/konu-karar-yapilari-2-if-then-ve-case-select.html)



Karar Yapıları 2 -İf..then ve case select - mehmetdemiral - 03/05/2009

Karar Yapilari
Program denetimi yapilarindan birisi de karar vermektir. Kararlar özellikle belli kosullara göre yapilacak islemlerin seçilmesini saglarlar.Örnegin degisik ücret düzeylerindeki insanlarin degisik vergi oranlariyla vergilendirilmesi.
Visual Basic'te karar yapilari olarak If...Then...Else ve Select...Case deyimleri kullanilir. If...Then...Else deyimi belli bir deyimi ya da bir blok deyimi bir kosula bagli olarak isletmeyi saglar. Kosulun dogru olmasi True, yanlis olmasi False anlamina gelir. Select Case deyiminde ise özellikle bir karar degiskeninin aldigi degerlere göre degisik islemlerin yapilmasi saglanir.
Karar yapilarinin temelinde degerler arasindaki iliskiler yatar. Iliskiler degerler arasindaki operatörlerle kurulur.
Iliski operatörleri
Operatör Anlami

< Küçüktür
<= Küçük esittir
> Büyüktür
>= Büyük esittir
<> Esit degildir
= Esittir

And Ve
Or Veya - Ya da
Not Degil


If...Then...Else Deyimi
Klasik olarak kullanilan karar mekanizmasidir. Eger kosul saglaniyorsa (if) bunu yap; yoksa sunu yap (else) gibi.

If deyimi belli bir ifadenin degerine göre (kosul) bir deyimin isletilmesini saglar. If deyiminin basitten karmasiga dogru degisik kaliplari vardir:
Yapi: (1)
If kosul1 Then islem
Yapi: (2)
If kosul Then
[islemi1] Else
[islem2] End If
Yapi: (3)
If kosul1 Then
[islem1] [ElseIf kosul2 Then
[islem2] ]
… [Else
[islem-n] End If
If-Then-Else yapisinin birinci kullanim biçiminde genellikle basit
ifadelere karsilik gelen ifadeler çözülür. Kosul dogruysa (True) Then'den
sonraki deyim isletilir, degilse bu deyimler atlanir.Ikinci kullanim biçiminde
ise; daha karmasik hesaplamalara ve kararlara karsilik gelen ifadeler
çözülür.Bu yapida kosul dogruysa islem1 yerine getirilir, degilse Else’den
sonra belirtilen islemler yerine getirilir.If-Then-Else yapisi içinde kullanilan
parametreler:

Parametre Açiklama
If If yapisini baslatir.
Kosul Yerine getirilecek ifade;Dogru ya da Yanlis sonucunu,
verecek sayisal ya da karakter ifade.
Then Kosul saglandiginda yapilacak islemi belirtir.
Else Kosulun saglanmadigi durumlarda yapilacak islemleri
belirtir. Else deyimi kullanilmazsa;bir sonraki deyimin
isletilmesine geçilir.
Else If Kosul1’in saglanamadigi durumlarda diger bir kosulu
belirten sözcük.
End If If-Then-Else yapisini bitirir.
If blogunun isleyisinde; önce kosul test edilir. Eger kosul saglaniyorsa
(True) o zaman Then’den sonra belirtilen deyimler
isletilir.Eger kosul saglanmiyorsa (False) o zaman Else kisminda bulunan;islemler yerine getirilir
Else If’li olan If yapisinda ;If blogun isleyisinde önce kosul test edilir.Eger kosul saglaniyorsa (True) o zaman Then’den sonra belirtilen deyimler isletilir.Eger kosul saglanmiyorsa ya da saglanirsa o zaman Else If de bulunan kosul ele alinir.Eger bu kosul dogru ise onun Then kismi isletilir.Else If kosullarinda herhangi biri saglanmiyorsa o zaman;izleyen Else deyimi isletilir.

Kosulun ardindan birden çok deyim kullanabilir:Bu deyimler ayni satirda bulunmalidirlar ve aralarinda iki nokta olmalidir:
If Deger1 > 3 Then Deger1 = Alacak + Borç : Deger1 + Alacak
Örnek: Ekrandan alinan üç sayinin en büyügünü bulan program.Asigidaki örnekte; Ekrandan Inputbox ile alinan üç sayinin en büyügü bulunur:
Private Sub Command1_Click()
Dim Sayi1, Sayi2, Sayi3 As Double Sayi1 = InputBox (“Birinci degeri giriniz”) Sayi2 = InputBox (“Ikinci degeri giriniz”) Sayi3 = InputBox (“Üçncü degeri giriniz”) If Sayi1 > Sayi2 Then
If Sayi1 > Sayi3 Then MsgBox “Sayi1 Enbüyük” Else If Sayi3 > Sayi2 Then MsgBox “Sayi3 Enbüyük” Else
MsgBox “Sayi2 Enbüyük” End If End Sub
Kosul Dogruysa Deyimin Isletilmesi
En basit biçimden bir If..Then yapisi kosulun dogru olmasi durumunda deyimin çalistirilmasini saglar.Burada If..Then deyimi ve isletilecek deyim bir satir olarak düzenlenir.
Sub Tarihal()
Tarih = #12/2/98#
If Tarih < Now Then Tarih = Now End Sub
Eger daha fazla karar verilecekse If...Then...Else yapisi kullanilir. Bu yapi çok satirli olarak düzenlenir:
Faiz = Inputbox("faiz ?") If Bakiye > 1000000 Then
Oran = 0.07 Else
Oran = 0.05 End If

Kosul Dogru Degilse Deyimin Isletilmesi
If...Then...Else deyimi iki blok halinde kullanilarak; kosul dogru ise bunlari, degilse sunlari diye kodlanabilir:
Sub Mesajver (Deger as Long) If Deger = 0 Then
Etiket.ForeColor = vbRed
Etiket.Font.Bold = True
Etiket.Font.Italic = True Else
Etiket.Forecolor = vbBlack
Etiket.Font.Bold = False
Etiket.Font.Italic = False
End If End Sub
Birinci Kosulun False Olmasinin Ardindan Ikinci Bir Kosulu Test Etme
If...Then...Else yapisinin çok sayida kullanimindan birisi de birinci kosulun False olmasinin ardindan ikinci bir kosulu test etmektir. Asagidaki örnekte ise göre ücret belirlenmektedir:
Function Ikramiye(Performans, Ücret) If Performans = 1 Then
Ikramiye = Ücret * 0.1 ElseIf Performans = 2 Then
Ikramiye = Ücret = 0.09 ElseIf Performans = 3 Then
Ikramiye = Ücret*0.07 Else
Ikramiye= 0 End If End Function
Örnek: Su parasi hesabi
Su parasi hesabi ya da KDV kesintisi hesabi ya da benzer fiyatlandirmalar belli bir tarifeye göre bir hesaplamanin yapilarak bir islemin yapilmasini ve sonucun hesaplanmasini gerektirirler. Örnekte asagidaki tablo kullanilarak ekrandan girilen mektreküp degerlerine göre ne kadar TL'lik su harcandigini hesaplayan bir program yazilacaktir.

Tüketim Metreküp Fiyati
0-30 20.000 TL
31-100 40.000 TL
101-sonsuz 100.000 TL
Private Sub Command0_Click() Dim Tüketim As Double Dim Para As Double 'Deger alma
Tüketim = InputBox("Tüketim Degerini girin") If Tüketim > 0 And Tüketim < 31# Then
Para = Tüketim * 20000 ElseIf Tüketim > 30# And Tüketim < 101# Then
Para = (30# * 20000#) + ((Tüketim – 30#) * 40000#) ElseIf Tüketim > 101# Then
Para = (30# * 20000#) + (70# * 40000#) + ((Tüketim – 100#) * 100000#) End If
MsgBox Str(Para) End Sub
If..Then..Else Yapisindan Çikis
Istenildiginde lf..Then...Else yapisi içinde çikilabilir. Bu islem için Exit If deyimi kullanilir.
Yapisi: Exit If
Select Case Deyimi
If..Then...Else gibi karar verilmesini; durumlara göre farkli islemlerin yapilmasini saglar. Select Case yapisi bir kosul ya da degisken için olasi degerlerin degerlendirilmesini saglar. Diger bir deyisle bir ifadenin degerine göre bir ya da daha çok deyim grubunun (ifade blogunun) isletilmesini saglar. Select Case yapisi çok sayida islemin bir test degerine göre isletilmesini saglar. Select Case yapisinin temelinde bir test degeri vardir. Bu degerin degisik seçenekleri ve islem bloklari yer alir.
Yapisi (basit):
Select Case test degeri Case deger1
deyim blok 1 Case deger2 deyim blok 2
End Select
Yapisi:
Select Case test ifadesi
[Case ifade listesi-1
[ifade blogu-1] ]
[Case ifade listesi-2
[ifade blogu-2] ]
[Case Else
[ifade blogu-n] ] End Select
Select Case deyiminin parametreleri sunlardir:
Parametre Açiklama
Select Case Select Case karar yapisinin baslangici.
test ifadesi Sayisal ya da karakt er bir ifade. Test ifadesi, ifade
listesindeki ifadeler uyarsa (aynisi ise); ifade blo-gunda yer alan deyimler isletilir.
Case Ifade listesindeki ifadenin test ifadesi ile
uyusmasi durumunda isletilecek deyimleri içeren bir deyim grubu.
ifade listesi Virgülle ayrilmis ifade ve degerler.
ifade blogu Bir ya da daha çok Visual Basic deyimi.
Case Else Case ile belirtilen ifadelerden hiçbirisinin test
ifadesi ile uyusmamasi durumunda isletilecek deyimleri belirtir.
End Select Select Case yapisini sona erdirir.
To Bir degerden-blr degere veri alanini gösterir.
Is Bir karsilastirma isleci ile birlikte kullanilir.
Select Case yapisi içindeki ilk deyim Select Case'dir. Ardindan bir degeri olan test degiskeni yer alir. Bu deger bir sayi, string ya da fonksiyon olabilir. Ardindan kosullarin belirtildigi Case deyimleri yer alir.Case deyimi test degeri ile karsilastirilacak degeri belirtir. Eger Case ile belirtilen deger test degerine esitse o zaman belirtilen deyim ya da deyim blogu isletilir. End Case deyimi ile Selecl Case yapisi sona erdirilir.
Örnek: Ücret hesabi
Ücret = Val(Text1.Text) Select Case Ücret Case 1000 to 1100
Vergi = Ücret * 0.20 Case 1101 to 1200
Vergi = Ücret * 0.25 Case 1201 to 1300
Vergi = Ücret * 0.30 Case Else
Vergi = Ücret * 0.40 End Select
Özellikle ücret bordrosu gibi degisik fiyatlandirma islemlerinde Select Case kullanimi idealdir.
IstenenMiktar = Val (Text1 .Text) Select Case IstenenMiktar Case Is < 0
MsgBox "Siparis sifir olamaz", vbExclamation Exit Sub Case 1, 2, 3
Indirim = 0 Case 4 To 9
Indirim = 0.05 Case 10 To 49
Indirim = 0.1 Case Is > 50
Indirim = 0.15 End Select
Yukaridaki örnekte siparis miktarinin belli degerlerine göre belli islemler yapilmaktadir. Ancak bu degerlerin disindaki bir deger olustugunda ne olacak? Bu durumda Else Case durumu kullanilir. Else Case durumu Case kosullarinin disindaki kosulu belirtir.
IstenenMiktar = Val (Text1 .Text) Select Case IstenenMiktar Case Is < 0
MsgBox "Siparis sifir olamaz", vbExclamation Exit Sub Case 1, 2, 3 Indirim = 0 Case 4 To 9 Indirim = 0.05 Case 10 To 49 Indirim = 0.1 Case Is > 50 Indirim = 0.15 Case Else
Indirim = 0.20 End Select
Case deyiminde çok sayida deger ve belli bir deger araliklari da kullanilabilir: Case 10 To 20, 40 To 80, 125, Is > Deger1 Case “AYSE” To “MEHMET”
NOT:
Tek bir degiskenin olasi degerlerine göre degisik seçeneklerin degerlendirilmesi söz konusu ise o zaman Select Case yapisi tercih edilmelidir. Birden çok degiskenin aldigi degisik degerlere göre bir karar yumagI çözülecekse If yapisi daha uygun olabilir.
Örnek: Klavyeden girilen karakterin "küçük mü/büyük mü?" testi. Asagidaki örnekte; kullanicidan alinan deger aralik olarak kontrol edilmekte ve küçük ya da büyük harf mi, yoksa rakam mi oldugu belirlenmektedir.
Sub Button31_Click()
Dim Mesaj, Deger ' Degiskenler
Deger = InputBox ("Bir harfe ya da rakama basiniz. ") Select Case Deger Case "A" To "Z"
Mesaj = "A ile Z arasinda bir harfe bastiniz" Case "a" To "z"
Mesaj = "a ile z arasinda bir harfe bastiniz" Case 0 To 9
Mesaj = "0 ile 9 arasinda bir rakama bastiniz" Case Else
Mesaj = "Istenmeyen bir harfe bastiniz" End Select MsgBox Mesaj End Sub
Select Case deyimi ElseIf ile kullanilan If..Then...Else yapisina bir alternatiftir. Özellikle bir degis kenin aldigi çesitli degerlere göre degisik islemlerin yapilmasini saglar. Select Case deyimi ilk basta degerlendirme yapar. Ardindan degisik kosullara göre degisik islemlerin yapilmasini saglar.
Function Ikramiye (Performanse, Ücret) Select Case Performans Case 1
Ikramiye = Ücret * 0.1 Case 2, 3
Ikramiye = Ücret * 0.09 Case 4 To 6
Ikramiye = Ücret * 0.07 Case Is > 8
Ikramiye = 100 Case Else

Ikramiye = 0 End Select End Function
Örnek: Su Hesabi. If yapisinda örneklenen su hesabi aslinda Case yapisinda daha iyi uyar. Örnekte asagidaki tablo kullanilarak ekrandan girilen mektreküp degerlerine göre ne kadar TL'lik su harcandigini hesaplayan bir program yazilacaktir.

Tüketim Metreküp Fiyati
0-30 20.000 TL
31-100 40.000 TL
101-sonsuz 100.000 TL
Private Sub Command1_Click() Dim Tüketim As Double Dim Para As Double 'Deger alma
T üketim = InputBox("Tüketim Degerini girin") Select Case Tüketim Case 0 To 30#
Para = Tüketim * 20000 Case 31 To 101#
Para = (30# * 20000#) + ((Tüketim – 30#) * 40000#) Case Else
Para = (30# * 20000#) + (70# * 40000#) + ((Tüketim – 100#) * 100000#)
End Select MsgBox Str(Para) End Sub
NOT:
Select Case yapisinda; iç-içe Select Case deyimi de kullanilabilir. Bu durumda herbir Select Case deyiminin kendine ait bir End deyimi olmalidir.
Asagidaki örnekte ise ekrandan alinan bir degerin tipi belirlenir:
Private Sub command1_Click() Dim Deger, Kontrol Deger = InputBox("bir deger girin") Kontrol = VarType (Deger) Select Case Kontrol
Case 0: MsgBox "Bos"
Case 1: MsgBox "Null"
Case 2: MsgBox "Tamsayi"
Case 3: MsgBox "Long Tamsayi"
Case 4: MsgBox "Single-precision floating-point sayi" Case 5: MsgBox "Double-precision floating-point sayi" Case 6: MsgBox "Para birimi" Case 7: MsgBox "Tarih" Case 8: MsgBox "String" Case 9: MsgBox "Nesne" Case 10: MsgBox "Hata" Case 11: MsgBox " ikili" Case 12: MsgBox "variant"
Case 13: MsgBox "data Access object-veritabani nesnesi" Case 14: MsgBox "onlu sayi" Case 17: MsgBox "Byte" Case 36: MsgBox "User-defined veri içerir" End Select End Sub
Asagidaki örnekte ise metin bilgiler karsilastirilarak seçim yapilmaktadir:
Select Case Islem
Case "Topla": Sonuç.Text = Val(Sonuç.Text) + Geçici
Case "Çikar " : Sonuç.Text = Geçici - V^al (Sonuç.Text)
Case "Böl": Sonuç.Text = Geçici / Val(Sonuç.Text)
Case "Çarp": Sonuç.Text = Val(Sonuç.Text) * Geçici End Select
Select Case Yapisindan Çikis
Select yapisindan çikmak için Exit Select deyimi kullanilir. Yapisi: Exit Select
GoTo Deyimi
Bir procedure içinde belirtilen bir satira (kosulsuz olarak) sapmayi saglar.
Yapisi:
GoTo ( etiket | satir numarasi)
GoTo deyiminin parametreleri:
Parametre Açiklama
GoTo Belirtilen yere sapmayi saglar.
etiket Isletilecek program satirlarini belirtir. Etiket bilgisi
alfabetik bir karakter ile baslamalidir ve iki nokta üst üste (Img-grin ile bitme lidir. Etiket bilgisi ençok 40 karakter olabilir.
satir numarasi Isletilecek program satirlarini belirtir. Satir numarasi
ençok 40 karakter olmak üzere 0 ve 9 rakamlarindan olusur. Satir numarasinin ardindan : isaretinin kullanilmasina gerek yoktur.
Goto deyimi ve GoSub deyimleri programda gerekmedikçe kullanilmamasi gereken komutlardir. Bu komutlar program kontrolünü (okunmasini, hatalarin bulunmasini vb.) zorlastirirlar.
NOT:
Programc inin Goto ve Gosub deyimlerinin yerine Do..Loop, For..Next, If..Then ve Select..Case gibi yapilari kullanmasi daha Iyi olur.
Örnek: Goto Deyimi
Sub Button31_Click()
Dim Sayi 'Degiskenler tanimlanir
Sayi = InputBox ("1-100 arasinda ûir sayi giriniz.")
GoTo Islem 'diger bir kisima sapma
' bu kisimda yer alan deyimler atilanir. Islem: ' bir program kisimi
Sayi = Sayi / 10
MsgBox "Girilen sayinin onda biri :" & Sayi End Sub
Exit Deyimi
Do…Loop, For…Next loop, döngüleri, bir Function procedure ya da bir Sub procedure'dan çikisi saglar.
Yapisi:
Exit { Do | Function | Sub } Exit deyiminin kullanim biçimleri söyledir:
Deyim Açiklama
Exit Do Loop döngüsünden çikar. Exit Do deyimi eger bir iç
döngü (nested) içinde kullanilirsa o zaman bir önceki düzeydeki döngüye döner.

Exit For For..Next döngüsünden çikisi saglar. Exit For deyimi
eger bir iç döngü (nested) içinde kullanilirsa o zaman bir önceki düzeydeki döngüye döner.
Exit Function Fonksiyonu sona erdirir ve program kontrolünü ;
fonksiyonu çagiran deyimden sonraya geçirir.
Exlt Sub Sub procedure'i sona erdirir ve program kontrolünü;
procedure'i çagiran deyimden sonraya geçirir.
NOT:Exit deyimi ile End deyimi karistirilmamalidir. Exit deyimi bir fonksiyondan, bir procedure'da ve bir döngü içinden çikisi saglar. End deyimi ise Visual Basic procedure'ini dolayisi ile bir programini sona erdirebilen bir komuttur.
Sub Button31_Click()
Dim Yanit 'Degisken tanimlanir. Do
Yanit = InputBox("1,2,3 sayilarindan birisini girin.") If Yanit >= 1 And Yanit <= 3 Then ' Tamam MsgBox "Tamam" Exit Do ' Döngüden çik. End If Loop 'döngüye devam End Sub
End Deyimi
Bir Visual Basic procedure'ini ya da blogunu sona erdirir.
Yapisi:
End [ { Function | If | Select l Sub l Type}] End deyimi asagidaki biçimlerde kullanilabilir:
Deyim Açiklama
End Function Function'u sona erdirir. End Function deyimi bir
fonksiyon olarak fonksiyonunun sonuna eklenir.
End If If-Then blogunu sona erdirir.
End Select Select Case blogunu sona erdirir.
End Sub Sub procedure'ini sona erdinr. Yeni bir Sub procedure'ina
baslanacagi zaman otomatik olarak Sub procedure'in sonuna eklenir.
End Type Kullanici tanimli veri tanimini sona erdirir.
End Bir Visual Basic programini sona erdirir.


Not: Alıntıdır.


Cvp: Karar Yapıları 2 -İf..then ve case select - Puletin - 03/05/2009

Teşekkürler Hocam...
Ellerinize sağlık...


Cvp: Karar Yapıları 2 -İf..then ve case select - C*e*l*o*y*c*e - 03/05/2009

her bilgi için ayrı ayrı teşekküler hocam


Cvp: Karar Yapıları 2 -İf..then ve case select - accessman - 04/05/2009

hütmetler
ellerinize sağlık


Cvp: Karar Yapıları 2 -İf..then ve case select - nihatkr - 04/05/2009

HOCAM eline sağlık.


Cvp: Karar Yapıları 2 -İf..then ve case select - altanturel - 07/07/2010

arkadaşlar merhaba;
işlerimin takibini daha rahat yapmak için Access tabanlı bir program yazmaya çalışıyorum. ancak bunu hem Access öğrenerek hem de programı oluşturarak yapıyorum. takıldığım bir yer var.
Şöyle ki;

Tablomda bir sebzenin ekim ve teslimat tarihleri ve bölge kayıtları var. isteğim şu;
bölgelere göre ekim tarihim değişecek.
Mesela eğer formdan x bölgesini girdiyse tablşoya yazılırken ekim tarihim "teslimat tarihi -30" gün olacak.
Ama Y bölgesini seçtiysem -45 gün olacak. Gibi.
Çok acil yardımlarınızı bekliyorum.