Etiketler

18 Mayıs 2020 Pazartesi

QuickBasic Kursu: Bölüm 5: Döngüler

Önceki Bölüm: QuickBasic Kursu: Bölüm 4: Kontrol blokları
Güncelleme: 24 Mayıs 2020
Tekrar edilen işlemler için döngüler kullanılır.
Böylece bilgisayarın sürekli yapacağı işlemler için aynı komutları bir daha yazmak zorunda kalmayız.

GOTO döngüsü

En basit döngü GOTO ile yapılan döngüdür.
DIM A AS INTEGER
basla:
	A = A + 1
	PRINT A;
	IF A = 32767 THEN A = 0
GOTO basla

Yukarıdaki kodlar çalıştırıldığında sonsuz döngü oluşturur.
Çalışma esnasında döngüyü kırmak(durdurmak) için CTRL + PAUSE tuşlarına basınız.
Böyle yaptığınızda kod ekranı gelir ve hangi satırda kırıldığı satırın yazısı beyaz renkli gösterilerek belirtilir.
F5 ile ya da menüden Run/Continue ile çalışmaya kaldığı yerden devam ettirilir.
Çalışmaya baştan başlatmak için menüden Run/Restart

Aşağıdaki şekilde değişiklik yaparsak döngüyü kontrol altına almış oluruz.
basla:
	A = A + 1
	IF A>20 THEN GOTO bitis ' bitis: satırına git
	' GOTO kullanılmazsa da olur.
	' IF A>20 THEN bitis

	' Alternatif kod satırı
	' IF A>20 THEN END
	PRINT A
GOTO basla 'basla: satırına dön
bitis:
END
PROBLEM 1 : 1 den 30 a kadar olan çift sayıların karelerini ekrana yazan bir program yazınız.

FOR ... NEXT döngüsü

Belirli sayılarda işlemlerin tekrar etmesi için kullanılır.
FOR sayacdegiskeni = baslangicsayisi TO bitissayisi [STEP artismiktari]
..
..
NEXT sayacdegiskeni
Örnek:
FOR N = 1 TO 25
	PRINT N
NEXT N
1 den 25 e kadar olan sayıları yazacaktır. Her döngüde N değişkeninin değeri 1 artacaktır.
Eğer ilk satırı
FOR N = 1 TO 25 STEP 4
olarak yazacak olursak.
N nin ilk değeri 1 olacak sonra her seferinde üzerine 4 eklenerek devam edecektir.
FOR N = 25 TO 1 STEP -1
yazılacak olursa 25 den 1 e doğru N nin değeri her seferinde 1 azaltılır.
NEXT in arkasına değişkeni yazmak şart değildir ama okunurluğu kolaylaştırmak için yazmakta fayda vardır.
İç içe FOR NEXT döngüleri de kullanılabilir. Bu durumda döngülerin birbirini kesmemesi gerekir.

Örnek:
FOR N = 1 TO 10
    FOR M = 1 TO 4
        PRINT N * M,
    NEXT M
    PRINT
NEXT N
FOR döngüsünden çıkma gereği olursa EXIT FOR ile çıkılabilir.
FOR n = 1 TO 100
    PRINT n;
    IF SQR(n) = 9 THEN EXIT FOR
NEXT
Uygulama:
CLS
CONST SutunSys = 11
DIM A(SutunSys, SutunSys)
FOR M = 1 TO SutunSys
    A(M, 1) = 1
    A(M, M) = 1
NEXT
FOR M = 3 TO SutunSys
	FOR N = 2 TO M - 1
		A(M, N) = A(M - 1, N - 1) + A(M - 1, N)
	NEXT
NEXT
BaslSatiri = 13
FOR M = 1 TO SutunSys
	Sutun = 6 * M
	Satir = BaslSatiri
	FOR N = 1 TO M
		LOCATE Satir, Sutun
		PRINT A(M, N)
		Satir = Satir + 2
	NEXT
	PRINT
	BaslSatiri = BaslSatiri - 1
NEXT


PROBLEM 2 : Problem 1 i FOR..NEXT döngüsüyle yapın

Yıldızlarla piramit
y=5 'Piramit yüksekliği
FOR i = 1 TO y
	PRINT SPACE$(y - i); STRING$(2 * i - 1, "*")
NEXT
Çıktı:
    *
   ***
  *****
 *******
*********
Yıldızlarla elmas
CLS
y = 5 'Piramit yüksekliği
DIM yildiz AS STRING
FOR i = 1 TO y
	PRINT SPACE$(y - i); STRING$(2 * i - 1, "*")
NEXT
FOR i = y - 1 TO 1 STEP -1
	PRINT SPACE$(y - i); STRING$(2 * i - 1, "*")
NEXT
Çıktı:
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

DO ... LOOP döngüsü

DO
	PRINT A
	A = A +1
LOOP
Bu da sonsuz döngü oluşturacaktır. Döngüyü kırmak, kontrol altına almak için çeşitli yollar var

EXIT DO ile döngüden çıkmak:
DO
	IF A > 40 THEN EXIT DO 'A 40 dan büyük olduğunda döngüden çık
	PRINT A
	A = A +1
LOOP
WHILE kullanarak döngüyü kontrol altına almak:
1 . program
CLS
DO WHILE A < 40 ' A, 40 dan küçük İKEN(while) döngüye devam
	PRINT A
	A = A + 1
LOOP
2 . program
CLS
DO
	PRINT A
	A = A + 1
LOOP WHILE A < 40 ' A, 40 dan küçük İKEN(while) döngüye devam
Yukarıdaki iki programı denediğinizde hiçbir fark göremeyeceksiniz.

Şimdi CLS den sonra A = 45 kodunu ekleyip deneyin ve farkı anlamaya çalışın.
Eğer WHILE ı LOOP un yanına koyarsak döngüde şart aranmaksızın en az 1 kere döner.
DO nun yanına konulursa döngü başlamadan şart kontrol edilir, şart uygun değilse döngü gerçekleşmez.

UNTIL kullanarak döngüyü kontrol altına almak:
CLS
DO UNTIL A > 40 ' şart DOĞRU olanA KADAR dön. A , 40 dan büyük olana kadar devam
	PRINT A
	A = A +1
LOOP
WHILE için verdiğim açıklamalar bunda da geçerli.
UNTIL i DO nun yanına ya da LOOP un yanına koyabiliriz.

Kısaca WHILE, şartın DOĞRU olmasında; UNTIL, şartın YANLIŞ olmasında döngüye devam eder.

PROBLEM 3: Problem 1 i DO..LOOP döngüsüyle yapın

WHILE ... WEND döngüsü

CLS
WHILE A < 40 ' A , dan küçük İKEN devam
	A = A + 2
	PRINT A
WEND
WHILE...WEND, DO...LOOP un bir alternatifidir. Ama DO LOOP kadar kullanışlı değildir.
Çünkü DO LOOP da karşılaştırma şartını başta veya sonda verebiliyoruz.

PROBLEM 4: Problem 1 i WHILE..WEND döngüsüyle yapın

Örnek:
' Kabarcık sıralama. (Bubble Sort)
DEFINT A-Z
DIM adi AS STRING
DIM Sehir(100) AS STRING
CLS
DO
	READ adi
	IF adi = "*SON*" THEN EXIT DO
	s = s + 1
	Sehir(s) = adi
LOOP

' Alfabetik Sıralama
FOR i = 1 TO s - 1
	FOR j = 1 TO s - 1
		IF Sehir(j) > Sehir(j + 1) THEN
			SWAP Sehir(j), Sehir(j + 1)
		END IF
	NEXT j
NEXT i

FOR i = 1 TO s
	PRINT Sehir(i)
NEXT i

DATA Niğde,Bursa,Ordu,Adana,Zonguldak,Sivas,Edirne,Konya,Denizli
DATA Manisa,Çankırı,Antalya,Şanlıurfa,İstanbul,Yozgat,*SON*
Ekran çıktısı:
Adana
Antalya
Bursa
Denizli
Edirne
Konya
Manisa
Niğde
Ordu
Sivas
Yozgat
Zonguldak
Çankırı
İstanbul
Şanlıurfa
Alfabetik sıralamada listedeki son 3 il adı neden sonda sıralandı?
Çünkü sıralamayı ASCII tablosundaki karakter koduna göre sıralama yaptığı için.
ASCII tablosunda Türkçeye özgü karakterler İngilizce karakterlerden sonra gelmektedir.

PROBLEMLER

  1. For… Next döngüsünü kullanarak adınızı 10 kez yazdırın.
  2. For… Next döngüsünü kullanarak ilk 10 doğal sayıyı yazdırın.
  3. For… Next döngüsünü kullanarak ilk 10 doğal sayıyı ters sırada yazdırın.
  4. For… Next döngüsünü kullanarak 10 - 15 arasındaki sayıları yazdırın.
  5. For… Next döngüsünü kullanarak 0-50 arasındaki çift sayıları yazdırın.
  6. 0, 1.5, 3, 4.5, 6, 7.5, 9 çıktısını veren For… Next döngüsünü yazın.
  7. For… Next döngüsünü kullanarak kullanıcının girdiği 10 sayıyı toplayıp sonucunu yazdırın
  8. For… Next döngüsünü kullanarak 1-100 arasındaki 5'e bölünen sayıları yazdırın.
  9. For… Next döngüsünü kullanarak 1-50 arasındaki 3'e bölünen sayıların toplamını yazdırın.
  10. For… Next döngüsünü kullanarak 1-10 arasındaki sayıların toplam sonucunu yazdırın
  11. For… Next döngüsünü kullanarak 1-10 arasındaki sayıların çarpım sonucunu yazdırın
  12. For… Next döngüsünü kullanarak kullanıcının girdiği 6 sınav notunun ortalamasını yazdırın.
  13. For… Next döngüsünü kullanarak ilk 10 doğal sayının karesini azalan sırada yazdırın.
  14. For… Next döngüsü ile (1) ^ 2 + (3) ^ 2 + (5) ^ 2 + ……… + (20) ^ 2 = ? işleminin sonucunu yazdırın
  15. For… Next döngüsü ile Fibonacci serisinin ilk 10 değerini yazdırın.
  16. For… Next döngüsü ile 0-100 arası Celcius(ºC) sıcaklık değerlerini Fahrenayt'a dönüştürün. (F=9/5C+32)
Sonraki Bölüm:

Hiç yorum yok:

Yorum Gönderme