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 ( 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. |