11 Haziran 2021 Cuma

QuickBasic - 5: Döngüler

Yayınlama: 2000
Güncelleme: 11 Haziran 2021
Bir kod bloğunun belirli sayıda veya şarta bağlı sayıda tekrar edilmesine döngü deniliyor. Döngü sayesinde kod tekrarından kaçınmış oluruz. Döngü sayısı belli değil ve döngüden çıkmak için uygun şart yoksa sonsuz döngü denilen bir durum oluşur.

Program sonsuz döngüye uğradığında ya da döngünün herhangi aşamasında programı duraklatmak için klavyeden CTRL+PAUSE tuşlarına basılır. (DOSBOX kullananlar: CTRL+SCROLL LOCK)
Döngüyü kırdığımızda kod editörü ekranı gelir ve programın kırıldığı satırın yazısı beyaz renkli olarak gösterilir.


F5 ile ya da menüden Run/Continue ile program, çalışmaya kaldığı yerden devam eder.
Çalışmayı baştan başlatmak için menüden Run/Restart. Adım adım ilerletmek için F8

GOTO

Kullanımı:
GOTO {etiket | satır_no}
Program akışını istenilen satıra ya da etikete yönlendirmek için kullanılır. Bir döngü komutu değildir ancak döngü oluşturabilir.

Örnek 1:
10: GOTO 10 'Sonsuz döngü
Örnek 2:
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. Aşağıdaki şekilde değişiklik yaparsak döngüyü kontrol altına almış oluruz.

Örnek 3:
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
Örnek 4:
'GOTO döngüsü ile 1 - 40 arası çift sayıları yazdır
CLS
basla:
a = a + 2
PRINT a;
IF a = 40 THEN GOTO son ELSE GOTO basla
son:
END
PROBLEM 1 : GOTO döngüsü ile 1 den 30 a kadar olan çift sayıların karelerini ekrana yazan bir program yazınız.

FOR ... NEXT

Kod bloğunun belirli sayıda tekrar etmesi için kullanılır. Blok sonu NEXT ile belirtilir.

Kullanımı:
FOR sayacdegiskeni = baslangicsayisi TO bitissayisi [STEP artismiktari]
..
..
NEXT sayacdegiskeni
Örnek 1:
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. Döngü tamamlandığında N'in son değeri bellekte tutulur.

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 2:
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.

Örnek 3:
FOR n = 1 TO 100
	PRINT n;
	IF SQR(n) = 9 THEN EXIT FOR
NEXT
Örnek 4:
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
Örnek 5:
' Yıldızlarla piramit
y = 5 'Piramit yüksekliği
FOR i = 1 TO y
    PRINT SPACE$(y - i); STRING$(2 * i - 1, "*")
NEXT

Örnek 6:
'Yıldızlarla elmas
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
y = 10 'Piramit yüksekliği
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


Örnek 7:
'FOR-NEXT döngüsü ile 1 - 40 arası çift sayıları yazdır
CLS
FOR n = 1 TO 40
	IF n MOD 2 = 0 THEN PRINT n;
NEXT
PROBLEM 2 : Problem 1 i FOR ... NEXT döngüsüyle yapın

DO ... LOOP

DO, yap; LOOP, döngü manasındadır.
DO ile LOOP arasındaki kodlar şart belirtilmezse sonsuz döngü oluşturur.

Örnek 1:
DO: LOOP 'sonsuz döngü
Örnek 2:
DO
	PRINT A
	A = A +1
LOOP
Bu kodlar da sonsuz döngü oluşturacaktır. Döngüyü kontrol altına almak veya döngüden çıkmak 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:

WHILE, Türkçedeki -iken eki manasındadır. WHILE ile belirtilen şart DOĞRU'yken(-iken) kodlar yürütülür.

Örnek 1:
CLS
DO WHILE A < 40 ' A, 40 dan küçük-İKEN(while) döngüye devam
	PRINT A
	A = A + 1
LOOP
Örnek 2:
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:

UNTIL Türkçedeki -e kadar manasındadır. UNTIL ile belirtilen şart gerçekleşene kadar kodlar çalıştırılır.
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.

Örnek 3:
'DO-LOOP döngüsü ile 1 - 40 arası çift sayıları yazdır
'DO-LOOP ile 5 farklı yöntem
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
DO
    a = a + 2
    PRINT a;
    IF a = 40 THEN EXIT DO
LOOP
SLEEP
a = 0: PRINT
DO
    a = a + 2
    PRINT a;
LOOP WHILE a < 40
SLEEP
a = 0: PRINT
DO
    a = a + 2
    PRINT a;
LOOP UNTIL a = 40
SLEEP
a = 0: PRINT
DO WHILE a < 40
    a = a + 2
    PRINT a;
LOOP
SLEEP
a = 0: PRINT
DO UNTIL a = 40
    a = a + 2
    PRINT a;
LOOP
PROBLEM 3: Problem 1 i DO ... LOOP döngüsüyle yapın

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.
DO WHILE ... LOOP gibi çalışır.

Örnek 1:
'WHILE-WEND döngüsü ile 1 - 40 arası çift sayıları yazdır
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
WHILE a < 40
    a = a + 2
    PRINT a;
WEND
PROBLEM 4: Problem 1 i WHILE..WEND döngüsüyle yapın

Örnek 2:

' Kabarcık sıralama. (Bubble Sort)
DEFINT A-Z
CONST diziboyutu = 16
DIM Sehir(diziboyutu) AS STRING
CLS
FOR i = 0 TO diziboyutu
	READ Sehir(i)
NEXT

' Alfabetik Sıralama
FOR i = 0 TO diziboyutu - 1
	FOR j = diziboyutu TO i + 1 STEP -1
		IF Sehir(j) < Sehir(j - 1) THEN
			SWAP Sehir(j), Sehir(j - 1)
		END IF
	NEXT
NEXT
PRINT "SIRALI LİSTE"
FOR i = 0 TO diziboyutu
	PRINT Sehir(i)
NEXT

DATA Niğde,Bursa,Ordu,Zonguldak,Sivas,Edirne,Konya,Denizli,aydın
DATA Manisa,Çankırı,Antalya,Şanlıurfa,Adana,İstanbul,Yozgat,uşak
Ekran çıktısı:
SIRALI LİSTE
Adana
Antalya
Bursa
Denizli
Edirne
Konya
Manisa
Niğde
Ordu
Sivas
Yozgat
Zonguldak
aydın
uşak
Çankırı
İstanbul
Şanlıurfa
Alfabetik sıralamada listedeki son 5 il adı neden sonda sıralandı?
Çünkü sıralamayı ASCII tablosundaki karakter kodu sayısal değerine göre sıralama yaptığı için.
ASCII tablosunda küçük harfler büyük harflerden sonra ve Türkçeye özgü karakterler İngilizce  harf karakterlerinden sonra gelmektedir. Sonra gelen harflerin ASCII sayısal değeri daha büyüktür. 

Bölüm ile ilgili QuickBasic soruları

  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)


Önceki Bölüm: 4: Kontrol blokları Sonraki Bölüm: 6: Diziler

1 yorum:

  1. 1 den 500 e kadar çalıştırma kodunu söyler misiniz (fibonacci)

    YanıtlaSil