Etiketler

18 Mayıs 2020 Pazartesi

QuickBasic Kursu: Bölüm 4: Kontrol blokları

Önceki Bölüm: QuickBasic Kursu: Bölüm 3: CLS , INPUT ve PRINT
Güncelleme: 18 Mayıs 2020
Programlama dillerinde döngüler ve akış kontrol komutları çok sık kullanılır.
Programları program yapan esas kısımlar bu komutlarla sağlanır.
Qbasicde diğer programlama dillerindekine benzer yapıda döngüler ve mantıksal karşılaştırmalar yapılabilir.

IF ... THEN ... ELSE

Mantıksal karşılaştırma için kullanılır.
Karşılaştırma işlemin sonucunda bir değer döner bu değer ya mantıksal DOĞRU dur ya da mantıksal YANLIŞ.
Lise 1 deyken matematik dersinde Mantık konusunda 1 ve 0'lar ile, doğru ve yanlışlar ile işlemler yapardık. Birçok kişide ne işe yarıyor bunlar diye söylenip dururlardı.
Demek ki bir gerekliliği varmış.
İşte onlar burada gerekecek, isterseniz matematikteki MANTIK ile ilgili kısımları bir daha gözden geçirin. :)

Mantıksal karşılaştırma için basit bir örnek:
IF A = 40 THEN B = 40
Burada A değişkenin değeri 40 ise B değişkeninin değeri de 40 olacaktır.
Eğer A nın değeri 40 dan farklı ise bu satırın hiçbir etkisi olmayacaktır.

Bir başka kullanım:
A = 25
IF A > 40 THEN M$ ="Sayı 40 dan büyük" ELSE M$= "Sayı 40 dan küçük"
PRINT M$
Üstte A değişkeninin değerinin 40'dan büyük olup olmadığı kontrol ediliyor.

Mantıksal karşılaştırmanın sonucunda ancak iki değer dönebilir. DOĞRU veya YANLIŞ.
DOĞRU olması durumunda THEN 'den sonraki işlem yapılır,
YANLIŞ olması durumunda ise ELSE 'den sonraki işlem yapılır.
A 'ya 25 aktardığımız için A>40 mantıksal karşılaştırmanın sonucu YANLIŞ olacaktır.
Çünkü 25, 40 'dan büyük değil.
Bu durumda M$ değişkenine "Sayı 40 dan küçük" değeri aktarılır.

DÜŞÜN: Üstteki programı denedikten sonra A = 40 olsaydı sonuç ne olurdu? diye düşünüp cevabı bulmaya çalışın.
Sonra Qbasicde deneyerek düşündüğünüzü kontrol edin.
IF A = 40 ' A , 40 a eşit mi?
IF A > 40 ' A , 40 dan büyük mü?
IF A < 40 ' A , 40 dan küçük mü?
IF A <> 40 ' A , 40 a eşit değilse
IF A <= 40 ' A , 40 a eşit ya da 40 dan küçük mü?
IF A >= 40 ' A , 40 a eşit ya da 40 dan büyük mü?
IF A ' A nın değeri 0 dan farklı mı? 
IF NOT A ' A nın değili DOĞRU mu?
IF ile karşılaştırma yaptığımızda dönen değerlere göre çok sayıda komut yürüteceksek aşağıdaki yapıyı kullanırız.
Bu şekilde kullanımda karşılaştırma bloğunu bitiren END IF kullanmak zorundayız.
IF A > 40 THEN
	'doğruysa yapılacaklar
	.... ....
ELSE
	'Yanlışsa yapılacaklar
	.... ....
END IF
Örnek :
INPUT "ADINIZ " ; AD$
IF AD$ = "MESUT" THEN
	PRINT "SİZİN ADINIZ MESUT"
ELSE
	PRINT "SİZİN ADINIZ MESUT DEĞİL"
END IF

İç içe IF

IF bloğu içerisine tekrar bir başka IF bloğu oluşturabilirsiniz. Büyük programlarda bu tür kodlamalara sık karşılaşılır.
İç içe IF lerin blokları birbirini kesmemeli. Üst-ast hiyerarşisinde olmalı.
INPUT A
IF A > 40 THEN
	IF A < 60 THEN
		PRINT "SAYI 40 ile 60 arasında"
	ELSE
		PRINT "SAYI 60 ya da 60 dan büyük"
	END IF
ELSE
	IF A = 40 THEN
		PRINT "SAYI 40 a eşit"
	ELSE
		PRINT "SAYI 40 dan küçük"
	END IF
END IF

Mantıksal karşılaştırmalar

Şimdiye kadar bir satırda bir değişkeni karşılaştırdık. Bazen birkaç değişkenin karşılaştırılıp sonucunun alınması gerekebilir.
INPUT A
IF A>10 AND A<20 THEN PRINT "SAYI 10 ile 20 arasında"
INPUT A
IF A<10 OR A>50 THEN PRINT "SAYI 10 ile 50 arasında değil"
' yani sayı 10 dan küçük ya da 50 den büyük
Mantıksal karşılaştırmalarda kullanılacak terimler:
AND : Ve
OR : Veya
XOR : Dıslayıcı Veya (EQV tersi)
EQV : Eşit (XOR tersi)
IMP : İse
NOT: Tersi

Değer Mantıksal karşılaştırma ve sonucu
X Y NOT X X AND Y X OR Y X XOR Y X EQV Y X IMP Y
1 1 0 1 1 0 1 1
1 0 0 0 1 1 0 0
0 1 1 0 1 1 0 1
0 0 1 0 0 0 1 1

1 : Mantıksal Doğru
0 : Mantıksal Yanlış
Bu terimlerden faydalanarak bitsel karşılaştırma da yapılabilir.
PRINT (155 AND 160)
yazıp çalıştırdığımızda 128 sonucunu alırız.
Çünkü;
155 in 2 li sayı düzenindeki karşılığı 10011011,
160 ınki ise 10100000.
İkisini alt alta yazıp bitlerini AND ile karşılaştırdığımızda
10011011 (155)
10100000 (160)
-----AND------
10000000 (128)
değeri elde edilir.
Desimal sayıları 2 li sayıya çevirmek için Hesap makinesini Programlayıcı görünüme getirerek kullanabilirsiniz.

Dec = Decimal(10 lu sayı),
Bin = Binary (2 li sayı),
Hex = Hexadecimal (16 lı sayı)

ELSEIF

IF THEN ELSE yapısında bir mantıksal sınama sonucunda oluşan DOĞRU ya da YANLIŞ durumuna göre değerlendirme yapılıyor.
Bazen birden fazla sınama yapmak gerekli olabilir. İlk sınamada sonuç YANLIŞ olursa ELSEIF ile tekrar sınama o da YANLIŞ olursa tekrar başka ELSEIF sınamaları yapılabilir. Hiçbir sonuç DOĞRU olmazsa ELSE işletilir. Aşağıdaki örnek gibi.
INPUT "1 ile 3 arasında sayı girin " ; A
IF A = 1 THEN
	PRINT "SAYI = 1"
ELSEIF A = 2 THEN
	PRINT "SAYI = 2"
ELSEIF A = 3 THEN
	PRINT "SAYI = 3"
ELSE
	PRINT "HATALI SAYI"
END IF

SELECT CASE

Üstteki kodların yerine ELSEIF 'e benzer yapıya sahip ancak anlaşılırlığı ve kodlaması kolay olan SELECT CASE yapısı kullanılır.

CASE ile verilen değer karşılaştırılır.

Örnekler:

CASE 1,2,5
Birden fazla değer karşılaştırılmıştır.

CASE 6 TO 10
6 ile 10 arasındaki değerler ise.

CASE IS >10
10'dan büyük sayılar ise.
Karşılaştırma operatörleri olarak;
< (küçüktür)
> (büyüktür)
<= (küçük eşittir)
>= (büyük eşittir)
<> (eşit değildir)
= (eşittir)
kullanılabilir

Üstteki örnekler tek satırda karışık olarak da kullanılabilir
CASE 1 TO 4, 7 TO 9, 11, 13, IS >20

CASE ELSE
CASE sınamalarında hiçbir şart uymazsa bu şart gerçekleşir.

Örnek:
INPUT "1 ile 3 arasında sayı girin " ; A
SELECT CASE A
	CASE 1
		PRINT "SAYI = 1"
	CASE 2
		PRINT "SAYI = 2"
	CASE 3
		PRINT "SAYI = 3"
	CASE ELSE
		PRINT "HATALI SAYI"
END SELECT

Başka bir örnek:
' Fonksiyon ve kontrol tuş değerleri
CONST ESC = 27, DOWN = 80, UP = 72, LEFT = 75, RIGHT = 77
CONST HOME = 71, ENDKEY = 79, PGDN = 81, PGUP = 73
DO
    ' Fonksiyon ya da ASCII tuşu al
    DO
        Tus$ = INKEY$
    LOOP WHILE Tus$ = ""
    IF LEN(Tus$) = 1 THEN
        ' ASCII tuşları
        SELECT CASE ASC(Tus$)
            CASE ESC
                PRINT "Esc tuşu"
                END
            CASE IS < 32, 127
                PRINT "Kontrol kodu"
            CASE 30 TO 29
                PRINT "Rakam: "; Tus$
            CASE 65 TO 90
                PRINT "Büyük harf: "; Tus$
            CASE 97 TO 122
                PRINT "Küçük harf: "; Tus$
            CASE ELSE
                PRINT "Diğer: "; Tus$
        END SELECT
    ELSE
        ' 2-byte değerli tuş kodlarını 1-byte ASCII koduna dönüştür
        Tus$ = RIGHT$(Tus$, 1)
        SELECT CASE Tus$
            CASE CHR$(DOWN)
                PRINT "Aşağı ok tuşu"
            CASE CHR$(UP)
                PRINT "Yukarı ok tuşu"
            CASE CHR$(PGDN)
                PRINT "PGDN tuşu"
            CASE CHR$(PGUP)
                PRINT "PGUP tuşu"
            CASE CHR$(HOME)
                PRINT "HOME tuşu"
            CASE CHR$(ENDKEY)
                PRINT "END tuşu"
            CASE CHR$(RIGHT)
                PRINT "SAĞ ok tuşu"
            CASE CHR$(LEFT)
                PRINT "SOL ok tuşu"
            CASE ELSE
                BEEP
        END SELECT
    END IF
LOOP
Sonraki Bölüm:
QuickBasic Kursu Bölüm 5: Döngüler

İlk Bölüm

Hiç yorum yok:

Yorum Gönderme