27 MART 2017
PERŞEMBE
16.55
C++ Fonksiyonlar

Fonksiyonlar her yazılım dilinde aynı işlevle kullanılırlar. Amaçları belirlenen bir kural dizinine farklı bir noktadan erişebilmektir. Örneğin programımızın başlangıcında bir toplama işleminin yapılması için belirlediğimiz fonksiyonumuzu programımızın hemen her alanında rahatlıkla çağırabilir ve toplama işlemini yaptırabiliriz. Bu örnekte yer alan toplama işlemi basit bir işlemden oluştuğu için belki aklınızda canlanması zorlanmıştır. Bu sebeple konumuzun devamın birkaç örneğe yer vereceğiz.

 

Fonksiyonlar

Programın herhangi bir noktasından çağırılabilen kod bloklarıdır. C++'ta bu kod blogu 4 farklı alana parçalanabilir. Bu 4 farklı alanla ilgili ilk verilen örnekleri lütfen göz ardı edelim. Detaylar konunun devamında gelmektedir.

1. void fonksiyonAdi()

void kelimesi anlam olarak boş demektir. Programlama dillerinde ise tipsiz, tipi belirtilmemiş olarak aktarılabilir. Burada kastedilen ise fonksiyonun herhangi bir veri tipine sahip olmadığıdır. (Veri tiplerine şuradaki konumuzdan ulaşabiliriz)

void toplama(){
	cout << 5+3;
}

int main() {
	toplama();	
}

2. veri tipi fonksiyonAdi()

Veri tipi belirlenmiş olan fonksiyonlarımız aslında int, double gibi bir veri tipine sahip olan fonksiyonlarımızdır. Birinci fonksiyonumuzun tersine burada işin içine return komutu girmektedir. Örneğimize göz gezdirelim.

int toplama(){
	return 5+3;
}

int main() {
	cout << toplama();	
}

3. void fonksiyonAdi(PARAMETRE)

1. yapımızla aynı işleve sahip fakat parametreyi içinde bulunduran fonksiyonlardır. Yine örneğimize baktığımızda anlayacağımız üzere parantez içerisinde tanımladığımız değişkenlerimize program içerisinde müdahele ederek sonucu değiştiriyoruz.

void toplama(int a, int b){
	cout << a+b;
}

int main() {
	toplama(5,3);	
}

4. veri tipi fonksiyonAdi(PARAMETRE)

2. yapımızla aynı işleve sahip fakat parametreyi içinde bulunduran fonksiyonlardır. 3. örneğimizde olduğu gibi parametreye bağlı olarak sonucu iletmektedir.

int toplama(int a, int b){
	return a+b;
}

int main() {
	cout << toplama(5,3);	
}

4 ÖRNEĞİMİZİNDE SONUCU 5+3 = 8 OLMAKTADIR.
NEDEN 4 FARKLI SEÇENEK SUNULUYOR?

Fonksiyonlar bir programın en temel yapı taşlarıdır diyebiliriz. Hemen her işlev bir fonksiyona atanır ve bu fonksiyonlar programın gerekli yerlerinde çağırılarak çalıştırılırlar. Genel anlamda bakıldığında 4 farklı fonksiyon tipi olduğunu görürüz. Temele indirgediğimizde 2 ana başlıkta toplayabiliriz: void ve veri tipi!

Burada sormamız gereken soru "void mi tercih edeceğiz yoksa veri tipi belirtip mi işlem yapacağız?" olmalıdır. void temelde bir veri tipi olarak adlandırılabilir lakin aslında bir veri tutucudur. Yani verilen bilgiler doğrultusunda işlem yapmayı sever. Şimdi birkaç örnek üretelim ve neden hangisini tercih ettiğimize göz atalım;

1- Bir mükemmel sayı bulma uygulaması düşünün (buradan göz atabilirsiniz). Bu uygulama esnasında kullanıcıdan bir veri alıyoruz ve bu veriye göre işlemlerimizi gerçekleştiriyoruz. Lakin bunu programın yalnızca bir alanında ve kullanıcı istediği müddetçe gerçekleştirtebiliriz. Yani illa program çalıştığında veya yalnızca o alana gelindiğinde kullanıcıdan bir sayı girip, girdiği sayının mükemmel sayı mı yoksa değil mi olduğunu öğrenmemiz mantıksız olabilir. Bu sebeple fonksiyonu çağırdığımız her yerde kullanıcıdan bir sayı alarak tekrar aynı işlemleri gerçekleştirebiliriz. Üstelik aynı kodları tekrar tekrar yazmamıza gerek kalmadan.

2- Minik işlemler için sonuç odaklı hazırlayacağımız programlarımızda fonksiyonlardan yardım alabiliriz. Örneğin basit bir matematik programı hazırlayıp program içerisinde kullanıcının tıkladığı bir buton ile fonksiyonları çağırabiliriz. Yani kullanıcı toplama butonuna tıklar ve ondan iki sayı girmesini isteyebiliriz. Sonucunda toplama butonuna tıkladığı için devamında gelen tüm işlemler toplama fonksiyonu içerisinde tanımlanmış olacağından karışıklık önlenmiş olur.

3- Bir dilde yazılan hemen her şey birer fonksiyondur. Basit olarak nitelendirdiğimiz ve kütüphanesini ekledikten sonra kullanabildiğimiz pow(), sin(), sqrt() veya ceil() temelde birer fonksiyondur. Kendi içlerinde döngülerden değişkenlere kadar bir çok içeriği barındırırlar fakat biz yalnızca bir sqrt() yazarak sonuca ulaşabiliriz.

Gelelim hangi türü seçeceğimize;

Aslında basit matematik işlemleri için veri tipi girip devamında fonksiyonu oluşturmamız mantıklıdır. Bunun aksine void tipini kullanarakta rahat bir kullanım alanına sahip oluruz. Şimdi aşağıdaki görseli dikkatlice inceleyelim ve bu 4 fonksiyonumuzda dikkat etmemiz gereken alanlara göz atalım;

ÖRNEK

Kullanıcıdan bir üçgenin iki kenarının uzunluklarını alarak hipotenüsünün uzunluğunu bulan bir program yazın. (math.h kütüphanesini kullanabilirsiniz. Fonksiyon ile yazın)

ÇÖZÜM

#include <iostream>
#include <math.h>
using namespace std;

double hipotenus(double a, double b){
	double fsonuc = sqrt((a*a)+(b*b));
	return fsonuc;
}

int main() {
	double x,y;
	cout << "Birinci Kenar Uzunlugu: ";
	cin >> x;
	cout << "Ikinci Kenar Uzunlugu: ";
	cin >> y;
	cout << "Hipotenus: ";
	cout << hipotenus(x,y);
	
	cout << "\n\n"; // Program yeniden çalıştırıldığında alt satıra inmiş olsun
	return main(); // Program yeniden çalıştırılsın
}

ÖRNEK

Kullanıcıdan alınan bir sayının tek ya da çift olduğunu kontrol eden programı yazın.

ÇÖZÜM

#include <iostream>
#include <string>
using namespace std;

void tekCift(int a){
	string sonuc;
	if(a%2==0) {
		sonuc = "Sayi cifttir";
	} else {
		sonuc = "Sayi tektir";
	}
	cout << sonuc;
}

int main() {
	int sayi;
	cout << "Bir sayi girin: ";
		cin >> sayi;
	
	tekCift(sayi);
	
	cout << "\n\n"; // Program yeniden çalıştırıldığında alt satıra inmiş olsun
	return main(); // Program yeniden çalıştırılsın
}

YORUMLAR 5
1
Habib ALPASLANOĞULLARI
07 ARALIK 2019 - 22.26
Elinize sağlık çok güzel bir anlatım olmuş teşekkürler...
CEVAPLA
0
Mert TOPUZ
08 ARALIK 2019 - 00.03
Değerli düşüncelerinizi paylaştığınız için teşekkürler :)
3
Mert Topuz
08 NİSAN 2017 - 22.49
@Mehmet Emin Ateş, işine yaramasına çok sevindim hocam, kolay gelsin :)
CEVAPLA
2
Mehmet Emin Ateş
08 NİSAN 2017 - 22.18
Örnekler için teşekkürler.Gerçekten çok işime yarıycaklar :)
CEVAPLA
2
Mert Topuz
08 NİSAN 2017 - 18.59
@Gökhan Kara hocam teşekkürler. Elimden geldiğince farklı örneklerle yayına devam edeceğim :)
CEVAPLA
2
Gökhan Kara
08 NİSAN 2017 - 18.52
Örnekleri çok güzel vermişsiniz. Elinize sağlık ilgili kişiler için örnekli uygulamalar çok yararlı oluyor.
CEVAPLA
YORUM BIRAK
Şuanda bu yoruma cevap yazıyorsunuz:
İptal Et