Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Döngüler "I"

Yazar: Fikret AKIN

Kategori: C#.NET & VB.NET

Eklenme Tarihi: 18.08.2007 22:59:40

Döngüler Bir programın olmazsa olmaz yapılarındandır ve özellikle mantıksal ve sürekli işlem yapmada bize kolaylıklar sağlar. Ele alınan döngü "For Next Döngüsü"

For Next Döngüsü

Döngüler Bir programın olmazsa olmaz yapılarındandır ve özellikle mantıksal ve sürekli işlem yapmada bize kolaylıklar sağlar.

For döngüsü bir işlemin belirli sayıda yapılması için kullanılır.

Dim sayac As Byte

For sayac = 0 To 10

MsgBox("Merhaba")

Next

Değişken tanımlamaları, For döngüsünün içinde de yapılabilir. Bu durumda, değişkenin kapsam alanı bu döngüyle sınırlı kalır.

For sayac As Byte = 0 To 10

MsgBox("Merhaba")

Next

Bu döngünün avantajı, sayacın tekrar sayısı ile kontrolünü ve artırılmasını kendisi yapmasıdır. Next ifadesi sayac değişkenini varsayılan durumda bir artırır.

For döngüsü içinde kullanılan sayac değişkeni sayısal bir değer olmalıdır.

Döngülerde kullanılan sayaçlar, sadece belli bir sayıda işlem yapmayı sağlamaz.

Sayaçların artma veya azalma adımları belirli olduğu için, kod içinde çoğu zaman bu avantajdan yararlanılır.

ListBox1.Items.Add("Karakter - ASCII kod karşılığı")

Dim i As Byte

For i = 0 To 255

ListBox1.Items.Add(Chr(i) & " - " & i)

Next

Örneğin dizi işlemlerinde, dizinin her elamanına ulaşmak için sayaç kullanılabilir.

Sayacın artma hızı bir olduğu için dizi(sayac) ifadesi, sırayla dizinin elemanlarına ulaşmayı sağlar.

Dim i As Integer

Dim dizi(10) As Integer

For i = 0 To dizi.Length - 1

dizi(i) = Rnd() * 1000

Next

Not: Döngüler içinde dizi kullanılırken, sayaç sıfırdan başlamışsa döngünün biteceği nokta “dizi uzunluğu -1” olmalıdır.

Not: Değişken tanımlamaları For döngüsünün içinde de yapılabilir. Bu durumda, değişkenin kapsam alanı bu döngüyle sınırlı kalır.

Döngülerde sayaç değişkeninin artma veya azalma adımları Step ifadesi ile belirlenir.

Dim fahr, derece As Integer

For derece = 0 To 500 Step 20

fahr = derece * 1.8 + 32

Label1.Text &= fahr & " Fahrenheit= "

Label1.Text &= derece & " Celcius" & vbCrLf

Next

For Döngülerinin İç İçe Kullanımı

Çoğu zaman For döngülerindeki her etap için başka bir döngünün kurulması gerekir. Örneğin, bir müşterinin birden fazla telefon numarası bir dizi içinde tutuluyorsa, bütün müşterilerin telefonlarını listelemek için iki döngü kullanılması gerekir. İlk döngü tek tek müşterileri almak için, alt döngü ise her müşterinin telefonlarını almak için kullanılmalıdır.

Structure Musteri

Dim Isim As String

Dim Soyad As String

Dim Telefonlari() As String

End Structure

Dim Musteriler() As Musteri ' Musteriler dizisi dolduruluyor

Private Sub Button1_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button1.Click

Dim i, j As Integer

For i = 0 To Musteriler.Length – 1 ' İlk müşteri seçiliyor

Dim m As Musteri = Musteriler(i)

Label1.Text &= m.Isim & " " & m.Soyad

Label1.Text &= " müşterisinin telefonları:" & vbCrLf

For j = 0 To m.Telefonlari.Length - 1

Label1.Text &= m.Telefonlari(j)

Label1.Text &= vbCrLf

Next

Next

End Sub

Birden fazla boyutlu dizilerde işlem yaparken de For döngüsü iç içe kullanılabilir.

Örneğin, iki boyutlu bir tabloda, ilk boyut için bir For döngüsü, diğer boyut için de başka bir For döngüsü kullanılarak dizinin tüm elemanlarına ulaşılabilir.

Randomize()

Dim tablo(4, 4) As String

Dim i As Byte

For i = 1 To 4

tablo(0, i) = "Yazar " & i

tablo(i, 0) = "Kitap " & i

tablo(CInt(Rnd() * 3) + 1, CInt(Rnd() * 3) + 1) = "X"

Next

Tablo isminde String değerleri tutan bir dizi oluşturulur ve dizinin ilk satırına yazar isimleri, ilk sütununa da kitap isimleri konur. For döngüsünün sayacı birden başladığı için dizinin 0,0 koordinatlı ilk elemanına değer atanmaz.

Yazar 1 Yazar 2 Yazar 3 Yazar 4

Makale 1

Makale 2

Makale 3

Makale 4

Daha sonra, tablonun diğer elemanlarına rasgele X değerleri atanır. Bu değer hangi yazarın hangi kitabı yazdığını gösterir.

CInt(Rnd() * 3) + 1 ifadesi 1 ile 4 arasında rasgele bir sayı üretir. Bu sayı tablo dizisine indis olarak verildiğinde, kalan hücrelerde X değeri elde edilir.

Tablonun tüm elemanlarını listelemek için iç içe iki For döngüsü kullanılmalıdır.

For j As Integer = 0 To tablo.GetLength(0) - 1

For h As Integer = 0 To tablo.GetLength(1) - 1

Label1.Text &= tablo(j, h)

Next

Label1.Text &= vbCrLf

Next

Yazarlar ve Makaleler tablosu hazırlandıktan sonra, hangi yazarın hangi Makaleyi yazdığını bulmak için yine tablo elemanları içinde dolaşıp X değerini aramak gerekir. İlk For döngüsü ile Makaleler satırlarında, ikinci For döngüsü ile Yazarlar sütunlarında gezilir.

For j As Integer = 0 To tablo.GetLength(0) - 1

For h As Integer = 0 To tablo.GetLength(1) – 1' Tablonun her elemanının değeri  X değeri ile karşılaştırılır.

If tablo(j, h) = "X" Then

Label2.Text = tablo(0, h) & ", "

Label2.Text &= tablo(j, 0)

Label2.Text &= " Makalesini yazıyor"

Exit For

End If

Next

Label1.Text &= vbCrLf

Next

Tablonun her elemanı kontrol edilir ve X değeri bulunduğu zaman, yazar ismi ve Makale ismi ekrana yazdırılır. Yazar isimlerine, dizinin ikinci boyutunun ilk sırasında tutulduğu için tablo(0,h) kodu ile ulaşılır. Kitap isimlerine ise, dizinin ilk boyutunun ilk sırasında tutulduğu için tablo(j,0) kodu ile ulaşılır. Buradaki h ve j değişkenleri o anda kontrol edilen elemanın tablodaki indisleridir.

Exit For ifadesi, o anda bulunan For döngüsünden çıkmayı sağlar. Bu örnekte ikinci For döngüsü Yazarlar sütunu üzerinde döndüğü için, bu döngüden çıkıldığında, ilk For döngüsüne tekrar geçilir. Bu sefer yeni bir Makale için Yazarlar kontrol edilir. Sonuçta bir kitabı birden fazla yazar yazmasına rağmen, Görüntülenecek olan sadece ilk yazardır.

Yazar Hakkında Yorum Yok Yorum Yaz Yazara ait diğer Makaleler
Tema
Anket
ASP.NET MVC'yi Projeleriniz de kullandınız mı?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.