Skip to main content

AccessTr.neT


Karar Yapıları 1- Döngüler

mehmetdemiral
mehmetdemiral
6
6716

Karar Yapıları 1- Döngüler

#1
Karar yapilari 1: Döngü Yapilari:

• Do...Loop
• For...Next
Döngüler
Program denetiminde yaygin olarak kullanilan mekanizmalardan birisi de döngülerdir. Döngüler islemlerin yinelenmesi anlamina gelir. Örnegin dosyanin sonuna kadar kayitlarin birer birer okunmasi ve her okunan kayit üzerinde belli islemlerin yapilmasi gibi. Çünkü burada yapilacak is lem aynidir ama dosyada yer alan bütün kayitlar için uygulanir. Visual Basic'te iki ana tip döngü vardir:
• Kosullu döngüler
• Sayaçli döngüler
Kosullu döngüler belli bir kosul yerine gelinceye kadar ya da belli bir kosul oldugu süre boyunca yineleme islemini sürdürürler. Sayaçti döngüler ise islemleri belirtildigi kadar yinelerler.
Döngü yapilari:
Do...Loop: Bir kosula göre döngü. For...Next: Belli bir sayida döngü (sayaçli).
Bir sayaçli döngü For...Next döngüsü olarak bilinir. For deyimi ile döngünün sayaci tanimlanir. Next deyimi ile yinelecek blok sona erer.
Döngünün her dönüsünde sayaç degiskeni bir sayi artirilir. Böylece bir sayidan digerine kadar islemler sürüdürülür.
Do...Loop Deyimi
Bir blok deyimi verilen kosul dogru (True) oldugu sürece isletir.
Yapisi:
Do [( While | Until) kosul1]
[ ifade blogu]
[Exit Do]
[ ifade blogu] Loop
Bir blok, deyimi verilen kosul saglanincaya kadar isletir.
Yapisi-2:
Do
[ifade blogu]
[Exit Do]
[ ifade blogu] Loop [(While | Until) kosul1]
Do...Loop deyiminde kullnilan elemanlarin islevleri sunlardir:
Eleman Islevi
Do Do..Loop kontrol yapisinin ilk deyimi.
While Iken: Belirtilen kosul dogru oldugu sürece döngünün
isleyecegini belirtir.
Until 'e kadar: Kosul dogru oluncaya kadar döngü isletilir.
kosul Sayisal ya da karakter bir ifade; dogru (0 hariç) ya da yanlis
(0 ya da Null) degeri degerlendirir.
ifade blogu Do ile Loop arasinda; kosul saglanincaya kadar
isletilecek olan program
satirlari.
Exlt Do Döngüden çikisi saglar.Bir If-Then deyimi ya da diger
kosullarda döngüden
ayrilmayi saglar.Istenildigi kadar kullanilabilir.
Loop Do..Loop döngüsünü bitirir.
Do döngülerinin temelinde kosul (condition) yatar. Bir kosul True ya da False olabilen bir ifadedir. Bu bir fonksiyon (örnegin EOF), özellik ya da bir iki degerin bir iliski operatörü ile karsilastirilmasi yapilabilir.

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
Örnek: Bir döngü kurma
Do While Ücret < 10000 ' Ücret 10000 den küçük oldugunda
Toplam = Toplam + Ücret Loop
Iki temel Do döngüsü vardir: Do While Döngüsü, Do Until Döngüsü. Do...While döngüsünde While deyiminde belirtilen kosul dogru oldugu süre boyunca döngü yinelenir. Kosulun saglanmadigi anda program döngüyü atlayarak Loop deyiminden sonraki deyimlere geçer.
Örnek: Bir Veritabanini Isle me
Do While Not Tablo.EOF Tablo.Edit If Bakiye > 100000 Then
Durumu = "ödeme mektubu gönder" Else
Durumu = "ekstre gönder" End If
Tablo.Update Tablo .MoveNext Loop
While deyiminde kosul dogru oldugu sürece döngü sürüdürülür. Until deyiminde ise kosul dogru olmadigi (yanlis oldugu süre) süre boyunca döngü yinelenir. Do...Until döngülerde ise Until deyiminde belirtilen kosul dogru oluncaya kadar döngü yinelenir. Diger bir deyisle kosul yanlis (False) oldugu sürece döngü yinelenir.Do…Until döngüler, yaygin olarak veritabani islemlerinde kullanilir.Bir döngü ile tablonun ilk kaydindan son kaydina kadar okunmasi saglanir.
Örnek: Dosya sonuna kadar okuma
Dim Vt As Database, Tablo As Recordset Set Vt = DBEngine.Workspaces(0).Databases ("C: \my documents\adresler.MDB")
Set Tablo = Vt.OpenRecordset ("Ogrenciler", dbOpenTable)
Tablo.Movefirst
Do Until Tablo.EOF
YzListe.AddItem Tablol ("Ogrenciler")
Tablo.MoveNext Loop
Tablo.close vt.Close
NOT:
Do While döngüsü içinde bir de Loop Until deyimi konulmaz. Bu durum hataya neden olur.
Asagidaki örnekte dosya sonuna kadar islem yapilir. Örnekte MYFILE dosyasi text bir dosyadir.
Dim InputData
Open "MYFILE" For Input As #1 ' input açilan dosya.
Do While Not EOF(1) ' end of file kontrolü.
Line Input #1, InputData ' data oku.
Debug.Print InputData ' Immediate window’a yaz. Loop Close #1 ' dosya kapat.
Asagidaki örnekte ise veriler; dosyanin sonundan basina dogru (ters sirada) okunur.
MyRecordset .moveLast
Do While not MyRecordset.EOF
Print MyRecordset.fields.getValue(“myfield”)
MyRecordset.movePrevious Loop

Döngünün Basinda ve Sonunda Denetim
Do.. .Loop döngüsünün basi ve sonu vardir. While ve Until deyimleri (iken ve 'e kadar) kendi anlamlarini sürdürmekle birlikte döngü yapisinin basinda ve sonunda kullanilmasina göre degisik anlamlar tasirlar.

Kosullarin DO döngüsünün basinda yer almasi denetimin döngünün basinda yapilmasi anlamina gelir. Döngü basinda kullanilan Until deyimi kosul False oldugu süre boyunca döngünün islemesini ve kosul testinin döngünün basinda her seferinde yapilmasini saglar. While deyimi ise yine döngü basinda kosulun True olmasi durumunda geçise izin verir.
NOT:
Do... Until yerine While..Wend deyimleri ile de dödngü yaratilabilir.Ancak daha esnek olduklari için While Wend döngüleri yerine Do... Until döngüleri önerilir.
Örnek: Giris Kontrolü .Asagidaki örnekte tipik olarak bir giris kontrolü
yapilmaktadir.
Kullanici belirtilen sayilari girmedigi takdirde program kontrolü bu alani
geçmemektedir:
Dim Yanit As String Do ' döngü basi
Yanit = InputBox ("1,2,3 sayilarindan birisini girin . " ) Loop Until Yanit >= 1 And Yanit =< 3 'döngü sonu
Örnek: Dosya sonuna kadar okuma
Dim SAYAC, OGR1SAYAC, OGR2SAYAC As tnteger Dim Vt As Database Dim Tablo as Recordset
Set Vt = DBEngine .Workspaces (0).Databases ( "C: \DATA\OKUL.MDB")
Set Tablo = Vt.OpenRecordset ( "OGRENCIHAREKET")
Do
If Tablo!OGR = "OG01" Then OGR1SAYAC = OGR1SAYAC + 1 If Tablo!OGR = "OG02" Then OGR2SAYAC = OGR2SAYAC + 1 SAYAC = SAYAC + 1 Tablo.MoveNext
Loop Until Tablo.EOF
MsgBox SAYAC & " " & OGR1SAYAC & " " & OGR2SAYAC
Bir Kosul Dogru Oluncaya Kadar Döngü
Bir Do...Loop Until döngüsündeki kosulu kontrol etmek için Until deyimini kullanmanin iki yolu vardir. Birincisinde kosul döngüye girmeden önce kontrol edilir. Ikincisinde kosul döngünün sonunda kontrol edilir; bu yöntemde döngü birkez dönmüs olur.
Giriste kontrol:
Sub IlkUntil() Sayaç = 0 Sayi = 20 Do Until Sayi = 10 Sayi = Sayi - 1 Sayaç = Sayaç + 1 Loop
MsgBox "Döngü " & Sayaç & " kere döndü." End Sub
Çikista kontrol:
Sub SonUntil()
Sayaç = 0 Sayi = 1 Do
Sayi = Sayi + 1 Sayaç = Sayaç + 1 Loop Until Sayi = 10
MsgBox "Döngü " & Sayaç & " kere döndü." End Sub

While ve Until Sistemi: While Yapisi:
Sayaç = 1
Do While Sayaç <= 10 MsgBox sayaç Sayaç = Sayaç + 1 Loop Do
Yanit=InputBox ( "Parolayi girin") Loop While Yanit <> "XXX"
Until Yapisi:
Sayaç = 1
Do Until Sayaç > 10
MsgBox sayaç
Sayaç = Sayaç + 1 Loop Do
Yanit=InputBox ( "Parolayi girin") Loop Until Yanit <> "XXX"
Döngüden Çikis
Bir Do. ..Loop döngüsünden kosulsuz çikmak için Exit Do deyimi kullanilir.
Yapisi: Exit Do
Asagidaki örnekte bir If ...Then ...Else deyimi içinde kosul test edilerek döngüden çikilmakta böylece sonsuz döngü engellenmektedir:
Sub ÇikisÖrnegi() Sayaç = 0 Sayi = 9 Do Until Sayi = 10 Sayi = Sayi - 1 Sayaç = Sayaç + 1 If Sayi < 10 Then Exit Do Loop
MsgBox "Döngü " & Sayaç & " kere döndü." End Sub

NOT: Bir sonsuz döngüyü durdurmak için ESC ya da CTRL+BREAK tuslari kullanilir.
For...Next Deyimi
Bir grup deyimi belli sayida çalistirarak (tekrar ederek) bir döngü olusturur. Örnegin birden ona kadar (on kere) su islemi yap seklinde. Özellikle bir döngü denetim degiskenin kullanildigi (sayaç) bu döngü yapisi iç içe döngülerin de yapilmasini saglar. For...Next döngüleri özellikle dizilerin islen-mesinde de yaygin olarak kullanilir.
Yapisi:
For sayaç = baslangiç To bitis [ Step artirim ]
[ifade blogu]
[Exit For]
[ifade blogu] Next [sayaç]
For...Next deyiminde kullanilan parametreler sunlardir:

Parametre Açiklama
For For..Next döngüsüne baslar.
sayaç Döngünün kaç kere tekrar edecegini belirten
sayisal deger.
baslangiç Sayacin ilk degen.
To Baslangiç ve bitis degerlerini artirmak için
kullanilan sözcük.
bitis Sayacin son degeri.
Step Artirim sayisi. Belirtilmezse 1 sayilir.
Exit For For..Next döngüsünü sona erdirir. Artirim degerini
sayaca ekler.
Next For..Next döngüsünü sona erdirir. Artirim degerini
sayaca ekler.
Artirim degeri döngünün isleyisini asagidaki biçimde kontrol eder:
Artirim degeri Döngünün isletilmesi kosulu
Pozitif ya da 0 sayaç <= bitis
Negatif sayaç >= bitis
Döngü birkez isledikten sonra artirim degeri sayaç degerine eklenir. Eger herhangi bir artirim degeri kullanilmadiysa o zarnan sayaç bir artirilir.

Sayaç degeri bitis degerinden büyük oldugunda döngü sona erdirilîr ve programin kontrolü Next deyiminden itibaren devam eder.
NOT:
Eger döngünün baslangiç degeri bitis degerinden büyükse döngü çalismaz. Ancak böyle bir döngü Step deyiminin düzenlenmesiyle yapilabilir. Next deyiminin ardinda sayaç degiskenini belirtmek zorunda degilsiniz. Ancak özellikle iç içe döngülerde belirtmekte yarar var.
NOT:
Sayaç degiskenine döngü iç inde yeniden atama yapmayin. Eger yaparsaniz sonsuz bir döngüye yol açabilirsiniz.
For..Next yapisi iç içe (nested) de kurulabilir.Iç içe döngünün isletilmesinde; distaki bir döngünün bir sefer dönmesi içteki döngünün kendi sayisi kadar dönmesi anlamina gelir. Genellikle siralama vb. gibi birbiriyle ilgili iç islemleri olan döngülerde kullanilir:
Iç-içe Döngü:
For I = 1 To 10 For J = 1 To 10
For K = 1 To 10 ...
Next K Next J Next I
Örnek: Birden ona kadar sayilarin toplamini alir:
Sub Button31_Click() Dim Toplam As Double Toplam = 0 For I = 1 To 10
Toplam = Toplam + I Next I MsgBox " 1'den 10'a kadar sayilarin toplami: " & Toplam
Buble Sort (Köpük Siralama)
Verilerin siralanmasi programlamada sik karsilasilan bir konudur. Çok sayida siralama yöntemi (algoritmasi) vardir. Bunlardan birisi de köpük siralamadir.

Birden çok sayinin siralanmasi için geleneksel yöntemlerden birisi de köpük siralamadir. Köpük siralamadaki algoritma söyledir: Siralanacak elemanlar bir dizi (array) olarak düzenlenir. Ardindan birinci elemanla ikinci eleman birbiriyle karsilastirilir. Eger ikinci ele man birinciden küçükse birinciyle yer degistirilir. Bu islem böyle devam eder:
For r = 1 to n-1
For J = r+1 to n
if x(j) < x® Then Swap (x(j), x®) Next J Next r
Yukardaki ham kodda görüldügü gibi köpük siralama iç -içe iki döngü ile yapilmaktadir. Distaki döngü r'den n- 1 'e kadar dönerken, içteki döngü r+1 'den n'e kadar dönmektedir.
For...Next döngüsünde döngü degiskeni, döngünün kullaniminda önemli bir rol oynar. Kullanimlardan genellikle döngü degiskeni ile bir dizinin elemani ya da kayit sayisi gibi degerler temsil edilir:
For i = 1 to 7
Günler(i) = " " Next i
Asagidaki döngü 10 kez çalisacak ve bilgisayardan 10 kez ses çikartacaktir:
Sub Beeps()
For x = 1 To 10 Beep
Next x End Sub
Asagidaki kod ise kullanilabilir ekran yazi tiplerini listeler:
Private Sub Form_Click()
Dim I As Integer
For i = 0 To Screen. FontCount Print Screen. Fonts(i)
Next End Sub
Step Deyiminin Kullanimi
Step deyimi döngü degiskenin (sayacin) belirtilen degerde artmasini ya da azalmasini saglar.Örnegin döngü degiskenin 2,4,6 diye gitmesi.

Sub IkininToplami()
For j = 2 To 10 Step 2 Toplam = Toplam + j
Next j
MsgBox "Toplam: " & Toplam End Sub
Adimlama azalan biçimde de yapilabilir:
Sub Toplama1()
For Sayi = 16 To 2 Step -2 Toplam = Toplam + Sayi
Next Sayi
MsgBox "Toplam: " & Toplam End Sub
Dizileri Islemek Için Döngülerin Kullanilmasi
Özellikle çok boyutlu dizilerin elemanlarina erismek, onlara deger atamak için For... Next döngüleri idealdir. Asagidaki örnekte iki boyutlu bir dizinin elemanlari sifirlanmaktadir:
Örnek:
Integer
To 10) As Double
Dim I As Integer, J As Static MatrisA (1 To 10, 1 For I= 1 To 10
For J = 1 To 10 MatrisA( I , J) = 0
Next J Next I
Örnek: Bir ListBox içindeki çift elemanlari silme
For i = 0 To List1.ListCount
For j = i +1 to List1.ListCount
If List1.List(i) = List1.List(j) Then List1.RemoveItem i
Ne xt j Next i
For...Next Döngülerinden Çikis
Bir For...Next deyiminden çikmak için Exit For devimi kullanilir.
Yapisi: Exit For


Tamsayi Degiskenler Ile Daha Hizli Döngüler
Integer degiskenler Variant bir tipli bir degiskene göre daha az bellek yeri harcarlar. Küçük bir programda bu fark o kadar önemli olmayabilir. Ancak büyük programlarda ya da yapilan islem sayisi arttikça bu önem kazanir:
Dim HizliSay As Integer ' Birinci durum. Integer kullan.
For HizliSay = 0 to 32766
Next HizliSay
Dim YavasSay As Variant ' Ikinci durum. Variant kullan.
For YavasSay = 0 to 32766
Next YavasSay
Yukaridaki örneklerden birinci olani daha hizli çalisir. Bununla birlikte HizliSay degiskeni 32,767'yi geçerse hata olusur. Bunun önlemek için HizliSay degiskeni Long olarak tanimlanabilir.

Not: Bilgiler alıntıdır.
İnadına, ille de Accesstr.net...
Cevapla
#2
sağolun hocam güzel paylaşım : )
Cevapla
#3
Teşekkürler Hocam Paylaşımınız için...
Kaplumbağa ya dikkat et...
Sadece  başını çıkartıp risk aldığında ilerleyebiliyor...
Cevapla
#4
Sayın Hocam teşekkürler vediğiniz bilgiler için
Cevapla
#5
teşekkürler hocam elinize sağlık....
Bilgi paylaşıldıkça çoğalır....
Her engel, yaşam koşullarınızı daha iyileştirecek bir fırsattır.


Access için her zaman lazım olacak konu başlıkları listesi


Cevapla
#6
teşekkürler
meşhur çin atasözü  "ACCESS İLE YAPABİLECEKLERİNİZ HAYAL EDEBİLECEKLERİNİZ İLE SINIRLIDIR" siz ne kadar hayal edebiliyorsunuz
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task