You are on page 1of 29

BASIC PROGRAMLAMA DİLİ

BASIC kelimesi Beginners All-Purpose Symbolic Instruction Code kelimelerinin baş


harflerinden türetilmiş, 1964’te John George Kemeny ve Thomas Eugene Kurtz tarafından New
Hampshire, ABD’de geliştirilmiş bir dildir. Genel amaçlı yeni başlayanlar için bir programlama dilidir.
Öğrenmesi kolay, yüksek seviyeli bir dildir. Basic kodları bir derleyici ile çalıştırılabilir ve (.exe) tip
dosyalara dönüştürülebilir. Basic programlama dili algoritma’ya çok yakın bir yapıya sahiptir. Bu
yüzden öğrenilmesi ve uygulanması kolaydır.

Günümüzde de çeşitli türevleri kullanılmakta olan yüksek düzey bir programlama dili.
Microsoft daha sonra Kişisel bilgisayarlar için Quick Basic derleyicisini çıkartmıştır. Bununla yazılan
BASIC metinlerini makine koduna çevirilebilmiş böylece sürat kazanmıştır. Bugün halen geniş bir
kullanım alanına sahip olan Visual Basic dili var olup bununla hatta Windows’un belirli bölümleri
yazılmıştır. Her Microsoft Office paketinde bir BASIC türevi var olup makro programlamada büyük
kolaylıklar getirmektedir.

Basic, BasicA, GWBasic, TurboBasic, Power Basic, QBasic'in yanı sıra QuickBasic, DOS işletim
sistemini temel alan, öğrenmesi kolay bir programlama dili (ve bu nedenle yeni başlayanlar için
idealdir), aynı zamanda Windows'ta da çalıştırılabilir. Basic, QBasic ve QuickBasic arasındaki farklar:
QBasic, QuickBasic daha alt bir sürümüdür. QuickBasic ile karşılaştırıldığında QBasic bir derleyicisi
olmaması kadar sınırlıdır. Bu nedenle, QBasic çalıştırılabilir dosyalar (.exe dosyaları) üretmek için
kullanılamaz. Kaynak kodu (genellikle .bas uzantılı dosyalar) QBasic yorumlayıcısı tarafından
doğrudan çalıştırılabilir. Ayrıca, QuickBasic, QBasic’ göre daha kapsamlı bir komut kümesine sahiptir.

Basic dilinde rezerve edilmiş sözcükler


ABS DATA GOTO$ MKDIR RANDOM SWAP
ACCESS DATE$ HEX$ MKDMBF$ RANDOMIZE SYSTEM
AND DO IF MKI$ READ TAB
APPEND DEF FN IMP MKS$ REDIM TAN
AS DEF SEG INKEY$ MKSMBF$ REM THEN
ASC DEF USR INP MOD RENUM TIME$
ATN DEFDBL INPUT MOTOR RESET TIMER
AUTO DEFINT INPUT# NAME RESTORE TO
BASE DEFSNG INPUT$ NEW RESUME TROFF
BEEP DEFSTR INSTR NEXT RETURN TRON
BLOAD DELETE INT NOISE* RIGHT$ UBOUND
BSAVE DIM IOCTL NOT RMDIR UNLOCK
CALL DO* IOCTL$ NULL* RND UNTIL
CALLS DRAW KEY OCT$ RSET USING
CASE EDIT KILL OFF RUN USR
CDBL ELSE LBOUND ON SADD USR0
CHAIN ELSEIF LCOPY OPEN SAVE USR1
CHDIR END LEFT$ OPEN COM SCREEN USR2
CHR$ ENVIRON LEN OPTION SEG USR3
CINT ENVIRON$ LET OR SELECT USR4
CIRCLE EOF LINE OUT SGN USR5
CLEAR EQV LIST OUTPUT SHARED USR6
CLOSE ERASE LLIST PAINT SHELL USR7
CLS ERDEV LOAD PALETTE USING SIN USR8
COLOR ERDEV$ LOC PEEK SOUND USR9
COM ERL LOCAL PEN SPACE VAL
COMMAND$ ERR LOCATE PLAY SPACE$ VARPTR
COMMON ERROR LOCK PMAP SPC VARPTR$
CONST EXIT LOF POINT SQR VIEW
Prof. Dr. Levent ŞENYAY V -1 Bilgisayar Programlama
CONT EXP LOG POKE STATIC WAIT
COS FIELD LOOP POS STEP WEND
CSNG FILES LPOS PRESET STICK WHILE
CSRLIN FIX LPRINT PRINT STOP WIDTH
CVD FOR LPRINT# PRINT# STRIG WINDOW
CVDMBF FRE LSET PRINT# USING STR$ WRITE
CVSMBF GET MERGE PSET STRING$ WRITE#
CVI GO MID$ PUT SUB XOR
CVS GOSUB MKD$

Basic dilinde satır numaraları gereksizdir. Ama kullanabilirsiniz de. Kullanırsanız; numaraların
birbirini takip etmesi şart değildir. Basic dilinde satır numaraları yerine okunurluğu kolaylaştırması
için ETİKET kullanılır. Etiketi de sadece GOTO veya GOSUB ile gidilecek satırlara koymak yeterlidir.

10 A = A + 1
20 IF A > 20 THEN GOTO 50
30 PRINT A
40 GOTO 10
50 END

Yukarıdaki program kodları yerine; aynı işi yapan, satır numarası vermeden, etiket kullanarak
yazılmış hali aşağıda.

basla:
A=A+1
IF A > 20 THEN GOTO bitis
PRINT A
GOTO basla
bitis:
END

Bir satırda birden fazla komut da kullanılabilir. İki komutu ayırmak için : (iki nokta üst üste)
Kullanılır.

Prof. Dr. Levent ŞENYAY V -2 Bilgisayar Programlama


Veri Yapıları (Data Structures) : ifadeler (expressions)
Sabitler, Değişkenler (Constants & Variables) ve Operatörler
Basic dilinde sabitler ve değişkenler, program içinde ve çalışırken (sabit ise hiç değişmeyen, değişken
ise değişebilen) ifadelerdir, bu ifadeler string (karekter) ve numeric (sayısal; 0,-,+ değerler alan)
sabitler ve değişkenlerdir.

1. Karakter (STRING) sabitler, bellekte her bir karakter 1 byte (8 bit) yerde saklanır, “ “ iki tane
çift tırnak içinde yer alır ve maksimum 255 karekter uzunlukta olabilir.

STRING değişken tanımlama : DEFSTR A veya DEFSTR C-F


Array (dizinli) değişken tanımlama : DIM A(n) AS STRING veya DIM A$
A$=”menekşe”
A$=”123456”

2. tamsayı (INTEGER), bellekte 2byte (16 bit) yerde saklanır, -32768 ile 32767 sayıları arasındaki
TAM sayılarıdır (2^15). Daha büyük sayılar yazmaya çalıştığınızda Owerflow (Taşma) hatası
verir. Noktalı rakamlar vermeye çalıştığınızda en yakın olan sayıya tamamlar.

INTEGER değişken tanımlama : veya DEFINT A


Array (dizinli) değişken tanımlama : DIM A% veya DIM A AS INTEGER
A%=241
A%=23.75 sayısı 24 şeklinde
A%=22.49 sayısı 22 şeklinde gösterilir ve bellekte de değişmiş hali ile saklanır.

3. uzun tamsayı (LONG), bellekte 4 byte (32 bit) yerde saklanır, -2147483648 ile 2147483647
sayıları arasındaki TAM sayılardır (2^31). Noktalı sayılar INTEGER’ deki gibi işlem görür.

LONG değişken tanımlama : DEFLNG A


Array (dizinli) değişken tanımlama : DIM A AS LONG veya DIM A&
A&=1234567890

4. sabit noktalı (SINGLE), bellekte 4 byte (32 bit) yerde saklanır, 7 rakamdan oluşan küsurlu veya
tam rakamları tutar, daha uzun bir sayı girildiğinde bilimsel kullanım (E+/- ) notasyonu ile
gösterilir.

SINGLE değişken tanımlama : DEFSNG A


Array (dizinli) değişken tanımlama : DIM A AS SINGLE veya DIM A!
A! = 3.141145
A! = 12345678 sayısı 1.234568E+07 şeklinde gösterilir.
A! = 1 / 25000000 sayısı 4E-08 şeklinde gösterilir.

5. çok büyük ve çok küçük sayılar (DOUBLE), bellekte 8 byte (64 bit) yerde saklanır. 15
rakamdan oluşan noktalı veya tam sayılardır. Diğer özellikler SINGLE özelliklerine benzer.

DOUBLE değişken tanımlama : DIM A AS DOUBLE veya DIM A#


Array (dizinli) değişken tanımlama : DEFDBL A
A#=123456789012345

Onaltılı sistem sayısı (HEXADECIMAL) ve sekizli sistem sayısı (OCTAL) sabit veri tipleri vardır.
Prof. Dr. Levent ŞENYAY V -3 Bilgisayar Programlama
Değişken isimleri kullanma kuralları;
1. Değişken ismi en fazla 255 karakterden oluşmalıdır.
2. Değişkenler arasında _ hariç boşluk : ; , . / ' # [ ] ! " $ % ^ & * ( ) { } ve Türkçe karakterler
kullanılamaz, değişken adı sonunda $, %, &,!, # işaretleri kullanılır ise özel anlamları oluşur
3. Değişken isminin ilk karakteri harf olmalıdır. Yani değişkenler rakamla veya _ ile başlamaz.
4. Değişken isimlerinde büyük küçük harf ayrımı yoktur. "Abcde" ile "ABCDe" aynı algılanır.
5. Basic diline ait rezerve kelimeler kullanılamaz, herhangi bir BASIC komutu kullanılamaz.

Sayısal işlemciler (Numeric operators)

Aritmetik İşlemciler (Arithmetical operators)


1. ( ) parantezler işlem önceliklerini değiştirmek için kullanılır
2. ^ üs alma
3. – (negation) işaret değiştirme
4. * ve / çarpma ve bölme
5. \ tamsayı bölme ( 3\2=1, 1\3=0)
6. MOD modula aritmatiği (10 MOD 4= 2, 2 MOD 5=0, -1 MOD -3=-1, 5.55 MOD 2=0
7. + ve - toplama ve çıkartma

İlişkisel işlemciler (Relational operators)


= eşit
<> veya >< eşit değil
> büyük
< küçük
>= veya => büyük veya eşit
<= veya =< küçük veya eşit

İlişki operatörleri, herhangi bir ifade içerisinde sadece bir tanesi kullanılabilir, birden çok olamaz.

Mantıksal işlemciler (Logical operators)

Operatör öncelikleri
1. NOT complement
2. AND conjunction
3. OR disjunction
4. XOR exclusive or (AND hariç OR)
5. EQV equivalence (x EQVy : x eşit y)
6. IMP implication (Birincinin değili veya ikinci)

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

Bir işlemde operatör gruplarının işlenme öncelikleri


1. İlk olarak fonksiyonlar çalışır FUNC (ABS; SIN; AQR veya kullanıcı tanımlı fonx)
2. Aritmetiksel operatörler ^, negation, X ve /, \, MOD + ve – sırası ile çalışır
3. İlişkisel operatörler
4. Mantıksal operatörler NOT, AND, OR, XOR, EQV, IMP sırası ile çalışır.
Prof. Dr. Levent ŞENYAY V -4 Bilgisayar Programlama
Editör Komutları (Commands)
RUN
SAVE
LOAD

Ana bellek : →(save) ; ← (load) Yardımcı saklama birimi :


Dosya ismi : fn.ft (file name.file type)

fn: A-Z ; 0-9 ; $ , @ , % , # , & , $ , , , ! , _ , \ , ~ , > , < , ( , ) , { , }


ft : BAS, DAT, EXE

Aritmetik ifade (sabitler ve değişkenler) : A+B/C gibi


Aritmetik deyim (işaretsiz değişken=aritmetik ifade) : A=B+C gibi

www.qbasic.net
http:// http://deger.republika.pl/Download_MS_Basic_versions.htm
http://qbasicprogramlar.blogspot.com.tr/p/qbasic-program-indir-download.html
Prof. Dr. Levent ŞENYAY V -5 Bilgisayar Programlama
Basic dilinde program yazma
Programlama dili komut, deyim, fonksiyon ve değişkenleri bu doküman içerisinde gösterimi sırasında
aşağıdaki formata veya syntax yapısına uygun açıklamalar ile kullanılmıştır. Bu doküman aşağıdaki
gösterim kurallarına göre anlaşılmalıdır. Bilgisayar üzerinde çalışırken Basic version farklılıklarından
kaynaklanan syntax farklılıkları oluşabilir, programı bu tür hatalardan arındırmak için versiyona uygun
yazım düzeltmeleri gerektirebilir.

BÜYÜK HARF : gösterildiği gibi aynen kullanılmalıdır


Küçük harf : yerine uygun ifade ilgili yere konulmalıdır
[ ] : isteğe bağlı kullanılır veya kullanılmaz (optional)
( ) : içerisindeki ifade istenildiği kadar tekrarlanabilir
Gösterim formatı içindeki [ ] hariç, diğer tüm işaretler { , ( ) ; = - } aynı gösterildiği gibi kullanılmalıdır.

Özel anlamları olan karakterler (special chararters) ; = + - * / \ ^ ( ) % # $ ! & , ; : ? < > “ _

Satır numarası ile etiket aynı işlevi görür.


10 DATA 5, 6, 7 ETIKET:
READ A DATA 5, 6, 7
RESTORE 10
READ B
Deyimler (Statements)
Nonexecutable
REM program içerisinde açıklama yapmak için

DATA READ tarafından okutulacak verilerin tutulduğu deyim

Executable
[LET] değişken=ifade atama (assignment) deyimi

END programı durdurma (programın sonu)

CLS ekranı temziler

STOP açık veri dosyalarını kapatarak programı durdurma



Atama ve Giriş-Çıkış Deyimleri

[LET] değişken=ifade değişken içine ifade atama deyimi, LET kullanılmayabilir.

READ değişken [,değişken] verileri DATA komutundan bilgisayar belleğine aktaran komut

DATA sabit [,sabit] … char için “ “ optional ancak “,” zorunlu

INPUT [;][“mesaj”] değişken [,değişken] … verileri dış ortamdan (klavye) bilgisayara alan komut

PRINT [ifadeler listesi] [;] bilgisayar belleğinden dış ortama veri aktaran komut
İfadeler değişken veya sabitler olabilir

LPRINT yazıcıya ifadeleri yazdıran kom


Prof. Dr. Levent ŞENYAY V -6 Bilgisayar Programlama
Örnekler:
DATA 3,12 READ A,AD$ READ A,B DATA 5,12
READ A,B DATA 23, OCAK PRINT A,B ETIKET:
DATA 7 RESTORE 10 DATA 6,15
READ C READ A READ C,D READ A
READ D,E READ B PRINT C,D RESTORE ETIKET
DATA -16 READ C,D$ 10 DATA 10,8,15,20 READ B,C
DATA 15 DATA 5,-6,3,SALI
READ A,B,C
DATA 7,35 (out of data in READ C hatası)

Alıştırmalar :

Aşağıdaki sabitleri sınıflandırın


3 -4.2 “AHMET” &077 ““ “342.43” 143 E-3
68734 1.0 &H44

Aşağıdaki değişkenleri sınıflandırın


A% B3 X3# FAIZ$ CEM$ A9343% B!

Aşağıdaki değişkenlerden hangileri geçersizdir? Neden?


AHMET !AB 3AY$ A%B 5X^2 BILGI# NOT END
A+B ECY342 BETA

Aşağıdaki atama deyimlerinden hangileri hatalıdır? Neden?


A=3+4-2 B%=”AHMET” B$=A A=2*A A-B=C+D X=6+X$
SAY!=9-SAY! A=B+C-A X-3=6 MUSTAFA=MUSTAFA$

Aşağıdaki programın çalışması sonucu C,S,P değerleri ne olur?


DATA 3,5
GIT :
DATA 9
READ A,B
C=A+B
DATA 18,35
REAM M,N
S=C+M^2+N
RESTORE GIT
READ P
PRINT C,S,P

Prof. Dr. Levent ŞENYAY V -7 Bilgisayar Programlama


Kontrol (karar) deyimleri
GOTO satırno/etiket

Program kodunun herhangi bir yerinde işleyişini bırakıp başka bir noktadan
çalışması için kullanılır. Goto ve ardında bir etiket yada satır numarası yazılmalıdır.

PRINT "MERHABA"
GOTO 10
PRINT "BU SATIRI EKRANDA GÖREMEZSİNİZ"
10 PRINT "PROGRAM SONA ERDİ"
END

IF <koşul> THEN <ifade> [ELSE <ifade>] ENDIF


E
H
E koşul H

işlem işlem

veya
IF <koşul> THEN <ifade>
[ELSE <ifade>]
ENDIF

<Koşul> içerisinde relational ve/veya logical operatörler ve bunların kombinasyonları kullanılır.


<İfade> olarak da GOTO satır no/etiket veya başka işlemler olabilir

Örnekler :
10 READ A
IF X=8 THEN 10

IF A=L THEN PRINT X

IF A$=B$ THEN X=18 veya IF A$=”*” THEN X=18

X<> 5 M<>N C$<>”EVET” A<5 M<N D$<”EGE” M<=8*A 3*X-2>=Y-Z vb.

X=5
IF NOT X=5 THEN PRINT X
IF NOT X<>5 THEN PRINT X-4

READ A,B,C
IF NOT A<>B THEN END
IF NOT A=B THEN PRINT B
IF C>A THEN PRINT A
DATA 1,5,3

Prof. Dr. Levent ŞENYAY V -8 Bilgisayar Programlama


X=4
Y=5
Z=6
IF X>Y AND X>Z THEN PRINT X
IF Y>X AND Y>Z THEN PRINT Y
IF Z>X AND Z>Y THEN PRINT Z

IF N=2 AND M=2 THEN PRINT “EŞİT”


IF N>= 5 AND M<=5 THEN PRINT “N=M VEYA N>M”

IFM A$=”E” AND M>5 AND N$=”DOKUZ” THEN …

BASLA :
INPUT “devam için E/e giriniz”, C$
IF C$=”e” OR C$=”E” THEN PRINT “devam ediyorsunuz” : GOTO BASLA
ELSE IF C$=”h” OR C$=”H” THEN STOP
ELSE PRINT “yanlış harf girdiniz”
GOTO BASLA

I=7
IF I<3 OR I>5 THEN PRINT I
END

Girilen bir sayının tek/çift olduğunu bulan program


INPUT X
IF X\2=X/2 THEN PRINT “sayı cift” ELSE PRINT “sayı tek”

veya
IF X=(X\2)*2 THEN PRINT “sayı cift” ELSE PRINT “sayı tek”

veya
B%=X/2 : C=B%*2
IF X=C THEN PRINT “sayı çift”
ELSE PRINT “sayı tek”

veya
IF X MOD 2=0 THEN PRINT “sayı çift” ELSE PRINT “sayı tek”

Girilen bir sayının 3’ün ve 5’in tam katı olduğunu bulan program
INPUT SAYI
IF SAYI=(SAYI\5)*5 AND SAYI=(SAYI\3)*3 THEN PRINT “sayı 3 ve 5 in tam katları”
ELSE PRINT “sayı 3 ve 5 in tam katı değil”

Prof. Dr. Levent ŞENYAY V -9 Bilgisayar Programlama


Girilen sayılar içinde en küçük ve en büyük olanı bulan program parçası
INPUT SAYI
ENB=SAYI
ENK=SAYI
DEVAM :
INPUT SAYI
IF SAYI<ENK THEN ENK=SAYI ENDIF
IF SAYI>ENB THEN ENB=SAYI ENDIF
PRINT “başka veri var mı? E/H”
INPUT CEVAP
IF CEVAP=”E” OR CEVAP=”e” THEN GOTO DEVAM ENDIF
PRINT “en büyük”,ENB
PRINT “en küçük”,ENK

Faktöryel hesabı yapan program


READ SAYI
I=0
FAKTORYEL=1
DEVAM :
I=I+1
FAKTORYEL=FAKTORYEL*I
IF I=SAYI THEN PRINT FAKTORYEL
ELSE GOTO DEVAM
ENDIF

Yaklaşık değer bulan Karekök algoritması :


Bir çok hesap makinası bu algoritmayı kullanır

X : sayı (X>0)
YK : yakın kök
S1 : X/YK
S2 : (S1+YK)/2

İterasyon X YK S1 S2 hassasiyet (0,001)


1 55.65 8 6.956 7.478 0.522
2 55.65 7.478 7.442 7.460 0.018
3 55.65 7.460 7.4597 7.45989 0.0001
Gerçek değer √55.65 = 7.45989 (0.0001 basamağında 1 br.lik hata ile 3. İterasyonda)

Örnek : vize ve final notu veri olarak giriliyor, vize notu %40 + final notu %60 başarı botu olarak
hesaplayan ve final notu 50 ve üstü ve başarı notu 50 ve üstü olan için GEÇTİ, diğerleri için KALDI
çıktısı veren program

READ V,F
IF F<50 THEN PRINT “KALDI”
ELSE N=VIZE*0.4+F*0.6
IF N<50 THEN PRINT “KALDI”
ELSE PRINT “GEÇTİ”
ENDIF
ENDIF

Prof. Dr. Levent ŞENYAY V -10 Bilgisayar Programlama


Örnek : 100 kişilik sınıfta 50 altında başarı notu olup dersten kalanlar ve geçenlerin sayısını bulup
yazdıran program

GS=0 : REM giren sayısı


KS=0 : REM kalan sayısı
I=0 : REM sayaç
DEVAM :
I=I+1
READ BNOT
IF BNOT >=50 THEN GS=GS+1 ELSE KS=KS+1
ENDIF
IF I<>100 THEN GOTO DEVAM ENDIF
PRINT “geçen sayısı =”,GS
PRINT “kalan sayısı =”,KS

ELSEIF
IF in bir başka kullanımı

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
Bunun yerine kullanılan bir benzer deyim SELECT CASE dir. Eğer kontrol edilecek değişken için 2’den
fazla koşul sonucu varsa SELECT CASE yapısı kullanılır.

SELECT CASE <koşul>


CASE <koşul> : ifade 1
CASE <koşul> : ifade 2

CASE ELSE :
ENDCASE

Ö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 (bir alt satır kullanılır ise ( : ) gerekmez ).
PRINT "SAYI = 3"
CASE ELSE
PRINT "HATALI SAYI"
END SELECT veya [ENDCASE]

Prof. Dr. Levent ŞENYAY V -11 Bilgisayar Programlama


Örnek : 100 üzerinden alınan notları 0-49 arasını F, 50-59 arasını D, 60-69 arasını C, 70-84 arasını B ve
85-100 arasını A şeklinde nota dönüştüren bir algoritma hazırla.

BASLA :
READ BNOT
SELECT CASE
CASE (BNOT>=0 AND BNOT<50) : PRINT “F”
CASE (BNOT>=50 AND BNOT<60) : PRINT “D”
CASE (BNOT>=60 AND BNOT<70) : PRINT “C”
CASE (BNOT>=70 AND BNOT<85) : PRINT “B”
CASE (BNOT>=85 AND BNOT=<100) : PRINT “A”
CASE ELSE : PRINT “girilen not geçersiz” : STOP
END CASE
GOTO BASLA
DATA 75,65,60,50,100,-1

ON n GOTO s1,s2, … sk
n=1
n=2

n=k

0 < n < 255 arasındaki integer (tamsayı) veya tamsayıya yuvarlanabilir değerler alır.
Aynı anda birden çok karşılaştırmayı aynı anda yapmak için kullanılır.

n değerine örnekler : A, (x+4-Y)

10 READ A
ON A/10 GOTO 30,50
30 B=A*2
GOTO 10
50 C=A*3
PRINT A,B,C
DATA 10,20

Ayın ilk günü P.tesi ise, girilen gününü hangi gün olduğunu bulan program
INPUT GUN
A=GUN MOD 7
ON A+1 GOTO 10,20,30,40,50,60,70
10 PRINT “Pazar” : GOTO 80
20 PRINT “pazartesi” : GOTO 80
30 PRINT “Salı” : GOTO 80
40 PRINT “Çarşamba” : GOTO 80
50 PRINT “Perşembe” : GOTO 80
60 PRINT “Cuma” : GOTO 80
70 PRINT “cumartesi” : GOTO 80
80 STOP
Örnek : Yukarıdaki programı SELECT CASE ile yaz.

Örnek : Tek haneli rakamla girilen bir sayıyı yazı ile yazan program

Prof. Dr. Levent ŞENYAY V -12 Bilgisayar Programlama


Döngü deyimleri
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 etiket/satır no

Program akışını herhangi bir koşula bağlı olmaksızın <etiket> ile belirtilen deyime aktarmak için
kullanılan deyim. GOTO bir döngü deyimi olmamasına rağmen IF – THEN - ELSE kontrolları ile beraber
recursive döngüler oluşturmak için kullanılabilir.

En basit döngü GOTO ile yapılan döngüdür.

BASLA:
A=A+1
PRINT A
GOTO BASLA

FOR değişken=x TO y [STEP z] ... NEXT değişken

Belirli sayılarda işlemlerin tekrar etmesi için kullanılır. Döngü değişkeni döngü çinde kullanılabilir,
ancak bu değer asla değiştirilmemelidir. Döngü değişkeni sonlanmadan döngü dışına çıkılabilir, ancak
döngü dışından döngü içinde döngü başı hariç herhangi bir yere GOTO ile giriş yapılamaz
FOR N = 1 TO 25
PRINT N
NEXT N

Örnek : Çarpım tablosu


FOR I=1 TO 10
FOR J=1 TO 10
PRINT I,”*”,J,”=”,I*J
NEXT J
NEXT I

EXIT FOR
FOR döngülerinden doğrudan çıkartır ve programın çalışmasının NEXT deyiminden sonraki komuttan
devamını sağlar

WHILE <koşul>... WEND


Koşul sağlandığı sürece WHILE ile WEND arasındaki deyimler tekrarlanır/çalışır, koşulun ilk
sağlanmadığı durumda program WEND den sonraki deyime geçer.

CLS
WHILE A < 40 ' A<40 olduğu sürece devam
A=A+2
PRINT A
WEND

Prof. Dr. Levent ŞENYAY V -13 Bilgisayar Programlama


CLS CLS
I=1 FOR I=1 TO 10 BY 1 DO
TOP=0 TOP=TOP+I
WHILE I<=10 DO REPEAT
TOP=TOP+I PRINT TOP
I=I+1
WEND
PRINT TOP

DO WHILE <condition true>


...
LOOP döngüsü,
veya
( WHILE <koşul>
...
WEND ) döngüsü ile aynı, syntax farklı
<koşul> doğru olduğu sürece çalışır

A=0
DO WHILE A<4 ‘A<4 olduğu sürece döngü çalışır
PRINT A
A = A +1
LOOP

Aynı döngünün bir farklı kullanımı ise, koşulu döngü sonunda kullanmaktır.
A=0
DO
PRINT A
A=A+1
LOOP WHILE A < 4 ' A<4 olduğu sürece döngüye devam

Yukarıdaki iki programı da aynı işlemleri yapar. Eğer WHILE, LOOP’un yanına konursa
döngüde şart aranmaksızın en az 1 kere döner. DO’ nun yanına konursa döngü başlamadan
şart kontrol edilir, şart uygun değilse döngü gerçekleşmez.

DO UNTIL <condition>

LOOP döngüsü
<koşul> yanlış olduğu sürece çalışır, diğer bir ifadeyle döngü koşul DOĞRU olana kadar çalışır.
veya
DO

UNTIL <condition> LOOP

A=0
DO UNTIL A>4 ‘A>4 oluncaya kadar döngü çalışır
PRINT A
A = A +1
LOOP

Prof. Dr. Levent ŞENYAY V -14 Bilgisayar Programlama


WHILE için verilen açıklamalar burada da geçerli UNTIL’i DO’nun yanında ya da LOOP’un
yanında yer alabilir. Özetle WHILE, şartın DOĞRU olmasında; UNTIL şartın YANLIŞ olması durumunda
döngüye devam edilir.
OS =0 TOP=0
TOP=0 FOR I=1 TO 30 BY 1 DO
DO PRINT “NOT GİR”
PRINT “ÖĞRENCİ MEVCUDUNU GİR” READ N
READ N TOP=TOP+N
TOP=TOP+N REPEAT
OS=OS+1
LOOP UNTIL OS>30

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 kullanabilme olanağı vardır.

EXIT DO
Bu deyim kullanıldığında, DO döngüsünün koşulu ne olursa olsun, koşul önemini yitirir ve içinde
bulunulan döngüden dışarıya çıkılmasını sağlar ve program LOOP komutundan sonraki satırdan
çalışmaya devam eder.

Örnek:
DO

IF <koşul> THEN EXIT DO

LOOP UNTIL <koşul>

Prof. Dr. Levent ŞENYAY V -15 Bilgisayar Programlama


Alıştırmalar :
1. 1 den 20 ye kadar sayıları ekrana yazdıran program
2. 1 den 19 a kadar tek sayıları ekrana yazdıran program
3. 1 den 100 e kadar sayıların toplamını yazdıran program
4. Ekrandan girilen 50 sayı içinde kaçı 2 ile, kaçı 3 ile, kaçı 5 ile tam bölünebilir olduğunu
hesaplayan program
5. FOR I=1 TO 9
PRINT I,I-9
NEXT I
6. FOR I=1 TO 5 STEP 2
PRINT I
NEXTI

7. FOR I=1 TO 7 STEP 2


FOR J=1 TO 5
PRINT I,J
NEXT J
NEXT I
8. A=1+2+4+8+16+32+64+128 seri toplamı
9. B=1-2+4-8+16-32+64-128 seri toplamı
10. C=1+1/10+1/100+1/1000+1/10000 seri toplamı
11. D=1-2/10+3/100-4/1000+5/10000 seri toplamı
12. E=1+x/1!+x2/2!+ … + xn/n!
13. 1 den 20 ye kadar sayıların kareleri, küpleri, karekökleri listeyen program
14. N adet sayı içinde enbüyük ve en küçük sayıyı bulan program

Alıştırma 15.
READ X
WHILE X<>-1
WHILE X>0
PRINT X
X=X-1
WEND
READ X
WEND
DATA 3,2,4,-1

Alıştırma 16.
S=5 : T1=0 : T2=0 : T3=0
READ K,M
WHILE K<>-1 AND M<>-1
ON K GOTO 50,60,70
50 T1=T1+M : GOTO DEVAM
60 T2=T2+M : GOTODEVAM
70 T3=T3+M
DEVAM :
READ K,M
WEND
PRINT T1,T2,T3
DATA 1,50,2,50,3,80,1,20,2,20,1,10,3,40,3,20,-1,-1

Prof. Dr. Levent ŞENYAY V -16 Bilgisayar Programlama


Alıştırma 17.
Alttaki çıktıyı veren döngüyü oluşturun
2x3 2x4 2x5 2x6
3x3 3x4 3x5 3x6
4x3 4x4 4x5 4x6
5x3 5x4 5x5 5x6

Alıştırma 18.
FOR I=2 TO 5 BY 1 DO
FOR J=3 TO 6 BY 1 DO
PRINT I*J
REPEAT
REPEAT

Alıştırma 19.
I=1
FOR J=1 TO 3 BY 1 DO
FOR K=1 TO 3 BY 1 DO
PRINT I,J,K
REPEAT
REPEAT

Alıştırma 20.
I=2
WHILE I<7
PRINT I
PRINT 2*I
PRINT 3*I
PRINT 4*I
I=I+1
WEND

Alıştırma 21.
I=1
WHILE I<6
I=I+1
J=0
WHILE J<4
J=J+1
K=I*J
PRINT K
WEND
WEND

Prof. Dr. Levent ŞENYAY V -17 Bilgisayar Programlama


Dizinli (alt sıralı) değişkenler (array)

DIM değişken(indis1 [,indis2,…]) [,değişken (indis1,indis2, …)]

değişken : sayısal veya karakter değişken olabilir


indis : max 255 boyut ve her boyutta max 32767 eleman olabilir

Program içinde kullanılacak veriler program içinde birden fazla kez kullanılacak ise bu verileri
dizinli/indisli/altsıralı değişkenlere aktarılması daha uygundur. Bu tür değişkenler programda
kullanılmadan önce DIM deyimi ile tanımlanmalıdır.

OPTION BASE n (n değeri 0 veya 1 olabilir)


Aksi belirtilmez ise, boyutlu değişken tanımlarında boyutun ilk indisi no 0 (Sıfır) olur.
İlk indis 1 veya 0 dışında bir değer alamaz.

LBOUND, UBOUND
Tanımlanmış bir dizinin ilk boyut numarasını öğrenmek için LBOUND, son boyutunu öğrenmek
için UBOUND kullanılır.

Örnek : OPTION BASE 1


DIM A(10) AS INTEGER
PRINT "İlk boyut no: " ; LBOUND(A)
PRINT "Son boyut no: " ; UBOUND(A)

Örnek: DIM A(10) AS INTEGER


FOR N = 0 TO 10
A(N) = N * 10
NEXT
FOR N=LBOUND(A) TO UBOUND(A)
PRINT A(N) ,
NEXT

DIM değişken(indis1 TO indis2)


Boyut numaralarını kendimizin belirleyebilmesine olanak verir.

Örnek : DIM A(10 TO 20) yazdığımızda A nın ilk boyut numarası 10 son numarası 20 olacaktır.
Bun işlemden sonra A(5) = 40 ya da A(22) = 65 yazılacak olursa hata oluşacaktır (Subscript out of
range), çünkü bu durumda değişken dizi sınırları dışında işlem yapılmaya çalışılmış olacaktır.

REDIM ve ERASE
Diziler için bellekte ayırılan alanı genişletmek/azaltmak (dinamik kullanmak) veya silmek için kullanılır.

CLS
DIM A(15)
PRINT UBOUND(A) ’ekrana 15 yazar
REDIM A(30) ' Yeniden boyutlandı
PRINT UBOUND(A) ‘ekrana 30 yazar
ERASE A ' Bellekte kapladığı alanı boşalt, sil
PRINT UBOUND(A) ' HATA. Çünkü dizi bellekten atıldı

Prof. Dr. Levent ŞENYAY V -18 Bilgisayar Programlama


Örnekler :
20 elemanlı bir dizine girilen sayıların en büyük ve en küçüğünü ve bunların dizinde kaçıncı eleman
olduğunu bulan program

DIM A(20)
FOR I=1 TO 20
INPUT A(I)
NEXT I
ENB=A(1) : ENBIND=1
ENK=A(1) : ENKIND=1
FOR I=2 TO 20
IF A(I)>ENB THEN ENB=A(I) : ENBIND=I
IF A(I)<ENK THEN ENK=A(I) : ENKIND=I
NEXT I
PRINT “en büyük :” , ENB, “ve”, ENBIND, “inci eleman”
PRINT “en küçük :” , ENK, “ve”, ENKIND, “inci eleman”
1. Ekrandan 20 elemanlı bir dizine değer okut
a. Bu diznin 5. Elemanını yazdır
b. Bu dizini başka bir dizine kopyala
c. Dizinin max ve min elemanını bul
d. Bu dizini ters bir şekilde bir başka dizine kopyala
e. Bu dizindeki çift sayıları CIFT dizinine, tek sayıları TEK dizinine kopyala
f. Küçükten büyüğe sırala DIM A(5,7),S(5),K(7)
g. Büyükten küçüğe sırala FOR I=1 TO 5
2. Ekrandan 5 satır, 7 sütunlu bir tablonun tüm S(I)=0
elemanlarını klavyeden okutup, tüm satır ve sütun NEXT I
toplamlarını hesaplayan program. >>>>>>>>>> FOR I=1 TO 7
K(I)=0
NEXT I
FOR I=1 TO 5
3. 100 kişinin adı ve sınav notlarını iki ayrı değişene gir FOR J=1 TO 7
a. Listele INPUT A(I,J)
b. Adı AHMET olanın notunu göster S(I)=S(I)+A(I,J)
c. Adı AHMET ve notu>50 olanları göster K(J)=K(J)+A(I,J)
d. Adı AHMET ve notu 0 veya 100 olanları göster NEXT I
DIM A(5), B(5) NEXT I
FOR I=1 TO 5
READ A(I)
B(6-I)=A(I)
NEXT I
DATA 8,6,7,3,2
4. DIM M(5,5) 1 0 0 0 0
FOR I=1 TO 5 DO 2 1 0 0 0
FOR J=1 TO 5 TO 2 2 1 0 0
IF I=1 THEN M(I,J)=1 2 2 2 1 0
ELSE IF I>J THEN M(I,J)=2 2 2 2 2 1
ELSE M(I,J)=0
NEXT J
NEXT I

Prof. Dr. Levent ŞENYAY V -19 Bilgisayar Programlama


MATRİS İŞLEMLERİ

1. 5X5 bir matrise sayı gir


a. Köşegen üzerinde 5 den büyük eleman sayısını bul
b. Üst üçgen elemanların ortalamasını bul
c. Alt üçgende bulunan 20 den büyük eleman sayısını bul
d. Matrisin transpozesini (satırları sütun, sütunları satır) başka bir matrise koy

A(5,5),T(5,5)
FOR I=1 TO 5
FOR J=1 TO 5
INPUT A(I,J)
NEXT J
NEXT I
S=0
K=0
L=0
TOP=0
FOR I=1 TO 5
FOR J=1 TO 5
IF I=J AND A(I,J)>5 THN S=S+1 ‘a şıkkı
IF I<J THEN TOP=TOPP+A(I,J) : K=K+1 ‘b şıkkı
IF I>J THEN AND A(I,J)>20 THEN L=L+1 ‘c şıkkı
T(J,I)=A(I,J) ‘d şıkkı
NEXT J
NEXT I
ORT=TOP/K

veya
REM matrise sayı girişi
A(5,5)
FOR I=1 TO 5
FOR J=1 TO 5
INPUT A(I,J)
NEXT J
NEXT I
REM a şıkkı
S=0 : K=0 : L=0 : TOP=0
FOR I=1 TO 5
IF A(I,I)>5 THEN S=S+1
NEXT I
REM b şıkkı
FOR I=1 TO 5
FOR J=I TO 5
TOP=TOP+A(I,J) : K=K+1
NEXT J
NEXT I
ORT=TOP/K

Prof. Dr. Levent ŞENYAY V -20 Bilgisayar Programlama


REM c şıkkı
FOR I=1 TO 5
FOR J=1 TO I
IF (I,J)>20 THEN L=L+1
NEXT J
NEXT I
REM d şıkkı
FOR I=1 TO 5
FOR J=1 TO 5
T (J,I)=A(I,J)
NEXT J
NEXT I

Klavye aracığı ile sıra sıra girilen 3x4 boyutlu 2 matrisin toplamını yeni bir matrise aktaran program
M(3,4), N(3,4), K(3,4)
FOR I=1 TO 3
FOR J=1 TO 4
INPUT M(I,J), N(I,J)
K(I,J)=M(I,J)+N(I,J)
NEXT J
NEXT I

Prof. Dr. Levent ŞENYAY V -21 Bilgisayar Programlama


SORT- SIRALAMA ALGORİTMALARI (Unordered A, sorted B)
Klavyeden veriler girilecek ve Küçükten büyüğe sıralanacak (N için genelle)
OPTION BASE 1
DIM A(10),B(10)
FOR I=1 TO 10
INPUT A(I)
REPEAT
FOR I=1 TO 9
ENK=A(I)
FOR J=I+1 TO 10
IF ENK>A(J) THEN ENK=A(J) : K=J
NEXT J
B(I)=A(K) : A(K)=MAX
NEXT I

Küçükten büyüğe sıralama, tek array (vektör) kullanarak


DIM A(10) -------GENELLENİRSE------
FOR J=1 TO 9 FOR J=1 TO N-1
K=J+1
FOR I=K TO 10 FOR I=J+1 TO N
IF A(J)>A(I) THEN BOS=A(J) : A(J)=A(I) : A(I)=BOS
NEXT I
NEXT J

Büyükten küçüğe sıralama


A(10)
FOR I=1 TO 10
READ A(I)
REPEAT
FOR I=1 TO 9 DO
FOR J=I+1 TO 10 DO
IF A(I)>=A(J) THEN T=A(I) : A(I)=A(J) : A(J)=T ENDIF
REPEAT
REPEAT
FOR I=1 TO 10 DO
PRINT A(I)
REPEAT

LINEAR SEARCH ALGORITHM (for unordered data array)


Bir array içinde istenen bir veriyi bulmak için kullanılır. Umsorted array A, bulunmak istenen veri AA
DIM A(N)
FOR I=1 TO N
I=0
READ AA
GIT :
I=I+1
IF AA=A(I) THEN PRINT “item AA found in position”, I : GOTO DUR
ELSE IF I=N THEN PRINT “item”, AA , “not found”
ELSE GOTO GIT
DUR :
STOP

Prof. Dr. Levent ŞENYAY V -22 Bilgisayar Programlama


LINEAR SEARCH ALGORITHM (for ordered data array)
DIM A(N)
FOR I=1 TO N
READ A(I)
NEXT I
I=0
READ AA
GIT :
I=I+1
IF A(I)>AA THEN PRINT “item”, AA , “ not found” : STOP
ELSE IF A(I)=AA THEN PRINT “item”, AA , “found in position”, I
ELSE IF I=N THEN PRINT “item”, AA , “ not found”
ELSE GOTO GIT
STOP

BINARY SEARCH ALGORITHM


DIM A(N)
FOR I=1 TO N
READ A(I)
NEXT I
READ X
I=1
J=N
GIT :
M=INT((I+J)/2)
IF X=A(M) THEN PRINT “item found in position”, M : GOTO DUR
ELSE IF I=J THEN PRINT “item”, X , “not found” : GOTO DUR
ELSE IF X<A(M) THEN J=M-1 : GOTO GIT
ELSE I=M+1 : GOTO GIT
DUR :
STOP

EXCHANGE SORT ALGORITHM (yer değiştirme ile sıralama)

Orijinal seri 1 2 3 4 5 6 7
3 3 2 2 2 1 1 1
7 2 3 3 1 2 2 2
2 7 7 1 3 3 3 3
1 1 1 7 7 7 7 4
11 11 11 11 11 11 4 7
4 4 4 4 4 4 11 11

E H H E H H H
H E H H H
E H H H
H E H
E H

Prof. Dr. Levent ŞENYAY V -23 Bilgisayar Programlama


Subroutine (Function, Gosub)
Programlarımızdaki kodlar arttıkça veya programın işlevleri arttıkça bazı tekrar eden işlemler
gerekli olabilir. Ya da içinde birkaç şey değiştirerek aynı işlemler yapmak gerekir. Bunun için alt
programlar ve fonksiyonlar kullanılır.

Hazır Fonksiyonlar (Functions)

Aritmetik Fonksiyonlar String Fonksiyonlar I/O vd fonksiyonlar

ABS(X) absolute ASC(X$) ASCII karakter EOF(f)


ATN(X) arctangent CVI, CVS, CVD(X$) ERL error
CDBL(X) converts double precision INSTR LOC(f)
CINT(X) converts integer LEN(X$) LOF(f)
COS(X) cosinus x VAL(X$) LPOS(n)
CSNG(X) converts single precision
EXP(X) eX
FIX(X) truncates an integer
LOG(X) logx
RND(X) random number
SGN(X) sign
SIN(X) sinüs x
COS(X) cosinus x
SQR(X) square root
TAN(X) tangent x
ATAN arctangent

çıktı
FIX(12.1193) 12 (. Sonrasını yazar)
CINT(23.54) 24 (yuvarlar)
INT(1.2) 1 (tamsayı)
SGN(X)
5 1
-5.7 -1
0 0
ABS(-5.2) 5.2 (mutlak değer)
SQR(9) 3 (karekök)
EXP(6-4) (2.71828)2
LOG(5) log105
LN(5) lne5
SI
ATN(X/SQR(1-X**2) arcsin x
PI/2-ATN(X/SQR(1-X**2) arccos x

Prof. Dr. Levent ŞENYAY V -24 Bilgisayar Programlama


USER DEFINED FUNCTION

DEF fonkadı=(fonksiyon)
fonkadı=(argüman listesi) diğer versionların kullanımı

DEF FNY=4*X**2-5*X SUB subadi(parametreler) FUNCTION fadi(parametreler)


… ... …
X=1 END END FUNCTION
K=FNY(X)
PRINT K
DECLARE subadi(parametreler) DECLARE fadi(parametreler)
Veya

DEF FNA(X,Y)=X**2-SQR(Y) CALL subadi(parametreler)



Z=FNA(4,FNA(3,25))

FUNCTION

FUNCTION yapısı SUB lar gibidir. Yukarda açıklananlar bunda da geçerli. Function'un farkı
verilen değerler üzerinde işlem yapıp bir sonuç ile geri döndürmesi. Qbasic in kendi
yapısındaki birçok komutun Function özelliği vardır. Örneğin : X = SQRT(81) yazdığımızda
verilen 81 sayısı SQRT(karekök alma) fonksiyonu tarafından işlenir ve sonuç olarak 9 döner.
Bu sonuç X değişkenine atanır.

Programcı tarafından oluşturulan FUNCTION


X = karesi(15)
PRINT X
PRINT "20 nin karesi = "; karesi(20)
PRINT "1.4 ün karesi = "; karesi(1.4)
FUNCTION karesi (sayi AS DOUBLE)
DIM sonuc AS DOUBLE
sonuc = sayi * sayi
karesi = sonuc
END FUNCTION
Function da tek satır ile sonucu alınabilirdi. Anlaşılır olması bakımından uzun yazıldı. Kısaca:
FUNCTION karesi (sayi AS DOUBLE)
karesi = sayi * sayi
END FUNCTION

Örnek :
CLS
PRINT enbuyuksayi(15, 25)
FUNCTION enbuyuksayi (sayi1, sayi2)
IF sayi1 > sayi2 THEN enbuyuksayi = sayi1
ELSE enbuyuksayi = sayi2
END IF
END FUNCTION

Prof. Dr. Levent ŞENYAY V -25 Bilgisayar Programlama


örnek
DIM sayi(5)
CLS
sayi(0) = 20
sayi(1) = 30
sayi(2) = 66
say
i(3) = 88
sayi(4) = 36
sayi(5) = 23
x = ortalama(sayi())
PRINT x
FUNCTION ortalama (sayilar())
FOR n = LBOUND(sayilar) TO UBOUND(sayilar)
t = t + sayilar(n)
NEXT
ortalama = t / n
END FUNCTION

EXIT DEF

DEF FN fonksiyonundan programın çıkmasını sağlar

EXIT FUNCTION

Bir FUNCTION prosedüründen çıkmak için kullanılır, programın çalışmasının fonksiyonun çağırıldığı
satırın bir sonraki deyimden devam etmesini sağlar

GOSUB

GOSUB ile alt programlar oluşturur. GOSUB yerine SUB kullanmak yeterli olur. Gosub da goto gibi
programın işleyişi bırakıp başka bir noktadan başlaması sağlanır. Fakat farklı olarak RETURN
komutunu görünce kaldığı yere geri dönerek çalışmasına devam eder. Alt programa, istediğimiz
yerden istediğimiz kadar atlanabilir. GOSUB ve ardından bir etiket ya da satır numarası yazmak
gerekir. GOSUB ile atlanan yerde RETURN bulunmazsa geri dönüş olmaz.

CLS
GOSUB CIZGI
PRINT "MERHABA DÜNYA"
GOSUB CIZGI
PRINT "QUICK BASIC"
GOSUB CIZGI
PRINT "PROGRAMLAMA DİLİ"
GOSUB CIZGI
END
CIZGI:
PRINT "----------------"
RETURN

Prof. Dr. Levent ŞENYAY V -26 Bilgisayar Programlama


CLS
PRINT "çift sayılar(1-100)"
DO WHILE
A=A+1
IF (A MOD 2) = 0 THEN GOSUB CIFTSAYI
LOOP UNTIL A = 100
END
CIFTSAYI:
PRINT A;
RETURN

ON n GOSUB satır [,satır] …



RETURN

RETURN

0 < n < 255 tamsayı (değilse tamsayıya çevrilir)

GOSUB GIT1

… Main prog
GOSUB GIT2

STOP programın çalışmasını durduğu yer
GIT1 : Subroutine 1

RETURN

GIT2 :

… Subroutine 2

RETURN
END program yazımının sonlandığı yer

SUB
Alt Programları (subroutine) Fonksiyonlardan (function) ayıran tipik özellik, çağıran programa parametre
listesindeki değişkenler aracılığıyla birden çok sonuç değeri gönderebilmeleri ve bağımsız bir komut ile
çalıştırılmalarıdır.

SUB altprogram_ismi (varsa parametreleri) [STATIC]


..
..
[EXIT SUB] ' alt programdan çıkılmak istenirse
..
..

END SUB ‘alt programın sonu


Prof. Dr. Levent ŞENYAY V -27 Bilgisayar Programlama
Parametre kullanımı:
Alt programımız çalışırken ona bazı değerler gönderip farklı şekillerde çalışmasını sağlanabilir. Bazı
SUB da (az önce verilen gibi) parametre olmayabilir. Parametre veri değişken tipinin ne olacağını
belirtmekte fayda var. Belirtilmezse SINGLE olarak kabul edilir.

örnekler:
SUB ekranayaz (satir AS INTEGER, sutun AS INTEGER)
veya
SUB ekranayaz (satir%, sutun%)

Örnek program:
CLS
cizgi$ = STRING$(60, "-")
yaziortala 1, cizgi$
yaziortala 2, "Merhaba"
yaziortala 3, "Bugün Qbasic de Goto, GoSub, Sub ve Function'u öğrendim"

'farklı bir kullanım: CALL ile alt programı çağırma


CALL yaziortala(5, "Qbasic Öğrenmek çok zevkli")
yaziortala 6, cizgi$
SUB yaziortala (satir AS INTEGER, yazi AS STRING)
uzunluk% = LEN(yazi)
LOCATE satir, (80 - uzunluk%) / 2
PRINT yazi
END SUB
PROBLEM:
1. Yukarıdaki programı alt program kullanmadan yapmaya çalışın.
2. Alt program kullanarak sağa yaslı yazı yardırmayı deneyin
yazisagayasla 4 , "Merhaba"
gibi

STATIC, SHARED, COMMON


STATIC:
Bazen tanımladığımız değişkenin değerini kaybetmeden SUB ve FUNCTION içinde de
kullanmak gerekli olabilir. Alt program içinde değişkeni STATIC ile tanımlarsak değişken
değerini kaybetmez aklında tutar. Yoksa her FUNCTION ve SUB başlangıcında tanımlanan
değişkenlerin değerleri sıfırlanır.
Örnek:
CLS
yaziortala "merhaba"
yaziortala "Qbasicde Function ve Sub Kullanmak kodlamayı kolaylaştırıyor"
yaziortala "Öğrenmem gereken daha çok şey var sanırım."
SUB yaziortala (yazi AS STRING)
STATIC satir AS INTEGER
satir = satir + 1
LOCATE satir, (80 - LEN(yazi)) / 2
PRINT yazi
END SUB
Burada dikkat ederseniz SUB a satır numarasını göndermedik 0 dan başladı her SUB
başlamasında 1 arttı ve yazılar alt alta ortalı olarak yazıldı. STATIC i DIM ile değiştirin farkı

Prof. Dr. Levent ŞENYAY V -28 Bilgisayar Programlama


göreceksiniz.
SHARED:
Bazen de bir değişkenin değerini kaybetmeden tüm SUB ve FUNCTION içinde geçerli olması
istenebilir. Buna değişkeni global (genel, her yerde geçerli) tanımlama diyoruz. Alt program
içinde yapılan değişken tanımlamaları Local tanımlama(yerel, sadece alt program içinde
geçerli)diyoruz. Global tanımlamayı Ana program içinde yapmalıyız
DIM SHARED satir AS INTEGER
CLS
satir = 2
LOCATE satir: PRINT "Merhaba"
yaziortala "Qbasic öğreniyorum"
satir = satir + 1
LOCATE satir: PRINT "Çalışan başarır"
yaziortala "İstiyorsan başarırsın"
SUB yaziortala (yazi AS STRING)
satir = satir + 1
LOCATE satir, (80 - LEN(yazi)) / 2
PRINT yazi
END SUB
'basit bir örnek daha
DIM SHARED a
CLS
a=5
PRINT a
CALL karesi
PRINT a
PRINT ussu(3)
PRINT a
PRINT ussu(4)
SUB karesi
a=a*a
END SUB
FUNCTION ussu (kuvvet%)
a = a ^ kuvvet%
ussu = a
END FUNCTION

COMMON:
Common, shared gibidir ama daha genel bir tanımlama yapılır. Qbasic ile CHAIN komutuyla
başka bir bas dosyaya bağlantı kurabiliriz. Değişken Common ile tanımlama yapılırsa değeri
bağlantı kurulan bas dosyada da geçerli olur. Zaten başlangıçta tek bas dosya üzerinde
çalışacağınızdan bu gerekli olmayacak.

Prof. Dr. Levent ŞENYAY V -29 Bilgisayar Programlama

You might also like