AMIGA&PASCAL
Retro bilgisayarPascal'da bir program, kabaca iki bölümden oluşur: Tanımların yapıldığı bir başlangıç ve programın bulunduğu bloklar. Sırayla giderek ilk önce tanım kısmına bakalım. Tanımdan kastımız, programda kullanılacak olan değişkenlerin (variable), sabitlerin (Constant) ve adres etiketlerinin (Label) belirlenmesidir. Daha önce sadece Basic veya Assembler kullanmış olanlar için bu tanımlar biraz yabancı gelecektir. Ancak tanımlar sayesinde derleyici (Compiler), hangi değerin hafızada ne kadar yer kaplayacağını bilir. Bloklar ise programın kendisinin yer aldığı başı ve sonu belirlenmiş ufak yapı taşlarıdır.
Pascal yazım kurallarında her program satırının sonuna bir noktalı virgül konulmak zorundadır. Sadece özel semboller noktalı virgülsüz kullanılabilir (Bu noktalı virgül hikayesi alışana kadar sizi epey uğraştıracak.). Madem sembollerden bahsettik işte size Kick Pascal'ın tam sembol listesi (Anlamlarına zamanı geldikçe değinmek üzere): AND ARRAY BEGIN CASE CONST DIV DO ELSE DOWNTO END FILE FOR FUNCTION GOTO IF IN LABEL MOD NIL NOT PROCEDURE OF OR SET PROGRAM SET TO TYPE PACKED VAR WITH XOR RECORD REPEAT UNTIL WHILE
Bu sembolleri tamamlayan ve standart ayrılan bazı semboller ise Directive adı ile anılır:
ABSOLUTE EXPORT EXTERNAL FORWARD FROM IMPLEMENTATION IMPORT INTERFACE LIBRARY MODULE OTHERWISE STATIC STRING UNIT USES Pascal'in özel sembolleri de şunlar: ()* + ,-.../::=; < <= <> = > >= [ ] ^ Evet, olayı fazla derinleştirmeden ve dallandırmadan tanım kısmını tanıyalım. Önce bir örnek:
program Benim ilk program;
const
son = 17;
type
ttip = integer;
var
v: ttip;
a: integer;
label bahane; Evet, program sembolünü takiben
F.Kağan Gürkaynak programımızın ismini yazıyoruz. Standart. Pascal'da kullanılmasına rağmen, tümüyle gereksiz ve kullanılmayan bir satır. Derleyici program ile noktalı virgül arasındaki her şeyi ihmal eder (Kick Pascal kullananlar bu satırı kullanmasalar da olur). Daha sonra const sembolü geliyor, (burada noktalı virgül olmamasına dikkat edelim) programda kullanılacak olan sabitleri burada tanımlıyoruz. Sabit tanımlamak için sabitin ismi = sabitin değeri kullanılıyor. Hemen sorulması gereken, isim verirken nelere dikkat edilmesi gerektiği: İsimler harf veya _ ile başlamalı ve istenen harf/rakam kombinezonu ile devam edebilir. Pascal normalde büyük/küçük harf ayırımı yapmaz ve ilk 32 karakteri anlamlıdır. Verilecek isimlerin Pascal'ın sembollerinden olmaması gerekiyor (Const diye bir isim veremiyoruz). Sabitin değeri, tam ve reel sayılar olabildiği gibi belirli kurallar çerçevesinde işlemlerin sonucu da olabilirler (Reel sayılarda sadece + ve - kullanılabilir).
Const r= 65.04364 + 43.443 k= 80 * 25; Type, oldukça kullanışlı ve yararlı bir tanım bölümü. Değişkenlerin belirli tipleri vardır. Tamsayı bir değişken Integer, reel bir değişken Real tipindedir denir. Type kısmında kendinize yeni tipler tanımlayabilirsiniz. İlk verdiğimiz örnekte tip ismini Integer yerine kullanabilirsiniz (Yazımızın üçüncü bölümünde tüm tipleri ve tanımları tanıtacağım, şimdilik sabır.).
Var, değişkenlerin isimlerinin belirlendiği yerdir. Diğer iki bölümden farklı olarak burada değişken ismi : değişken tipi yazımı kullanılır. Aynı tipten değişkenleri birbirlerinden virgülle ayırmak mümkün. Burada standart tiplerin yanısıra Type bölümünde tanımladığınız tiplerden değişkenler de yaratabilirsiniz. Programda bir değişken kullanabilmenin tek şartı, burada tanımlanmış olmasıdır. Değişken isimleri, sabit isimleri ile aynı kurallara uyar.
Var a,b,c : Integer; Son bölüm olan Label'da tanımlayacağınız isimlerle program içinde atlama yapabileceksiniz. Pascal programlarında son derece az gereken label'ları tanımlamışsanız, mutlaka kullanmanız gerekecektir. İsimlendirmede yine aynı kurallar geçerli.
label BURASI,ORASI;
BURASI:
ORASI:
Bu tanım kısmının sırası tümüyle keyfidir. Bazı kısımları kullanmasanız veya birden fazla kullansanız olur (Kick ve
ADIM ADIM PASCAL ......
1.0 Pascal ve Amiga versiyonları, Pascal ile neler yapılabilir. 2.0 Pascal'in genel yapısı: Tanımlar, bloklar, Procedure ve fonksiyonlar. 3.0 Pascal dili özellikleri, tip tanımları, unitler. 4.0 Amiga ile iletişim :Library kullanımı, Amiga'ya has komutlar. 5.0 Gelişmiş programcılık: teknikler, başka sistemlere veya sistemlerden aktarmalar.
Turbo Pascal için). Program yazarken düzen tümüyle keyfidir. İlk örneği şu şekilde yazarak da aynı sonucu elde edersiniz:
program Benim ilk program;const
son=17;
type ttip=integer;var v:ttip;a:inte-
ger;label bahane;
Artık sizin keyfiniz bilir. Tanımlardan sonra sırayı bloklar alır. Bir blok BEGIN ile başlar ve END ile biter. Program satırları bu ikisinin arasında yer alır. Gerektiği veya istenildiği kadar ikili kullanılabilir. Ancak bir programda mutlaka bir adet Begin End ikilisi vardır. Eğer End'den sonra programın başka satırları varsa (Yani o ikili bir başkasının içinde ise) End'in sonuna noktalı virgül getirilir. Eğer son End'de iseniz, sadece nokta koyarsınız.
Type
…
Const … Begin … Begin …. End; …. Begin … End; End. Pascal'da program yazmayı zevkli hale getiren olayların başında, Fonksiyon ve Procedure'ler geliyor. Bir program yazarken, program içinde belirli görevleri yapacak olan minik program parçalarını procedure ve fonksiyon olarak tanımlar daha sonra bir emir gibi kullanırsınız. Diyelim programınızda bazen ekran silinecek, bir çerçeve çizilecek ve içine isminiz yazılacak. Bu işi yapmak için oturup ismi (mesela) logo olan bir procedure yazıyorsunuz. Programınızda ne zaman isminizi belirtilen şekilde yazmanız gerekse programınıza logo satırını yazmanız yetiyor, işin güzeli, yeni bir programınıza logo procedure'ünü taşıyarak orada da kullanabiliyorsunuz. Veya programı yaptıktan bir süre sonra aklınıza isminizin altını çizmek geldi. Programı değil sadece Logo procedure'ünü değiştirmek mümkün. Basic'te bu tür işleri Subroutine adı verilen ve Gosub ile kullandığınız satırlarla gerçekleştirirsiniz.
AMIGA&PASCAL
rebiliyordunuz.
Peki, nedir bu prosedür ve fonksiyonlar? Fonksiyonlar, a = fonksiyon gibi ifade edilen işlemlerdir. İşleme belki birçok parametre ve değer girer; ancak sonucu bir tanedir. Procedure'de ise işleme birden fazla değer veya hiç değer girebilir, sonucu yine aynı şekilde birden çok değer veya hiçbir değer olabilir. Örneğimize dönelim: logo diyerek sadece yazı yazıyoruz. Bu bir procedure. Ancak programı geliştirerek yazıyı yazıp yazmadığımızı belirten bir hata mesajı kullanmamızı sağlayalım (Mesela geri gelen değer 0 ise her şey tamam, 1 ise hafıza yetmiyor); o zaman a = logo, gibi bir ifade kullanır ve a'nın değerine bakarak sonucun ne olduğunu anlayabiliriz. İsmimizi x ve y koordinatlarına yazmak istesek, bunları parametre olarak kullanmalıyız, a=logo (x,y). Örnekleri daha da arttırabiliriz. Kısa keselim ve yapılarını inceleyelim. Procedure ve fonksiyonlar ana bloktan önce yer alırlar. Hemen bir örnek yazalım:
Procedure Logo (x,y : Integer);
var
a,b: integer;
begin
…
end; Procedure sembolünü, procedure ismi takip eder. Daha önce belirttiğimiz isim kurallarına uyan bu ismi, procedure'a parametre olarak verilen değişkenlerin veya sabitlerin tanımlandığı yer alır. Dikkat edin parantez içindeki değerlerin isimleri sadece procedure içinde x ve y olarak kullanılacaklardır, programdan q ve w integer türünden olmak üzere logo(q,w) olarak çağrılabilirler. Procedure'e aktarılan bu iki değer, procedure içindeki işlemlerden sonra programa işlenmiş halde dönmeyeceklerdir. Değerleri geri alabilmek için, parantez içinde geri istenen değer Var sembolü ile belirtilmelidir.
Procedure
Logo
(Var
irinte-
ger;x,y:real);
Tanımında parantez içindeki ilk değer geri gelecek demektir. Procedure'ün geri kalan kısmı aynen asıl program gibi tanımlar, başka procedure ve fonksiyonlar ve bloklardan oluşur. Burada son End'ten sonra noktalı virgül kullanılır. Procedure içinde kullanılan tüm değişken ve isimler procedure içinde kalır, sadece Var ile tanımlanan parametre(ler) geri dönebilir.
Fonksiyon, çok benzer bir kullanıma sahiptir. Sadece burada Var ile geri dönecek değişkenler tanımlanamaz. Bunun yerine fonksiyonun kendisinin tipi belirlenir.
Function Amiga (a,b,c,d : integer) :real; örneğinde, Amiga fonksiyonu programdan dördü de tamsayı olarak tanımlanması gereken i,j,k,l parametrelerini alıp, reel bir sayı olan s sonucunu verir.
s := Amiga (i,j,k,l); Burada yazım hatası yok. Pascal'da atama anlamında eşit, ":=" olarak kullanılır. Normal "=" ise, mantıksal karşılaştırmalarda ve tanımlarda kullanılır.
Eğer İngilizce biliyorsanız, Pascal ile program yazmak size çok zevkli gelecektir. Yazdığınız fonksiyon ve Procedure'leri kullanarak konuşuyormuş gibi program yazabileceksiniz.
Gelelim temel yapılara. Hemen her dilde en çok kullanılan yapı, IF..THEN..ELSE yapısıdır. Türkçeye EĞER..O ZAMAN.. AKSİ HALDE olarak çevrilebilecek bir yapıdır. Bu yapı ile, ilk olarak bir mantıksal karşılaştırma yapılır. Karşılaştırmanın sonucuna göre, sonuç olumlu ise THEN'den sonra gelen bölüm, olumsuz ise ve mevcutsa ELSE'ten sonra gelen bölüm kullanılır. Pascal'da ekrana yazı yazmak için kullanılan standart emrin writeln olduğunu belirtip hemen örneğe bakalım:
IF a > b THEN WRITELN ('A, B'den büyüktür'); satırı, eğer a, b'den büyük ise gerekli mesajı yazdıracaktır. Readln emrinin ise klavyeden bilgi girmek için kullanıldığını belirterek tam bir örnek program yazalım:
var
a,b: integer
begin
readln(a);
readln(b);
IF a > b THEN
begin
writeln(a,' \b,' den büyüktür.);
end ELSE
begin
IF a=b THEN
begin
writeln(a,' \b,' ye eşittir.);
end ELSE
begin
writeln(a,' ',b,' den küçüktür.);
end;
end;
end;
end.
Biraz karışık gibi gözükmesine rağmen,
neredeyse tüm anlattıklarımızı içeren bir
örnek, dahası çalışabilecek ilk Pascal
programımız. Programda ilk olarak iki
adet tamsayı (a ve b) tanımlanıyor. Daha
sonra bu değerler kullanıcı tarafından
klavyeden giriliyor (Readln, hiçbir mesaj
vermez sadece Return tuşunu bekler). Da-
ha sonra bakıyoruz; a, b'den büyük mü?
Eğer öyleyse mesaj yazılıyor, Else'e rağ-
bet edilmiyor ve doğrudan programın so-
nuna geliyoruz. Eğer a, b'den büyük de-
ğilse, şartımız tutmuyor; ELSE satırına
geliyoruz (Oradaki End, iki üstte bulunan
begin'in END'i). Burada yeni bir IF var
ve eşit olup olmadıklarını belirlemeye
çalışıyor. İki sonuca göre cevaplara gidi-
yoruz. İkinci If'te kullanılan = işaretinin
bir mantıksal işlem olduğunu ve bir atama
olmadığını hatırlatayım. Begin bloklarını
tek işlemlik IF'ler için kullanmamıza ge-
rek yok. Yukarıdaki örnek:
var a,b:lnteger;
begin
readln(a);readln(b);
IF a>b THEN vvriteln(büyük);
IF a=b THEN writein(esit);
IF a<b THEN vvriteln(küçük);
end.
Şeklinde, az Begin'li ve üç If'li olarak
da yazılabilirdi.
İkinci yapımız REPEAT .. UNTIL yapısı. Burada, Until sembolünün yanında bir şart bildirilir. Bu şart gerçekleşene dek program Repeat ile Until sembolleri arasını tekrar eder. Yeni örneğimiz, ona kadar sayan bir program:
var a:lnteger;
begin
a:=1;
REPEAT
writeln(a);
a:=a+1;
UNTIL a > 10;
end.
Çok benzer bir başka yapı da, WHILE
.. DO yapısıdır. Burada While'dan sonra
bir şart vardır. Bu doğru olduğu sürece
Do'dan sonra belirtilen işlem (veya Begin
ve End ile işlemler) tekrarlanır. Aynı ör-
nek:
var a:integer; begin a:=1; WHILE a<11 DO begin writeln(a);a:=a+1; end; end. WHILE yapısında, şartın önce kontrol edildiğine dikkat edin. Klasik bir yapı ise, FOR döngüsü. Bu döngüde bir tamsayı değişkenine bir başlangıç ve bir son değeri verilir ve DO'dan sonra belirtilen işlem (veya blok) o sayıda ve değişkenin o değerleri ile tekrar edilir. Eğer başlangıç değeri küçükse FOR .. TO, eğer büyükse FOR .. DOWNTO kullanılır. Aynı örneğimiz:
var a:integer; begin FOR a:= 1 TO 10 DO writeln(a); end. Eğer yapacak işimiz daha fazla olsaydı, burada da Begin bloğu kullanmamız gerekiyordu. GOTO yapısı, mümkün olduğu kadar az kullanılması gereken bir yapı. Pascal'ın temel programlama anlayışına ters düştüğünden, kullanılmaması öngörülüyor. Ancak bazı durumlarda bu emrin kullanılması kullanışlı oluyor. Yine de Pascal'la programlıyorsanız, GOTO kullanmadan önce gerçekten ihtiyacınız var mı diye kendinize sorun. GOTO'dan sonra atlamak istediğiniz program kısmını belirten etiketi yazınız:
Label Buraya;
begin
Buraya:
writeln ('Sonsuza kadar buraya
!!!');
GOTO buraya; end. WITH ve CASE yapılarını daha ileride inceleyeceğiz (Daha önce bazı şeyler daha öğrenmemiz gerekiyor). Bu aylık bu kadar sıkıntı yeter, gelecek aya kadar kendinize iyi bakın.