Dizilere ve matrislere geçmeden önce C programlama dilinde önemli yeri olan
fonksiyonlar kısmına değinelim.Nasıl çalıştıklarını, nasıl değer döndürdüklerini
öğrenelim.
FONKSİYONLAR:
C gibi prosedürel dillerin önemli konularından birisi fonksiyonlardır.
Java veya C# gibi dillerde metot (method) ismini alırlar. Adı n'olursa olsun, görevi aynıdır.
Bir işlemi birden çok yaptığınızı düşünün. Her seferinde aynı işlemi yapan kodu yazmak oldukça zahmetli olurdu.
Fonksiyonlar, bu soruna yönelik yaratılmıştır. Sadece bir kereye mahsus yapılacak işlem tanımlanır.
Ardından dilediğiniz kadar, bu fonksiyonu çağırırsınız. Üstelik fonksiyonların yararı bununla da sınırlı değildir.
Fonksiyonlar, modülerlik sağlar. Sayının asallığını test eden bir fonksiyon yazıp, bunun yanlış olduğunu farkederseniz,
bütün programı değiştirmeniz gerekmez. Yanlış fonksiyonu düzeltirsiniz ve artık programınız doğru çalışacaktır.
Üstelik yazdığınız fonksiyonlara ait kodu, başka programlara taşımanız oldukça basittir.
Fonksiyonlar, çalışmayı kolaylaştırır. Diskten veri okuyup, işleyen; ardından kullanıcıya gösterilmek üzere
sonuçları grafik hâline dönüştüren; ve işlem sonucunu diske yazan bir programı baştan aşağı yazarsanız,
okuması çok güç olur. Yorum koyarak kodun anlaşılabilirliğini, artırabilirsiniz.
Ancak yine de yeterli değildir. İzlenecek en iyi yöntem, programı fonksiyon parçalarına bölmektir.
Örneğin, diskten okuma işlemini disten_oku( ) isimli bir fonksiyon yaparken; grafik çizdirme işini grafik_ciz( )
fonksiyonu ve diske yazdırma görevini de diske_yaz( ) fonksiyonu yapabilir. Yarın öbür gün,
yazdığınız kodu birileri incelediğinde, sadece ilgilendiği yapıya göz atarak,
aradığını çok daha rahat bulabilir. Binlerce satır içinde çalışmaktansa, parçalara ayrılmış bir yapı herkesin işine gelecektir.
Bu yazımızda, fonksiyonları açıklayacağız.
MAİN() FONKSİYONU:
Şimdiye kadar yazdığımız bütün kodlarda, main( ) şeklinde bir notasyon kullandık.
Bu kullandığımız ifade, aslında main( ) fonksiyonudur. C programlama dilinde,
bir kodun çalışması main( ) fonksiyonun içersinde olup olmamasına bağlıdır.
Bir nevi başlangıç noktası olarak düşünebiliriz. Her programda sadece bir tane main( ) fonksiyonu bulunur.
Başka fonksiyonların, kütüphanelerin, kod parçalarının çalıştırılması main( ) içersinde direkt veya dolaylı refere edilmesiyle alakalıdır.
main( ) fonksiyonuna dair bilgimizi pekiştirmek için bir program yazalım.
Aşağıdaki çizimi inceleyip, C programlama diliyle bunu çizen programı oluşturalım.
/
/
/
/
----------
| |
| |
| |
----------
Ev veya kule benzeri bu şekli aşağıdaki, kod yardımıyla gösterebiliriz:
CODE:
/* Ev sekli cizen program */
#include<stdio.h>
int main( void )
{
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( "----------n" );
printf( "| |n" );
printf( "| |n" );
printf( "| |n" );
printf( "----------n" );
return 0;
}
/* Ev sekli cizen program */
#include<stdio.h>
// Evin catisini cizen fonksiyon.
void catiyi_ciz( void )
{
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( "----------n" );
}
// Evin katini cizen fonksiyon.
void kat_ciz( void )
{
printf( "| |n" );
printf( "| |n" );
printf( "| |n" );
printf( "----------n" );
}
// Programin calismasini saglayan
// ana fonksiyon.
int main( void )
{
catiyi_ciz( );
kat_ciz( );
return 0;
}
/* Ev sekli cizen program */
#include<stdio.h>
// Evin catisini cizen fonksiyon.
void catiyi_ciz( void )
{
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( "----------n" );
}
// Evin katini cizen fonksiyon.
void kat_ciz( void )
{
printf( "| |n" );
printf( "| |n" );
printf( "| |n" );
printf( "----------n" );
}
// Programin calismasini saglayan
// ana fonksiyon.
int main( void )
{
catiyi_ciz( );
// 3 adet kat ciziliyor.
kat_ciz( );
kat_ciz( );
kat_ciz( );
return 0;
}
// Evin katini cizen fonksiyon.
// void var
void kat_ciz( void )
{
printf( "| |n" );
printf( "| |n" );
printf( "| |n" );
printf( "----------n" );
}
// Evin katini cizen fonksiyon.
// void yok
void kat_ciz( )
{
printf( "| |n" );
printf( "| |n" );
printf( "| |n" );
printf( "----------n" );
}
/* Ev sekli cizen program */
#include<stdio.h>
// Evin catisini cizen fonksiyon.
void catiyi_ciz( void )
{
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( " / n" );
printf( "----------n" );
}
// Evin katini cizen fonksiyon.
// sol ve sag degiskenleri fonksiyon
// parametreleridir.
void kat_ciz( char sol, char sag )
{
printf( "%c %cn", sol, sag );
printf( "%c %cn", sol, sag );
printf( "%c %cn", sol, sag );
printf( "----------n" );
}
// Programin calismasini saglayan
// ana fonksiyon.
int main( void )
{
char sol_duvar, sag_duvar;
printf( "Kullanılacak karakterler> " );
scanf( "%c%c",&sol_duvar, &sag_duvar );
catiyi_ciz( );
// sol_duvar ve sag_duvar, fonksiyona
// giden argumanlardir.
kat_ciz( sol_duvar, sag_duvar );
kat_ciz( sol_duvar, sag_duvar );
kat_ciz( sol_duvar, sag_duvar );
return 0;
}
/* Sayının tek veya çift olmasını
kontrol eder. */
#include<stdio.h>
void tek_mi_cift_mi( int sayi )
{
if( sayi%2 == 0 )
printf( "%d, çift bir sayıdır.n", sayi );
else
printf( "%d, tek bir sayıdır.n", sayi );
}
int main( void )
{
int girilen_sayi;
printf( "Lütfen bir sayı giriniz> " );
scanf( "%d",&girilen_sayi );
tek_mi_cift_mi( girilen_sayi );
return 0;
}
#include<stdio.h>
// Verilen sayinin karesini hesaplar
void kare_hesapla( int sayi )
{
// kare_hesapla fonksiyonunda
// a degiskeni tanimliyoruz.
int a;
a = sayi * sayi;
printf( "Sayının karesit: %dn", a );
}
// Verilen sayinin kupunu hesaplar
void kup_hesapla( int sayi )
{
// kup_hesapla fonksiyonunda
// a degiskeni tanimliyoruz.
int a;
a = sayi * sayi * sayi;
printf( "Sayının küpüt: %dn", a );
}
int main( void )
{
// main( ) fonksiyonunda
// a degiskeni tanimliyoruz.
int a;
printf( "Sayı giriniz> ");
scanf( "%d",&a );
printf( "Girdiğiniz sayıt: %dn", a );
kare_hesapla( a );
// Eger a degiskeni lokal olmasaydi,
// kare_hesapla fonksiyonundan sonra,
// a'nin degeri bozulur ve kup yanlis
// hesaplanirdi.
kup_hesapla( a );
return 0;
}
#include<stdio.h>
int sonuc = 0;
// Verilen sayinin karesini hesaplayip,
// global 'sonuc' degiskenine yazar.
void kare_hesapla( int sayi )
{
sonuc = sayi * sayi;
}
int main( void )
{
// main( ) fonksiyonunda
// a degiskeni tanimliyoruz.
int a;
printf( "Sayı giriniz> ");
scanf( "%d",&a );
printf( "Girdiğiniz sayıt: %dn", a );
kare_hesapla( a );
printf("Sayının karesit: %dn", sonuc );
return 0;
}
#include<stdio.h>
int main( void )
{
int i = 4;
int j = 10;
i++;
if( j > 0 ){
printf("i : %dn",i); /* 'main' icinde tanımlanmis 'i' degiskeni */
}
if (j > 0){
int i=100; /* 'i' sadece bu if blogunda gecerli
olmak uzere tanimlaniyor. */
printf("i : %dn",i);
} /* if blogunda tanimlanan ve 100 degerini
tasiyan 'i' degiskeni burada sonlaniyor. */
printf("i : %dn",i); /* En basta tanimlanan ve 5 degerini tasiyan
'i' degiskenine donuyoruz */
}
#include<stdio.h>
// Verilen sayinin asal olup olmadigina
// bakar. Sayi asalsa, geriye 1 aksi hâlde
// 0 degeri doner.
int sayi_asal_mi( int sayi )
{
int i;
for( i = 2; i <= sayi/2; i++ ) {
// Sayi asal degilse, i'ye tam olarak
// bolunur.
if( sayi%i == 0 ) return 0;
}
// Verilen sayi simdiye kadar hicbir
// sayiya bolunmediyse, asaldir ve
// geriye 1 doner.
return 1;
}
// main fonksiyonu
int main( void )
{
int girilen_sayi;
int test_sonucu;
do{
printf( "Lütfen bir sayı giriniz> " );
scanf( "%d",&girilen_sayi );
test_sonucu = sayi_asal_mi( girilen_sayi );
if( !test_sonucu )
printf("Girilen sayı asal değildir!n");
} while( !test_sonucu );
printf( "Girilen sayı asaldır!n" );
return 0;
}
donus_tipi fonksiyon_adi( alacagi_arguman[lar] )
{
.
.
FONKSİYON İÇERİĞİ
( YAPILACAK İŞLEMLER )
.
.
[return deger]
}
[IMG SRC="http://img225.imageshack.us/img225/2408/seyhanzt2.jpg" ALIGN="oğuz"]seyhan[/IMG]
Arkadaşlar yakında Java ile ilgili bir kaç yararlı
şey de foruma eklemeye çalışacağim.Takip eden arkadaşlar
Java notlarınıda kaçırmasın benden söylemesi...
[IMG SRC="http://img225.imageshack.us/img225/2408/seyhanzt2.jpg" ALIGN="oğuz"]seyhan[/IMG]
Seyhancım şuan C ve Delphi bölümünde konuları biriktirelim.Konular tamamlandığında eksiklerini gözden geçirip en güzel haliyle eğitim kısmına eklemeyi düşünüyoruz.Bu yüzden C de açacağın konuları sabitliyorum kolay gelsin.
Seyhan benim bu sıralar vaktim var senin yok sanırım.C de bu konudan sonra hangi konuları anlatmayı düşünüyosan söyle ben devam ettireyim ok.
Oguz kardeşim benim vaktim olsa idi dizilere ve daha sonra
pointer kullanımına geçecektim ama Java ile ilgili bir simülatör projesi
üstlendim ve yoğun olarak çalışıyorum sana kolay gelsin kardeşim ama ben zaman buldukça
java notlarına devam edeceğim.
Saygılarımla
Seyhan Uçar
[IMG SRC="http://img225.imageshack.us/img225/2408/seyhanzt2.jpg" ALIGN="oğuz"]seyhan[/IMG]
Gençler gözlerimi yaşatıyorsunuz. Bu azminizin karşılığını inşallah hayatta alırsınız. Çok açıklayıcı bir yazı olmuş teşekkür ederiz.
<!--The Coders Script v2.0 çok yakında-->
<!--Bana balık vermeyin balık tutmayı öğretin.-->
Birşeyler öğretmek öğretirken tekrar öğrenmek güzel bir şey..Faydalı oluyorsak ne mutlu bize :)
Adminimize teşekkür ederiz biz zaman buldukça bildiklerimizi paylaşacağiz.
Hekese kolay gelsin
Saygılarımla.
Seyhan Uçar
[IMG SRC="http://img225.imageshack.us/img225/2408/seyhanzt2.jpg" ALIGN="oğuz"]seyhan[/IMG]
