Amiga Dünyası sayı 5, sayfa 41

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 41

DERLEYİCİLER

ma ilkesi şöyledir: Önce ilk koşul kontrol edilir. Eğer bu doğruysa, hemen sonraki komut veya komutlar grubu (komutlar grubu süslü parantezler içinde olmalıdır) çalıştırılır ve program testten çıkarak çalışmasına devam eder. Eğer bu koşul doğru değilse, ikinci koşul kontrol edilir. İkinci koşul doğruysa program ikinci if'ten sonraki komut ya da komutları çalıştırır ve testten çıkılarak programın çalışması devam ettirilir. Eğer ikinci koşul da yanlışsa, program ikinci else'den sonraki komut veya komutlar grubunu çalıştırır ve test bitmiş olur. İkinci else ve üçüncü komutlar bölümü yoksa (bu bölümler isteğe bağlıdır), hiçbir işlem yapılmadan testten çıkılır. Programlarınızın içinde istediğiniz kadar;

else if(koşul)

komutlar bölümü bulunabilir. Fakat benim size tavsiyem, buradakinden daha fazlasını kullanmamanız. Çünkü bu, programınızın anlaşılabilirliğini azaltacaktır.

FONKSİYONLAR

C dilindeki fonksiyon kavramı, Basic'teki subrutinlere benzer. Bir fonksiyon, bazı hesaplamaların programdan bağımsız bir yerde yapılabilmesine olanak tanıyan bir yapıdır. Fonksiyonların asıl amacı, karışık ve uzun problemlerin daha kolay ve kısa olan parçalara bölünmesi ve bütün parçaların birleştirilmesiyle kısa, hızlı, daha kolay bir yoldan çözülebilmesidir. Uygun düzenlenmiş fonksiyonlarla, bir işin nasıl yapıldığı önemsenmeyebilir. Yani, sadece sonuç olarak neyin gerçekleştiğini bilmek yeterlidir. C dili fonksiyonları iyi, kolay, uygulanma alanı çok ve kullanım faydaları fazla olacak bir şekilde işleyebilmek için dizayn edilmiştir. C dilinde, sadece birkaç satırdan oluşan fonksiyonlar oldukça sık görülecektir. Bunların amacı, programın daha rahat anlaşılmasını sağlamak, daha sonra program üzerinde yapılacak değişikliklerin kolaylıkla yapılabilmesi olanağını vermek ve bir fonksiyonun birden çok programda kullanılabilmesini sağlamaktır.

Şu ana kadar bizim için daha önceden hazırlanmış olan printf, getchar, putchar gibi fonksiyonları kullandık. Fakat hiç kendi yazdığımız bir fonksiyonu kullanmadık. Sanırım artık bunun zamanı geldi. Örnek olarak, C dilinde üs alma operatörü olmadığı için, verilen bir sayının tamsayı üssünü alan bir power(m,n) fonksiyonu yazmayı seçtik. Tabii ki bu fonksiyon, tüm üs alma işlemlerini yapamamaktadır. Çünkü üs değeri olarak sadece tamsayılar verilebilmektedir.

Şimdi, ikinci kutudaki ana programı ve altındaki power fonksiyonunu yazarak kutudaki adımlar yardımıyla programı çalışır hale getirin.

Programdaki main fonksiyonu, sadece power fonksiyonunu test etmek için kullanılmıştır. Çünkü bütün C programlarında programın çalışabilmesi için bir yerde mutlaka main fonksiyonu olmalıdır.

C dilindeki tüm fonksiyonlar aynı düzende yazılırlar:

fonksiyon-adı(eğer varsa argüman adları)

eğer varsa argüman tanımlamaları { tanımlamalar komutlar } power fonksiyonu,

printf("%d %d %d",i,power(2i),(power(3j));

satırında, iki defa çağrılmaktadır. Her çağrılmada, power fonksiyonuna iki tane argüman geçirilmektedir ve power fonksiyonu da sonuçta ana fonksiyona (main'e) bir sayıyı geri göndermektedir. Power fonksiyonunun geri gönderdiği sayı, bir tamsayı olduğundan, printf de %d yardımıyla basılabilmektedir. Doğal olarak C dilinde her fonksiyon mutlaka tamsayı bir değeri geri göndermek zorunda değildir. Fakat bunlarla ilgili bilgileri daha sonraki sayılarda size vereceğim.

power fonksiyonundaki argümanlar, doğru olarak tanımlanmalıdırlar ki program tarafından doğru olarak kullanılabilsin. Bu işlem:

int x,n;

satırı ile yapılmaktadır. Argüman tanımlamaları, fonksiyon adı ve açma süslü parantezi ({) arasında yer almalı ve her tanımlamanın sonuna, noktalı virgül konmalıdır. Power'ın argümanları için kullanılan isimler (x, n) tamamen o fonksiyona aittir ve başka fonksiyonlar içinde bir karışıklık yaratmadan kullanılabilir. Bu aynı zamanda fonksiyonun içindeki i, p gibi değişkenler için de geçerlidir. Yani main fonksiyonundaki i değişkeni ile, power fonksiyonundaki i değişkeninin birbiri ile hiçbir ilgisi yoktur ve bu durum programın işlemesi açısından bir karışıklık yaratmaz.

power'ın hesapladığı değer, fonksiyona bir return komutu yardımıyla gönderilmektedir. Return fonksiyonunun parantezleri içinde, herhangi bir ifade bulunabilir. Bir fonksiyon, mutlaka bir sayı geri göndermek (İng. return) zorunda değildir. Parantezleri içinde hiçbir ifade bulunmayan return komutu, kontrolün çağıran fonksiyona dönmesini (doğaldır ki hiçbir değeri olmayan bir değerle) sağlar. Çağıran fonksiyona dönmenin bir başka yolu da, return komutu yazılmadan süslü parantez ile kapatmaktır.

Bu aylıkta bu kadar. Gelecek ay fonksiyonların ve programımızın incelenmesine devam edeceğiz. Hoşçakalın.

-------------------------------KUTU 2 -------------------------------

1> Aşağıdaki programı yazıp, Ram Disk'e kaydedin.

/* K&Rın kitabından alınarak Amiga ya uyarlanmıştır. V

main() {

int i;

for(i=0;i<10;++i) printf("%d %d %d",i,power(2,i),power(3,i));

power(x,n) int x,n; {

int i,p;

p=1; for(i=1;i<=n;++i)

p=p*x;

return(p);

}

2> Şimdi programı "cc ram:program-ismi.c" ile compile edin. 3> Şimdi de "ln ram:program-ismi.o -lc" ile link edin. 4> Programı çalıştırmak için ram:program-ismi yazın.

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