DİLLERAMIGA&PASCALha önce belirttiğim tüm matematiksel işlemleriyapabilirsiniz. Ancak ileride göreceğimiz,Sinüs, tanjant gibi bazı fonksiyonlarsadece reel sayılarla çalışırlar.BOOLEAN: Mantıksal işlemlerin babasıGeorge Boole'un adından ismini alanbu değişkenin iki değeri olabilir: True(Doğru) veya False (Yanlış). Bu değerlerarasında False < True ilişkisi geçerlidir.Bu değişken mantıksal işlemlerde kullanılır.Mantıksal işlemler olan AND, OR,NOT ve XOR ile işlemlere girer ve enönemlisi IF döngülerinde kullanılır.Saygılar, esenlikler...Merhabalar, Pascal konulu yazı dizimizinüçüncüsüne geldik. Artık bu dile yabancıolanlarımız bile, Pascal hakkında azçok şey biliyor sayılırlar. Bu ayki yazımızdaPascal'ın bazı özelliklerini,Pascal'da tanımlanabilen tipleri ve bunlarınuygulamalarını, son olarakta Unit kavramınıinceleyeceğiz.Geçen yazımızda değişkenlerin nasıl tanımlandığınıgörmüş ve:vara,b : Integer;şeklinde örnekler de vermiştik. Burada ave b değişkenleri, program içinde integerdiye adlandırılan tamsayı tipinde sayılarolacak şekilde tanımlanıyordu. Pascal'dabu tür standart bazı tanımlar var. Bu standartlarısırayla görelimINTEGER: -32768 ve 32767 arasındakalan tamsayı değerlerini alabilir. İyiprogramlamayla birçok işlem bu değişkenleryardımıyla yapılabilir. Ancak integerolarak tanımlanmış bir sayı, mesela100000 değerini alamaz. Aynı şekilde Integersadece tamsayı değerleri alır. 5.8735gibi bir sayı, Integer olarak sadece 5'tenibarettir.LONGINT veya LONG: Integer tipininbir numara büyüğü olan LONGINT2147483648 ila 2147483647 sayıları arasındakitamsayı değerlerini alabîlir. Nevar ki, Integer tipinin iki katı kadar yerkaplar.SHORTINT veya SHORT: hafızadasadece 1 byte yer kaplayan bu değişken128 ila 127 arasındaki değerleri alır. Ufakdöngüler, yazı koordinatları gibi ufak değerleriçin kullanılabilir.CARDINAL veya WORD: Integer'danfarkı, negatif değerler alamamasıdır. 0 ila65535 arasındaki tamsayı değerlerini alabilir.SHORTCARD veya BYTE: Negatifdeğerler alamayan, sadece 0 ila 255 arasındakitamsayı değerlerini alabilen ve azhafıza kaplayan bir değişken.REAL: Hafızada çok yer kaplayan, ancakondalık sayıları 7 haneye kadar içerebilendeğişken türü. Üst sının artı eksi8*10 A 18 kadardır. Hemen küçümsemeyinbu tür ile 2.876542 * 10^18 gibi sayılarkullanabiliyorsunuz.(2876542000000000000)LONGREAL veya DOUBLE: hafızada8 byte yer kaplar ancak Real ile yetinemeyeninsanları tatmin edebilecek bir aralığıvar. 15 haneli hesap doğruluğu ve10^308'e kadar da sının var.Yukarıda sıralanan tipler, sayılar ile ilgiliydi.Bu tiplerin temel olarak tamsayılarve ondalık sayılar olarak iki gruba ayrıldığınadikkat edin. Kick Pascal, bir alt grubasığamayan bir değişkeni kendiliğindenbir üst gruba atmaya çalışır. Sayılar ile da-varcevap : boolean;begincevap := true;IF cevap then writeln ('Cevapdoğru');end.Belki biraz komik gelecek ama,cevap := (5>2);gibi işlemler de mümkün. Tabii bu tür işlemlerinsabit sayılar ile pek bir kullanışlılığıyok. Ancak değişkenler kullanılarakçok işe yarayabiliyorlar. Örneğin bir sayının(x) a’dan küçük, b’den büyük olmasınıve c’ye eşit olmamasını istiyoruz.cevap := (x < a) AND (x > b) AND(x c);Örnekler çoğaltılabilir. Fazla alışık olmasanızbile, bu değişkenlerin size ne kadarkolaylıkla sağlayabileceğini fark ederekprogramlarınıza dahil etmenizi öneririm.CHAR: " veya " arasında bir adet yazıkarakteri temsil edebilen bir değişkendir.STRlNG [n]: n adet Char’dan oluşanbir dizi satır’a verilen isim. Bu tür birdeğişken ile isimleri tutabilirsiniz.Eğer n sayısını belirtmezseniz, 80 alınır nsayısını 255'in üzerine çıkaramıyoruz.POINTER'lar: Hatırlayın, dedik ki, birdeğişken hafızada belirli bir yer kaplar(Örneğin String [80] hafızada 80 byte yerkaplar). Çok kullanılan bir yöntem, eğerkullandığımız değişken 4 byte'tan fazlayer kaplıyorsa, değişkeni doğrudan kullanmakyerine, o değişkenin hafızada neredeolduğunu belirten bir Pointer kullanmaktır.Her değişkenin bir pointer türünütanımlayabiliriz. Bunun için tek yapacağımızdeğişken tipinin önüne A koymak. Budeğişkeni kullanabilmek için ise,pointer'ın sonuna ^ koymak. Anlaşıldı, eniyisi bir örnek üzerinde konuşmak.Vari: integer;p : ^integer;begini:= 21243;1.0 Pascal ve <strong>Amiga</strong> versiyonları,Pascal ile neler yapılabilir?2.0 Pascal'ın genel yapısı: Tanımlar,bloklar, Procedure ve fonksiyonlar3.0 Pascal dili özellikleri, tiptanımları, unitler.4.0 <strong>Amiga</strong> ile iletişim: Librarykullanımı, <strong>Amiga</strong>'ya has komutlar.5.0 Gelişmiş programcılık: teknikler,başka sistemlere veya sistemlerdenaktarmalar.p:= ^i;writeln (i);writeln (p^);end.İster inanın ister inanmayın, ekrana ikidefa 21243 yazılacaktır. Önce ne yaptığımızabir bakalım. İlk olarak i değişkeniniinteger olarak tanımladık. Daha sonra pdeğişkenini integer gösteren bir pointerolarak tanımladık. Programda ise, öncei'ye bir değer atadık. Daha sonra p değerinii'nin hafızadaki adresine eşitledik.Dikkat edin: p değişkeni i sayısını değil, isayısının değerinin hafızada* nerede olduğunututuyor. Son satırda rahatça görüyoruzki, sadece p'yi kullanarak i sayısınındeğerini bulabiliyoruz. Bunun için p^ kullanıyoruz.Bu ifade artık hafızada bir yergöstermiyor, daha çok o yerde bulunandeğeri veriyor. Bu genel pointer tipleri dışında,bir de ptr ile tanımlanan bir pointerBu pointer ile hafızada yer ayırmakve dinamik değişkenler yaratmak mümkünolacak (sabredin yahu).Kümeler: Hadi bakalım, şu ana dek BasicBasic diyenler tüm şanslarını kaybettiler.Zira Pascal'ın en eğlenceli yerine geldik.Bir değişkeni, değerlerinin sınırlarıile de belirleyebilirsiniz. Örneğin değişkensadece 1 ila 100 değerini mi alacak?Hemen yapalım:vara:1..100;Aradaki iki nokta, bir küme belirlemekiçin kullanılıyor. Çok dikkat edin, a'yı sadece1 ve 2 değerlerini alacak şekilde tanımlamakiçin bile,vara:1..2;demeniz gerekiyor. Kümeler, bu kadar basitdeğil. Kümeleri aralarında işlemler yaparakda tanımlayabiliriz. Herşeyden öncekümeleri parantezlere alıyoruz. Bir değişkeninverilen bir küme elemanlarını içerecekşekilde tanımlamak için ise, SET OFkullanıyoruz. Aşağıda bazı tanımlar var,yanlarında bu tanıma giren kümeyi yazdım:vara:setof[1..8]*[5..12]; {5,6,7,8}AMIGA DÜNYASI 34
: set of [1..2]+[7..9]; {1,2,7,8,9}c : set of [1..10] - [5..10] {1,2,3,4}Daha güzeli, bu küme işlemlerini programiçinde de yapabilmemiz. Bu aradamantıksal sonuç veren İN, =, o, işlemlerini kullanabiliyoruz. Diyelimbir sayınız var ve bu sayının l ila 20 ara-Ninda bir asal sayı olup olmadığını kontroledeceğiz.vara : integer;beginreadln (a);if a in [2,3,5,7,11,13,17,19] thenwriteln ('ASAL');end.Veya bir karakter girildi bu karakteracaba harf mi, değil mi?vara: Char;beginreadln(a);if a in ['a'..'z','A'..'Z'] than write(a);endDaha bunlarla işimiz bitmedi, şimdilikbiraz ara verelim. Tek ve çok boyutlu dizilerbilgisayarda her zaman kullanılır.Bunları tanımlamak için ARRAY kullanılacaktır.Hemen örnek:vara : Array [1 ..10,1 ..10] of integer;Basic'te karşılığı Dim a( 10,10) olan birkomut. Bu değişken ile 100 adet tamsayıtutabiİiyoruz. Bunlara erişebilemek içina[n][m| ifadesi kullanılır.Son olarak dosya tipini tanıtmam gerekiyor.Genelde kullanılan bilgilerin biryerlere aktarılması gerekir. BU iş için enuygunu. dosyalar kullanmaktır. Bir değişkenidosya değişkeni olarak tanımlamakmümkün.varf: file of char;içeriği karakterlerden oluşacak olan birdosya değişkeni olur. Konuyu fazla derinleştirmeden,hemen zevkli bir başka konuyageçelim.Dikkat edin, deminden beri değişkenleritanımlamak için kullanılan tipleri inceliyoruz.Niye Tamsayılar'a integer diyelim,niçin kafama göre tipler tanımlamayalımdiyorsanız, tam yerine geldiniz.Hatırlayın Pascal'ın blokları arasındaType kısmı vardı. Burada kendinize istediğiniztipi tanımlayabilirsiniz. Sıkı durunörnek geliyor:typeTamsayi = integer;vara : tamsavi:f: file of tamsayi;Bir ikinci örnekte, daha önce anlatılankümeleri ve Arrayleri de işin içine katalım:typematris = Array [1..100,1..100] of integer;Rakam = '0'..'9';Pozitif = L.Maxint;{Dikkat edelim şu an değişken değil,degişken tipi tanımlıyoruz. Bu tiplerde değişkenlerivar kısmında tanımlamamızşart.}Vara:matris;n:rakam;p:pozitifNasıl ama ??? Şimdi iyi bir bomba. Tiptanımlarken parantez içinde sıralı olarakyazacağımız değerler tanımlayabiliriz:TypeAy =(Ocak, subat, mart, nisan,mayis, haziran, temmuz, agustos,eylül, ekim, kasim, aralik);Tatil = haziran..eylül;varsimdiki ay : ay;beğinif simdiki_ay : Ocak then writeln(‘Ocak soguktur.’);end.Belki anlatması saçma olacak ama. ilkolarak ismi ay olan bir tip tanımlıyoruz.Bu tipin alacağı değerler ocak ila aralıkarasında (Bu değerler sıralıdır, yani ocak< şubat) yer alıyor. Daha sonra ismisimdiki_ay olan bir değişken tanımlıyoruz.Bu değişken artık ay ile tanımlanandeğerleri alabilir. Pekala simdiki_ay isimlideğişkenin değeri şubat olabilir. Komikgörünse de, bu tür tipleri tanımlamanınbirçok yararı oluyor. Bir ikinci tip özelliği,değişik tipte değişkenleri içeren tipleroluyor. Bunlar RECORD sözcüğü ile tanımlanıyor.Önce örnek:type'Sanal_sayi = RECORDReel : real;Sanal: real;END;vara : Sanal şayibegina.reel := 25.765a.sanal := 12.87end.Görüldüğü üzere, burada bir sanal sayıtipi tanımlanmış. Bu tip iki adet reel sayıdanoluşuyor. Bu türde tanımlanan bir değişkeninalt bölümlerine ulaşabilmek için,değişken isminin sonuna . konuyor, iştekapsamlı bir örnek:program Telefon defteri;typeNumara = recordDERLEYİCİLERisim : string [20];soyisim : string [40];numara : Long;end;Defter = array [1..100] of numara;varkayıt: numara;T_Defteri : Defter;f: file of Defter;beginT_Defteri [1].isim :='F.Kağan'T_Defteri[1].soyisim:=Gurkaynakend.gibi. Dikkat ederseniz, değişkenleri girmekzahmetli oluyor. Onun da bir kolayıvar elbet. Geçen ay anlattığımız WITHbloğunu kullanarak, yukarıdaki örnekte,beginWITH T_Defteri[1]DOBeginisim :='F.Kağan'soyisim :=' Gurkaynak'End;End.yapısı kullanılabilir. İngilizce biliyorsanız,bu tür tanımları ve değişkenleri kullanarakroman yazar gibi program yazabiliyorsunuz.Son örnekte dikkat ederseniz f değişkeninidefter türünü içeren bir dosya olaraktanımladık. Dosya komutlarını kullanarakbir hamlede bütün kayıtları disketeaktarabilme olanağımız var.Güzel, artık neredeyse tüm değişkenleri,nasıl tanımlandıklarını ve tarafımızdannasıl tanımlanabileceklerini öğrendik. AncakPascal ile hala fazla birşeyler yapabiliyordeğiliz. Sebebi basit. Kullanabilecekemirlerimiz yok. Şu an öğrendiklerimizlebırakın güzel bir program yazmayı, ekranabasit bir nokta bile koymaktan aciziz.Emirleri nereden öğreneceğiz. İlk olarakPascal'ın standart emirleri var. Bundansonra <strong>Amiga</strong>'nın sistem emirleri geliyor.Yaklaşık 1000 kadar emir size yeterli olacaktır.Bunlarda yetmezse emirlerinizikendiniz tanımlıyorsunuz. Procedure veFunctionîar olarak tanımladığınız emirleribir araya getirip toplayabiliyorsunuz. Butür toplamalara ve özel şekline UNIT adıveriliyor. Bir UNIT, bir programa benzemesinerağmen, sadece procedure vefunctionîar içerir. Bir unit hazırladıktansonra, yeni yazdığınız programlarda ounit'te tanımladığınız fonksiyonları kullanabilirsiniz.Bunun için tanım kısmınasadece gereken unit'i eklemeniz yeter:Uses Kagan_in_Uniti;Diyelim, bu unit'te 10 adet emir var. Artıkprogramınızı yazarken bu emirleri kullanabiliyorsunuz.Nasıl Unit oluşturacağınızkonusuna ise ileride değineceğim. Dahaprogram bile yazamadan Unit kullanmakayıp olur doğrusu.Gelecek ay bir <strong>Amiga</strong> Pascal programcısıolmak için gerekenleri öğreneceksiniz.O zamana dek hoş olun, öyle kalın.AMIGA DÜNYASI 35