Amiga Dünyası sayı 12, sayfa 33

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 33

Geçen ay yapısal programlar için gerekli olan akış-kontrol elemanlarının, karar ifadelerini kontrol eden (if), çıkış testi başlangıçta olan (while, for), çıkış testi sonda olan (do), çeşitli olasılıklardan bir tanesini seçmemize yarayan (switch) ve bu komutların akışını etkileyen (break, continue) komutlarını öğrenmiştik. Bu komutlar C dilinin en önemli konu serisini oluşturmaktaydı. Bu nedenle bu komutları ve kullanımlarını çok iyi irdelemelisiniz. Çünkü bu ay C’de ayrı bir önemi olan fonksiyonları ve C’nin program yapısını öğreneceğiz. Bunları öğrendikten sonra da bu komutları bol bol kullanacağız. Şimdi C'nin program yapısını ve fonksiyonların C’de kullanımını öğrenmeye başlayalım.

C'nin program yapısı fonksiyonları çağırarak oluşturulur. Fonksiyonları çağırmadan önce, varsa fonksiyonun istediği parametreler hazırlanır. C'de her işlem fonksiyonlara bölünerek programlanmaktadır. Bildiğiniz gibi, bütün C programlarımızda eksik etmediğimiz main() fonksiyonu da, bu fonksiyonların en başını oluşturmaktadır. Programımız çalışır çalışmaz main() fonksiyonuna atlar ve diğer alt fonksiyonlara sıçrar. Böylece fonksiyonlardan oluşmuş, yani, yapısal bir program çalışmaya başlar. Önce main(), sonra temel fonksiyonlar, daha sonra fonksiyonların alt fonksiyonları ve diğerleri; işte C'nin genel program yapısı. Gördünüz mü? Ne kadar kolay!..

C'de her hangi bir fonksiyon kendi kendini çağırabilir (recursion). Aşağıdaki örneğin kullanımına dikkat edin.

int n; {

int i;

if(n<0) {

putcharf-'); n=-n; } if((i=nz10)!=0)

printd(i); putchar(n%10+'0'); } Fonksiyonlar çağırıldıktan sonra ilk ola- rak, varsa, kendi parametrelerini alırlar ve içlerinde kullanacakları değişkenleri ta- nımlarlar.

Main() {

int i; float f; char c;

i=55; f=52.34; c='a';

printi(i); printfl(f); printc(c); }

printi(a) int a; {

printf("%d\n",a); }

printfl(a) float a; {

printf("%An",a); }

printc(a) char a; {

printf("%c\n",a); }

Yukarıdaki örnekten de anlaşılacağı gibi her farklı tipteki değişkenler için ayrı bir print alt programı yazılmıştır. Burada dikkatinizi çektiyse, bu alt programların parametreleri farklı tiplerdedir. Fonksiyonlarda parametreleri tanımlarken verilen parametrenin aynı tipini tanımlamak gerekir. Aksi taktirde programınız hatalı çalışacaktır.

Fonksiyonun içinde tanımlanan değişkenler otomatiktir, yani fonksiyon işlemini bitirdikten sonra otomatikman bellekten silinir. Burada değişkenler bir fonksiyona aittir. Fakat değişkenler, bütün fonksiyonların kullanabileceği şekilde (global) tanımlanabilir. Global değişkenleri kullanırken dikkatli olmak gerekir. Genel olarak global değişkenler bir döngünün kontrol değişkeni olarak kullanılmaz. Çünkü bu döngünün içinde kullanılan bir fonksiyon varsa ve bu fonksiyon da aynı değişkeni kullanıyorsa; bu, programın çalışmasını kontrolden çıkarabilir. Bunun dışında global değişkenler parametre sayısını azaltır. Bu, bazen oldukça yararlı olmaktadır.

Şimdi her bir fonksiyonun kullanım formuna bir göz atalım.

isim(değişken listesi) değişken tanımlamaları { tanımlamalar ve cümleler, } fikir vermek amacıyla, fonksiyonu minimal fonksiyon olarak kullanabiliriz. Yani burada sahte bir fonksiyon mevcuttur.

Dummy() { }

Fonksiyonun işlevi bittikten sonra, fonksiyonda olup bitenleri bildirmek amacıyla bir dönüş kodu yollanabilir. Bunu yapmamızı sağlayan komut:

return(sayı)

komutudur. Return komutu fonksiyonlarda sık sık kullanılır. Ayrıca return komutunun yalnızca fonksiyonun sonunda olmasına gerek yoktur. Fonksiyonun herhangi bir bölümünden bir dönüş koduyla ya da kodsuz çıkılabilir. ___________________

main()

{ int i;

for(i=0;i<=10;i++) printf("2A%d=%d\n",i,power(2,i)); }

power(j,k) int j,k; {

int r,m;

r=1;

for(m=l;m<=k;m++) r*=j;

return(r); }

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