AMOS

Amos Basic'te de diğer dillerin çoğunda olduğu gibi bir duruma koşullu olarak yaklaşmak ve koşulun sonucuna göre değişiklik yapmak veya dallanma yapmak gerekir. Zaten bu da programlamanın temeli sayılabilir. Basic benzeri ileri diller, durumları mantıksal olarak test ederler. Test etme olayını, [IF...THEN] formatındaki komut üstlenir.

[IF...THEN...ELSE] Komut, birçok dilde kullanılır. Amaç aynıdır fakat format değişebilir. Durumları test etmeye yarar. Testin sonucu doğru ise, THEN'den sonra gelen işlevi, yanlış ise ELSE'den sonra gelen işlevi yapar. ELSE'i kullanmak her zaman gerekli değildir.

1=10 
FOR 1=1 TO 30 
INC A 
IF A=20 THEN PRINT "ANIN DEĞE- 
Rİ 20"

NEXT I Program çalışıp A değişkeni 20 değerini aldığında, [PRINT] komutu devreye girecek ve kendisinden sonra gelen yazıyı ekrana çıkaracaktır. Bu programda, [IF] komutu ile A değişkenini test ediyoruz. Eğer A 20 değerini almışsa, THEN'den sonra gelen işlem yapılır ve ekrana "A'NIN DEĞERİ 20" yazılır. Bu örnekte [IF] komutuna ELSE eklersek ve test sonunda durum yanlışsa ELSE'den sonra gelen işlem'e geçilir.

[IF....ELSE....END IF] Bu, değişik bir formda bir [IF] komutudur. [IF] komutu bu formda kullanıldığında, durum test edildikten sonra yapılacak işlem birden fazla olabilir. Yukarıdaki formda, testten sonra sadece bir işlem yapılabilir. Fakat bu formda istendiği kadar işlem yapılabilir, ELSE kullanma zorunluluğu yoktur.

IFA=B 
PRINT "EŞİTTİR" 
INPUT "SAYI GİRİNİZ";C 
ENDIF 
Bu programda, durum koşulu doğru ise, 
yani A değeri B'ye eşitse IF ile END IF 
arasındaki işlemler yapılır.
INPUT "İKİ TANE SAYI GİRİNİZ"- 
;A,B
IFA<B 
PRINT "B, ADAN BÜYÜK" 
ELSE 
IFA>B

PRINT "A B'DEN BÜYÜK" ELSE IFA=B PRINT "A EŞİTTİR B'ye" ENDIF ENDIF ENDIF Bu örnekte, iki sayıyı karşılaştırma işlemi yapılmaktadır. Görüldüğü gibi her [IF] komutuna karşılık bir [END IF] gelmiştir. Eğer ilgili komutları kapatılmazsa hata verir.

Yazımızın bu bölümünde size, Amos Basic dilinin döngü ve dallanma ile ilgili komutlarını anlatmaya çalışacağız. İlk olarak döngü nedir, ne işe yarar sorularının cevabını arayalım. Döngü, bir işlemi birden fazla kez tekrarlamak demektir. Amos Basic ve diğer çoğu dilde en çok kullanılan [FOR...NEXT] döngüsüdür. Bu komutla, programın bir bölümünün kaç kere tekrarlanacağı belirtilebilir. Bu da kullanıcı açısından gerçekten büyük bir kolaylık. Programlar yapmaya başladığınızda, bu komutun ne kadar çok kullanıldığını fark edeceksiniz.

[FOR...NEXT] [FOR (değişken)=(sabit1) TO (sabit2) STEP (sabit3)] olarak kullanılır. Bu formattan sonra, tekrarlanacak program ve programın sonunda da [NEXT (değişken)] komutu olmalıdır. Bilgisayar, FOR döngüsüne ait [NEXT] komutunu görene kadar aradaki işlemi yapar. [NEXT] komutu ile, değişken sabit3 ile toplanarak arttırılır veya azaltılır. Yani [değişken = değişken + sabit3] olur. FOR döngüsünde başlangıç sabiti ve bitiş de sabit2'dir. Değişkenin değeri sabiti ile başlar ve sabit2 olana kadar devam eder. Eğer FOR döngüsüne STEP koymazsanız, değişken doğrudan bir arttırılarak işlemi yapmaya devam eder.

FOR I=1 TO 20 PRINT I+"."+"DÖNGÜ" NEXT I Bu programı çalıştırdığınızda, ekrana 1'den 20'ye kadar DÖNGÜ yazılacaktır. İki veya daha çok FOR döngüsü iç içe kullanılabilir. Fakat her FOR için kendine ait bir [NEXT] komutu olmalıdır. Zaten [NEXT] komutunu unutursanız, system sizi uyaracaktır.

FOR 1=0 TO 20 STEP 2 
FOR J=40 TO 50 
……………. 
NEXTI 
NEXTJ 
Örnekte iki tane FOR döngüsü karşılı- 
ğında, iki [NEXT]komutu kullanılmıştır, 
ilk [FOR] komutunda kullanılan STEP, I 
değişkeninin 0 dan 20'ye kadar her dön- 
güde iki sayı arttırılacağını belirtir: 0, 2,4, 
6, 8 .... gibi. 1=20 olduğunda, program 
FOR döngüsünden kurtulacaktır.

[WHILE...WEND] Diğer bir döngü komutu da, [WHILE...WEND]'dir. Bu komut, değişkenin durumuna göre döngü yaratır. Normalde kullanımı çok kolaydır, fakat genelde bu komutun kullanımında zorluk çekilir. [WHILE (durum) ....WEND] olarak kullanılır. WHILE'dan sonra gelen durum koşulu doğru olduğu sürece, program bu döngüde kalır. Doğru değilse, döngüden çıkar.

INPUT "BİR SAYI GİRİNİZ";X PRINT "11'E KADAR SAYIM" WHILEX<11 INCX PRINT X WEND PRINT "BİTİŞ" Programda durum X< 11'dir. Yani X değişkeni 11'den küçük olduğu sürece [WHILE...WEND] arasındaki program tekrarlanır.

[REPEAT...UNTIL] [REPEAT...UNTIL], durum belirtilerek yapılan döngü komutudur. Kullanımı diğerlerinden farklıdır. Durum koşulu, programın sonuna yerleştirilen UNTIL'den sonra verilir. REPEAT başta kullanılır. Koşul olumsuz olana kadar döngü yapılır.

1=10 
REPEÂT 
PRINT "DÖNGÜ" 
İNCİ 
UNTIL 1=20 
programında, ekrana 10 tane DÖNGÜ ya-

yazısı çıkacaktır.

[DO...LOOP] Bu komutta döngünün sayısı belirtilmez ve döngüden çıkış yalnızca [EXIT] ve [EXIT IF..] komutları ile yapılır. Döngüden çıkış yapılmazsa, sonsuza kadar devam edebilir. Kullanımı çok kolaydır. Döngü yapılacak programın başına [DO], sonuna da [LOOP] yazıılarak döngü işlemi yapılır. DO

PRINT "MERHABA" LOOP programı, siz durdurana kadar çalışacaktır.

[EXIT] Bu komut ile [DO...LOOP] döngüsünden çıkış yapılır. Eğer iki tane veya daha fazla [DO...LOOP] kullanılırsa, kaç tanesinden çıkacağı komuttan sonra gelen sayı ile belirtilir.

DO 
DO 
PRINT "İÇ DÖNGÜ" 
IF MOUSE KEY=1 THEN EXIT 
IF MOUSE KEY=2 THEN EXIT 2 
LOOP 
PRINT "DIŞ DÖNGÜ" 
LOOP 
Bu programda ilk exit ile ilk [DO ... 
LOOP]'tan çıkılır. Fakat diğer LOOP dev- 
reye gireceği için bu döngüye bir daha gi- 
rilir, ikinci döngüden de çıkmak isteniyor- 
sa, [EXIT 2]yazılmalıdır. Bu programdan 
çıkış, mouse'un sağ düğmesine basılarak 
gerçekleşir.

[EXIT] ile, [FOR...NEXT], [WHILE...WEND] ve [REPEAT...UNTIL] komutlarının döngülerinden de çıkış yapılabilir.

[EXIT IF...] Bu komut, verilen koşula uygunluk durumunda döngüden çıkışı sağlar. [EXIT IF (durum), (sabit)] olarak kullanılır. [IF .... THEN EXIT] ile aynıdır; fakat kullanıcıya kolaylık olsun diye, bu komut da eklenmiştir. Sabit kaç tane döngüden çıkılacağını belirtir.

M=0 DO M=M+2 FOR I=1 TO 20 EXIT IF M=18,2 NEXT LOOP Programda M değişkeni 18 olduğunda, sistem iki döngüden kurtulacak ve programdan çıkacaktır.

[EDIT] Bu komut tek başına kullanılır ve çalışan programı durdurup editör ekranına geçişi sağlar. Programlarınızın sonuna bu komutu koyduğunuzda, doğrudan editör ekranına geçebilirsiniz.

[DIRECT] Tek başına kullanılır ve çalışan programı durdurup direct moda geçişi sağlar.

SATIR ETİKETLERİ:

Şimdi de gelelim satır numaralama ve etiketleme işlemine. Satır etiketine LABEL diyeceğiz, çünkü diğer tüm bilgisayar açıklamalarında etiketin ismi İngilizce olarak geçer. Basic dilinin ilk versiyonlarında her satırın başına o satırı temsil eden numaralar koymak gerekliydi. Satır numaraları, program satır sırası ile GOTO ve GOSUB komutları kullanılarak dallanma yapılacak program bölümünü belirtir. Amos Basic'te ise, bu satır numaraları yerine gidilecek program bölümünün başına o bölümü belirtecek LABEL'ı koyarız.

LABEL Etiketlenecek satırın başına konulur ve istenilen karakter serisinden oluşur. Karakter serisinden sonra ':' işaretini koyarak bu karakter serisinin bir LABEL olduğunu belirtiriz. Eğer bu işaret konulmazsa, Amos Basic o satırda hata olduğunu belirtecektir. Örnek olarak;

OSMAN:PRINT "Çok kolay" satırı verilebilir. Tabii ki bu etiketleme olayının ne işe yaradığını merak ediyorsunuz. Bunu öğrenmenin tek yolu, çokça kullanacağımız [GOTO] ve [GOSUB] komutlarını anlamaktır.

[GOTO] [GOTO (label)] olarak kullanılır. Program çalışırken [GOTO] komutunu gördüğünde, doğrudan komutu takip eden label'a atlar ve label'ın başladığı yerden devam eder. Bu komut her başımız belaya girdiğinde başvurduğumuz bir dost gibidir. Örnek verecek olursak;

KILROY:PRINT "MERHABA" GOTO KILROY Şimdi, bu programın çalışmasını inceleyelim. İlk çalıştırıldığında bilgisayar KILROY adı altında etiketlenmiş bir satır görür ve bu satırı çalıştırır. Sonra ikinci satıra geçer, burada GOTO komutunu görür ve komuttan sonra gelen label'a yani KILROY satırına atlar. Bu böyle devam eder gider, program sonsuza kadar MERHABA karakter serisini ekrana yazar. Programdan çıkmak istiyorsanız, [Ctrl+C] tuşlarına birlikte basarak çıkabilirsiniz. Bundan sonra iki kere [Esc] tuşuna basarak editör ekranına dönebilirsiniz.

[GOSUB] [GOSUB (label)] olarak kullanılır.

[GOTO] komutuna benzer; fakat çok daha farklı olarak çalışır. Bilgisayar [GOSUB] komutunu gördüğünde, komutu izleyen label'a dallanır ve [RETURN] komutunu görene kadar programın bu satırlarında çalışmaya devam eder. [RETURN] komutunu gördüğünde [GOSUB] satırının bir altındaki satırdan itibaren işlevine devam eder.

GOSUB ALI END ALI:PRINT "MERHABA" RETURN Program çalıştırıldığında, ilk satırda ALI etiketi altındaki satıra atlar. Burada MERHABA ekrana yazılır. Sonra program [RETURN] komutunu görür ve [GOSUB] komutunun bir altına döner. Burada [END] komutunu görür. [END], yalnız başına kullanılır ve programın o satırda bittiğini belirtir.

[GOSUB] komutu ile kullanılan başka bir komut da [POP]'dur. Normal koşullar altında GOSUB-RETURN döngüsünden çıkılamaz. Çünkü program GOSUB komutunun işlevinden sonra RETURN'ü arar. Zaten programın sonunda RETURN'ü bulamazsa hata verir. Bu döngüden çıkmanın tek yolu, yani RETURN'ü devreden çıkartmak için [POP] komutu kullanılır.

A=0 
MELTEM :GOSUB ALI 
GOTO MELTEM 
ALI:PRINT "HELLO" 
A=A+1 
IF A=8 THEN POP:GOTO BİTİŞ 
RETURN 
BİTİS:END 
Bu programda POP kullanılmasaydı, 
program sonunda Amos Basic size hata 
verecekti.

Diğer bir dallanma komutu da, [ON...GOTO]'dur. [ON (değişken) GOTO (label 1, label2, label3....)] olarak kullanılır. Komut, değişkenin değerine karşı gelen label'a atlar. Karışık gibi görünse de, çok kullanışlı bir komuttur. Komutta değişken değer 1 ise label1'e, 2 ise

label2'ye, 3 ise label3'e .... atlar.

PRINT "1-GELİŞ" 
PRINT "2-GİDİŞ" 
BURArINPUT "SECİMİNİZ";a 
ON a GOTO JUMP,SERDAR 
PRINT "KUSURA BAKMAYIN SA- 
DECE IKI SEÇENEK"

GOTO BURA JUMP:PRINT "1'i seçtiniz" END SERDAR:PRINT "2'yi seçtiniz" END Bu programda input komutuna 1 sayısı ile cevap verirseniz, program JUMP label'ına dallanır, eğer cevabınız 2 ise, program SERDAR label'ına dallanır. Seçiminiz bunlardan biri değilse, program sizi uyarır ve yeniden giriş yapmanızı ister.

[ON...GOSUB] [ON...GOSUB] komutunun kullanımı, [ON...GOTO] komutu ile aynıdır. [ON (değişken) GOSUB (label1, label2, label3...)] olarak kullanılır. İşlevi değişkenin değerine karşılık gelen label'a atlamaktır.

Diğer bir dallanma komutu da [EVERY..GOSUB]'tır. [EVERY (sabit) GOSUB (label)] olarak kullanılır. Buradaki sabitin değerine göre label'a atlar. Verilen sabit, bir saniyenin ellide biri süre içinde dallanılan program bölümünün uzunluğunu belirtir. Buradaki en önemli nokta, GOSUB işlemi ile dallanılan alt program bu periyod zamanından az sürmelidir; yoksa hata mesajı verir. Bu komut kullanıldıktan sonra sistem otomatik olarak kapanır, bu nedenle devamı akıcı olarak sağlayabilmek için EVERY ON komutu ile beraber kullanılmalıdır.

örneğin; 
EVERY 50 GOSUB ALIŞTIRMA 
DO 
PRINT "ANA PROGRAM" 
LOOP 
ALIŞTIRMA: 
INC X:PRINT "ATLAMA SIRASI";X 
EVERY ON :RETURN

Not:EVERY ON komutu Amiga Basic'teki ON TIMER komutuna benzer. [EVERY ON/OFF]

[EVERY ON], sistemin [EVERY] komutu ile kullandığı interrupt'ı (kesintiyi) yeniden başlatır. Bu komut, dallanmadan sonra işleme geri dönmeden konmalıdır. Böylece olayın akıcılığını sağlamış oluruz.

[EVERY OFF] komutu ile dallanma olanağı tamamen kapatılır. Bu komut sistemin interrupt'ını kapatır.

[PROCEDURE] Eğer büyük programlar yazmaya kalkarsanız, Amos Basic size programın karışmaması ve anlaşılır olması için birçok komut sağlamıştır. Bunlardan en çok kullanılanı [PROCEDURE]'dur. Büyük programlar iç içe birçok küçük programların birleşmesinden oluşur. Bu küçük programları ayrı ayrı adlar altında toparlamazsanız, daha sonra siz bile işin içinden çıkamazsınız. İşte [PROCEDURE] küçük programları bir başlık altında toplama ve istenilen yerde doğrudan kullanma olanağı sağlar. [PROCEDURE İSİM (değişkenler)] olarak kullanılır. PROCEDURE OSMAN [a$] gibi. Bu komutla, program içinde yeni komutlar yaratılabilir.

PROCEDURE YAZ[a$] PRINT a$ END PROC Bu PROCEDURE çağrıldığında, a$ değişkenini ekrana yazacaktır. PROCEDURE'u çağırmak için sadece adını ve eğer varsa değişkeninin değerini yazmak yeterlidir. Yukarıdaki PROCEDURE'u çağırmak için [YAZ "OSMAN"] yazmamız yeterli olacaktır ve ekrana OSMAN yazısı çıkacaktır. PROCEDURE'u [GOSUB] komutunun yaptığı işleve benzetebiliriz. Fakat ikisi hiçbir zaman aynı değildir. Bir PROCEDURE'un bittiğini belirtmek için, komutların sonuna [END PROC] komutu konularak ana programa dönüş sağlanır.

PROCEDURE'ler, alt program olduklarından değişken tanımlamalarında çoğu zaman hata yapılmaktadır. Bunun için ilk önce değişkenleri iyice tanımamız gerekir.

YEREL VE GENEL

DEĞİŞKENLER Bir PROCEDURE'de kullanılan değişkenler, ana programda kullanılan değişkenlerden ayrıdır ve aralarında bağ yoktur. PROCEDURE'lerde kullanılan değişkenlere yerel değişkenler denir.

A=1333:B=13 
TEST 
PRINT A,B 
PROCEDURE TEST 
PRINT A,B 
END PROC 
programı çalıştırıldığında, bu iki değişke- 
nin   PROCEDURE'ın   içinde   ayrı,   ana 
programda ayrı olduğunu göreceksiniz.

PROCEDURE'lerin dışındaki ana program değişkenlerine genel değişken denir. PROCEDURE'un dışında kullanılan değişkenler, içerisinden çağrılamaz.

FOR KAPI=1 TO 20 ANAHTAR NEXT KAPI END PROCEDURE ANAHTAR IF KAPI=10 THEN PRINT "BURASI" END PROC programında, PROCEDURE'un içindeki BURASI yazısı hiçbir zaman çıkmayacaktır. Normalde çoğu insan KAPI değişkeninin PROCEDURE içinde değişmediğini düşünür. Fakat PROCEDURE içindeki KAPI değişkeninin bu işlemler sırasında değeri 0'dır. Sadece ana programda 1'den 20'ye kadar değişmektedir.

[SHARED] Bu komut, PROCEDURE içinde kullanılır. Kullanımı [SHARED (değişken listesi)] şeklindedir. Bu komut içinde virgüller ile ayrılarak sıralanan değişkenler, genel değişkenler olarak değerlendirilir, böylece procedure içerisinde kullanılan değişkenleri ana program içerisinde kullanma olanağına sahip oluruz. Ya da ana program içerisindeki değişkenleri procedure'ler içerisinde kullanabilme imkanı sağlar.

Örneğin; X=387085:Y=1990 DENEME PRINT X,Y PROCEDURE DENEME SHARED X,Y X=X+Y:Y=Y+1000 END PROC Bu test programında x ve y değişkenlerini SHARED ile tanımlamak suretiyle procedure içerisinde işleme tabi tutabiliyoruz. Procedure dışarısında tanımlanan x ve y değerleri, procedure içerisinde SHARED komutu vasıtasıyla tekrar okutulup üzerlerine yeni değerler yazılıyor.

[GLOBAL] Büyük bir program yazarken birçok değişkeni PROCEDURE'lerin içinde kullanmak isteyebilir ya da zorunda kalabilirsiniz. Her PROCEDURE'de ayrı ayrı [SHARED] komutunu kullanmak hem zor olur, hem de zaman bakımından çok sıkıntı çekersiniz. Bunun kolay yolu, PROCEDURE içinde kullanılacak değişkenlerin [GLOBAL] komutu ile ana programın başında belirtilmesidir. [GLOBAL], gerçekten çok yararlı bir komuttur. Şimdi olmasa bile, ileride oldukça çok kullanacaksınız.

Komutun formatı, [GLOBAL (değişken listesi)] şeklindedir. Değişken listesindeki değişkenler genellenir ve hem ana programda hem de PROCEDURE'ın içinde kullanılabilirler.

A=1000:B=42 
GLOBAL A,B 
TEST 
PROCEDURE TEST 
A=A+B:B=B+10 
PRINTA,B 
END PROC 
Bu programda, A ve B değişkeni genel- 
leştirilerek PROCEDURE içinde kullanıl- 
mıştır. Böylece sonuç ana programdaki A 
ile B nin değerlerine bağlıdır. [GLOBAL] 
komutu kullanılmasaydı, sonuç 0 olacaktı.

[ON...PROC] [ON...PROC] komutunun kullanımı, [ON...GOSUB] ile aynıdır. [ON (değişken) PROC (proc1,proc2,proc3...)] olarak kullanılır. Değişkenin değerine karşılık gelen PROCEDURE'ü çalıştırır.

[POP PROC] [POP PROC] komutunun işlevi, [END PROC]'a gelmeden PROCEDURE'den çıkışı sağlar. Normalde PROCEDURE çağrıldığında, bilgisayar [END PROC]'u görmelidir, zira görmeden asıl programa dönmez. Eğer [END PROC] konulmamışsa, Amos Basic sizi PROCEDURE'ü kapatmadığınızı sanarak ikaz eder. Kısacası [POP PROC], [END PROC]'u devreden çıkarır ve PROCEDURE'dan daha erken çıkış olayını sağlar.

GENELLEME 
END 
PROCEDURE GENELLEME 
FOR I=1 TO 20 
IFI=10 THEN POP PROC 
NEXT I 
PRINT "BU TEXT HİÇ ÇIKMAYA- 
CAK"

END PROC Programda, [PRINT] komutu hiç devreye giremeyecektir. Çünkü 10'a kadar saymadan sonra [POP PROC] ile PROCEDURE'dan çıkılacaktır.

[EVERY...PROC] Bu komut, çok güçlü bir interrupt sistemi sayesinde sabit müddetle istenilen procedure'yi çalıştırır. Yazılımı [EVERY (sabit) PROC (isim)] şeklindedir. Buradaki sabit, bir üstteki komut ile aynı işlevi görmektedir. Önceki komut ile aynı anda EVERY ON komutu da kullanılmalıdır; yoksa rutin sadece bir kere kullanılır. Bu nedenle ana programa END PROC ile dönülmeden önce EVERY ON komutu kullanılmalıdır. Örneğin;

EVERY 50 PROC ALIŞTIRMA 
DO 
PRINT "ANA PROGRAM" 
LOOP 
PROCEDURE ALIŞTIRMA 
SHARED X 
INC X:PRINT "ATLAMA SIRASI";X 
EVERY ON 
END PROC

programında, ana menü döngüsü içerisinde belirli süreler içerisinde procedure'e atlar ve bu atlamaları sayar.

[BREAK ON/OFF] Normal koşullarda, programın herhangi bir yerinde [Ctrl+C] tuşları ile programdan çıkıp editöre dönülebilir. Fakat [BREAK OFF] komutu ile bu işlem iptal edilir ve çıkış için programın sonunu beklemek gerekir. Eğer döngü sonsuza kadarsa, o zaman bilgisayarı kapatmanız gerekecektir. [BREAK ON] ile, program kırılabilir hale getirilir. Bu komut programınızı başkalarının incelemesine izin vermemek için konulmuştur. Kısacası bir koruma şeklidir.

[MOUSE KEY] Yukarıda bir örnekte kullandığımız bu değişken, Amos Basic'in özel değişkenlerindendir ve mouse düğmesinin durumunu verir. Değer 1 ise sol, değer 2 ise sağ mouse düğmesine basılmış demektir. Amiga özel mouse'lar kullanabilmektedir. Bunlardan biri de 3 düğmelidir. Amos Basic, bu 3. düğmeyi de tanır. Eğer MOUSE KEY değişkeninin değeri 3 ise, 3. düğmeye basılmış demektir.

FORI=lTO 10000 
IF MOUSE KEY=1 THEN PRINT 
"SOL BUTTONA BASTINIZ"
IF MOUSE KEY=2 THEN PRINT"- 
SAĞ BUTTONA BASTINIZ"

NEXTI programı, mouse'un hangi düğmesine basıldığını ekrana yazar.

Bu aylık bu kadar, gelecek aya kadar hoşça kalın.