Академический Документы
Профессиональный Документы
Культура Документы
Fonksiyon Nedir ?
Bir amaca hizmet eden program paracklardr. Fonksiyon altrldnda, bir ilemi yerine getirmesi yada bir deer dndrmesi istenecektir. arlm olan bir fonksiyon ya geriye bir sonu deeri dndrr ve/veya fonksiyon ierisindeki operasyonlarn ilemlerini tamamlayp arlan yere geri dner. Dier programlama dillerinde metod, prosedr (yordam) v.b. isimlendirme ile adlandrlrlar. Programclar, programlarn yapaca ii fonksiyonlar vastasyla anlaml paralara blerek programlarnn modlerlik kazanmalarn salar.
Fonksiyon Trleri
Bildiiniz gibi, C++'da iki fonksiyon tr ile karlayoruz.
rnek: Program iinde C++'nn karakk alma sqrt() matematiksel fonksiyonu kullanmak istiyoruz. Bu fonksiyonun kullanlabilmesi iin, programn banda matematik kitapl programa #include <cmath> eklinde dahil edilme ve program ierisinde sqrt(sayi) eklinde fonksiyon arlmaldr.
<cmath> Ktphanesi
Kullanc Tanml Fonksiyonlarn Tanm ve Uygulamas Fonksiyonun Deklarasyonu (Function (Function Definitions) Definitions)
Bir fonksiyon main veya dier bir fonksiyon tarafndan kullanlmadan nce deklare edilmesi ve tanmlanmas gerekmektedir. Bu yap aada belirtildii biimde olacaktr. Her eyden nce bir fonksiyonun mutlaka bir ad olmaldr.
<dn deeri tipi> <fonksiyon ad/ismi> (<parametreleri>) { ...... return ... }
Fonksiyon deklerasyonu ve tanmlanmas iki farkl yoldan yaplabilir; (1) Fonksiyon arlmadan nce mutlaka ayr ayr fonksiyon deklarasyonu ve tanm yaplmaldr. (2) Fonksiyon arlmadan nce mutlaka fonksiyon deklarasyonu ve tanm birlikte yaplmaldr.
// 5.tip
cout <<"a="<<hesap1(a)<<endl; cout <<"b="<<hesap2(b)<<endl; cout <<"c="<<hesap3(a,e)<<endl; cout <<"c="<<hesap3()<<endl;//dikkat! cout <<"d="<<hesap4(a)<<endl; cout <<"e="<<hesap5(d)<<endl; return 0; }
Foksiyonlar return anahtar kelimesi araclyla deer dndrr ve program ak srasnda return anahtar kelimesine ulaldnda foksiyondan klr. rnein bir saynn karesini alan bir fonksiyon yazalm; kareal(int sayi) { return (sayi * sayi); } veya kareal(int sayi) { int k = sayi * sayi; return k; }
Eer geri dndrd deer tipi void ise, fonksiyondan bir deer dnmez ve return yazlmaz. Eer geri dndrd deer tipi void deilse, fonksiyonda en az bir tane return ifadesi olmaldr.
#include <iostream> using namespace std; void hesap(int); int main() { int a=3; hesap(a); cout <<a<<endl; return 0; } void hesap(int b) { b=33; }
#include <iostream> using namespace std; int hesap(int); int main() { int a=3; a=hesap(a); cout <<a<<endl; return 0; } int hesap(int b) { b=33; return b; }
Global Deikenler (:: Scope Resolution) :: operatr yardmyla Fonksiyonlar Arasnda Deer Tamak
Fonksiyonlar arasnda parametre geirerek veri aktarlmas ileminin nasl gerekletirilebildiini grdk. Benzer bir sonuca ulamak iin kresel deikenlerden de yararlanabiliriz. Kresel deikenleri dersimizin balarnda ele alarak incelemitik. Kresel deikenler, programn almas boyunca, fonksiyonlar dahil, deeri geerli olan deikenlerdir. Kresel deikenler fonksiyonlarn iinde deil, ondan nce tanmlanr. Bir kresel deiken tanmndan sonra yer alan tm fonksiyonlar iin bu deikenin deeri geerlidir.
Buradan u sonu kmaktadr; Fonksiyonlar deere gre arldnda, arlan fonksiyon iinde parametrenin deeri deitirilse bile bu deiiklik aran programda ayn isimli deikenin deerine etki yapmaz.
Referans (Bavuru) ile arma Bellek adreslerini kullanarak fonksiyonlar arabiliriz. Bu durumda, arlan fonksiyon iinde parametre deerleri zerinde yaplacak deiikliklerin, onu aran fonksiyon zerinde de etkili olduu grlecektir.
#include <iostream> using namespace std; void hesap(int*); int main() { int x=5; hesap(&x); cout <<x; return 0; } void hesap (int *p) { *p=55; } #include <iostream> using namespace std; void hesapla(int&, int&); int main() { int x=3,y=5; cout <<x<<" "<<y<<endl;// 3 5 hesapla(x,y); cout <<x<<" "<<y; //13 15 return 0; } void hesapla (int& x, int& y) { x=x+10; y=y+10; }
#include <iostream> using namespace std; void hesap(); int main () { int x=7; cout<< x <<endl; hesap(); cout<< x <<endl; return 0; } void hesap() { x=77; }
#include <iostream> using namespace std; int hesap(int); int main () { int x=7; cout<< x <<endl; x=hesap(x); cout<< x <<endl; return 0; } int hesap(int a) { a=77; return a; }
#include <iostream> using namespace std; void hesap(); int x=7; int main() { cout<< ::x <<endl; hesap(); cout<< ::x <<endl; return 0; }
#include <iostream> using namespace std; void hesap(int *); int main() { int x=7; cout<< x <<endl; hesap(&x); cout<< x <<endl; return 0; }
Aadaki rnek programda tarih datalar string ve tamsay olarak iki farkl ekilde kullanlmtr. Tarih isimli fonksiyon arlrken derleyici bu farkl tiplere gre tarih fonksiyonunu icra edecektir.
Fonksiyonlarn Ar Yklenmesi
Esnek Argmanl Fonksiyonlar #include <cstdarg> ktphanesi kullanlr. Esnek argmanlar oluturan kme ardk olarak listeye eklenmelidir. Bu trden argmanlar fonksiyonun parametre listesi ksmnda nokta ... ile belirtilir.
Aklama
Tip: ardk esnek argmalar iin tip belirleyici. macro: va_list tipinde bildirilmi a gstericisi iin bellekten n elemanl yer ayrr. macro: Veri tipi tip (int, double v.b.) ile belirlenmi kme elemanlarna eritirir. macro: va_list tipinde bildirilmi a gstericisi iin bellekten blgeyi boaltr.
...=
3,4,5,6
Burada deerler va_arg(a, tip) tip tanmna gre yaplr. rnein double olsayd 3.0, 4.0, 5.0, 6.0 eklinde tanmlanmaldr.
Polinom hesab : P(x,n) = a0 + a1x + a2x2 + ... + anxn ai (i = 0, 1, 2, ..., n) katsaylar esnek argman olarak bildirilmitir.