Amiga Dünyası sayı 22, sayfa 23

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 23

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.

Klavyeyle gezinmek için ← ve → tuşları.