Temel C Programlama -26- Fonksiyondan Değer Döndürmek

Buraya kadar argüman alan fonksiyonlardan size bahsettik fakat değişkenleri argüman alan fonksiyondan bahsetmedik. Kısa bir örnekle bunu size göstereceğiz ve ardından fonksiyondan değer döndürerek fonksiyonları tam anlamıyla kullanmış olacağız.

#include <stdio.h>
#include <stdlib.h>
////// FONKSİYON PROTOTİPLERİ //////////
void karakter_yaz(char karakter, int sayi);

int main() {
	char c;
	int n;
    printf("Yazilmasini istediginiz karakteri giriniz:");
    scanf("%c", &c);
    printf("\nKac Defa Yazilacigini giriniz:");
    scanf("%i", &n);

	karakter_yaz(c, n);
system("PAUSE");
}

void karakter_yaz (char karakter, int sayi)
{
	for (int i=0; i < sayi; i++ )
	printf("%c",karakter);
	printf("\n");
}

Programı çalıştırdığımızda kullanıcıdan yazılması istenilen karakteri girmesi istenecektir. Bu durumda klavyedeki harf ve sembollerden birini girmemiz lazımdır. Bu sembol c değişkeninin içerisine atılacaktır. Sonrasında ise kaç defa bu harfin yazılacağı sorulmaktadır. Buraya girdiğimiz sayı değişkenin değerince önceden yazdığımız harf yazılacaktır.

karakter_yaz(c, n);

Bu komutla önceden kullandığımız fonksiyon üzerinde değişklik yapmadan buna sabit değer atamak yerine değişken atadık. c değişkenini char tipinde ve n değişkeninin int tipinde olduğunu unutmayalım. Eğer birbirinden farklı tipte değişken atarsak hata verecektir. Programın çıktısı şu şekilde olabilir.

Değer döndüren fonksiyonlardan bahsetmeden önce C kütüphanesinde hazır olan bir değer döndüren fonksiyonu deneyelim ve ardından bunun benzerini kendimiz yazalım. pow() fonksiyonu üs alma fonksiyonudur ve math.h kütüphane dosyasında bulunur. Eğer standart kütüphaneleri içeren bir derleyici kullanıyorsanız kullandığınız platform fark etmeksizin aynı fonksiyonları siz de kullanabilirsiniz. math.h başlık dosyasındaki diğer fonksiyonları konunun dağılmaması için buraya almayacağım. Öncelikle pow() fonksiyonunun referans yapısına bir bakalım.

double pow (double base, double exponent);

Burada pow fonksiyonunun iki adet double tipinde argüman aldığını ve yine double tipinde değer döndürdüğünü görüyoruz. Bu fonksiyonu kullanmadan önce referansından bu fonksiyon prototipine bakarız ve programımızda buna uygun değerleri yazarız. double base’den maksat taban, double exponent ise üs değeridir. Şimdi bu fonksiyonu kullandığımız bir programı yazıp deneyelim.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
	double n;
	double p;
    printf("Ussunu Almak istediginiz karakteri giriniz:");
    scanf("%lf", &n);
    printf("\nKac Us Alinacagini giriniz:");
    scanf("%lf", &p);
    double sonuc = pow(n,p);
	printf("\n Sonuc: %.0lf \n", sonuc);
system("PAUSE");
}

Öncelikle #include <math.h> diyerek matematik fonksiyonlarının olduğu kütüphane dosyasını çağırdık. Önceden aritmetik operatörleri anlatırken C dilinde matematik işlemlerinin sadece dört işlem ve mod almadan ibaret olduğunu görmüştünüz. Bu C diline mahsus bir özellik değildir aslında. Çoğu mikroişlemcinin komutlarına baktığımızda aritmetik işlemlerin dört işlemden ibaret olduğunu görürüz. Yani mikroişlemcilerde üs ya da karekök alacak bir komut yoktur. Böyle bir komutun olmaması bu işlemleri yapamayacağımız anlamına gelmez. Biz dört işlemi kullanarak programcılık yeteneği ile çok karmaşık matematik işlemlerini bile yaptırabiliriz. Burada da biz bir fonksiyon kullanarak üs alma işlemini yapıyoruz.

double n; ve double p; diyerek pow() fonksiyonuna gönderilecek iki argüman değişkeni tanımlamış olduk. Bunların double olmasının önemini önceden size anlattık. Fonksiyonun aldığı değerlerin tiplerine uygun değer atamamız gereklidir.

double sonuc = pow(n,p);

Burada öncelikle pow fonksiyonuna n ve p değişkenlerinin değeri aktarılır ve fonksiyon blokuna program akışı atlar. Burada n ve p değişkenleri pow() fonksiyonunun içinde farklı bir adda adlandırılabilir. Aradaki tek alaka bu değişkenlerinin değerinin fonksiyon değişkenine aktarılmasıdır. Fonksiyon argüman olarak aldığı değişkenler üzerinde doğrudan bir değişiklik yapamaz. pow fonksiyonu komutları işletip bize float tipinde değer verecektir. Bu değeri kullanabilmek için double sonuc adında bir değişken tanımladık. Bu değişkenin ilk değeri de pow fonksiyonundan dönen sonuç olacaktır.

Şimdi programın örnek bir çıktısını inceleyelim.

Biz burada sonuç değişkenini double değil de integer olarak tanımlasaydık sonuç ekranında 2500 yerine 2499 yazacaktı. Doğru değişken tanımlamanın önemini bir daha görmüş oluyoruz.

Şimdi kendi pow() fonksiyonumuzu yazalım. Bu pow fonksiyonu double değil int tipinde değer alacak. Bu yönden tam sayılar için üs alma fonksiyonu işini yapacak.

#include <stdio.h>
#include <stdlib.h>
int us_al (int taban, int us);
int main() {
	int n;
	int p;
    printf("Ussunu Almak istediginiz karakteri giriniz:");
    scanf("%i", &n);
    printf("\nKac Us Alinacagini giriniz:");
    scanf("%i", &p);
    int sonuc = us_al(n,p);
	printf("\n Sonuc: %i \n", sonuc);
system("PAUSE");
}


int us_al (int taban, int us)
{
    int sonuc=1;
    while ( us != 0)
    {
        sonuc *= taban;
        us--;
    }
    return sonuc;

}

Burada double değerleri ile yapsaydık aynı pow() fonksiyonunun yaptığı işi gerçekleştirebilirdik. Yine de C dilinin standart kütüphane fonksiyonları yerine sizin kendi fonksiyonunuzu yazmanız tavsiye edilmez. Çünkü o kütüphanelere eklenen fonksiyonlar olabildiğince optimize edilmiş fonksiyonlardır ve sizin onlardan daha iyi fonksiyon yazmanız pek mümkün değildir. Biz burada gösterme adına pow fonksiyonunun taklitini yaptık ve nasıl değer döndürdüğünü gösterdik.

Last updated