C’de Fonsiyonlar Aslı Ergün
FONKSİYON ANATOMİSİ Fonksiyon tipi(çıkış parametre türü) : int Fonksiyon adı: toplama Fonksiyon giriş parametreleri: a,b // basit parametreli fonksiyon ornegi1 #include <stdio.h> int toplama (int a, int b) { int r; r=a+b; return (r); } int main () int z; z = toplama (5,3); printf(‘’%d’’, z); return 0;
Fonksiyonlar ve Kullanımı // void fonksiyon ornegi (Basit, deger dondurmez) , c++ kutuphaneli #include <iostream> using namespace std; void mesajyaz () { cout << "Ben bir fonksiyonum !"; } int main () mesajyaz (); return 0; // void fonksiyon ornegi (Basit, deger dondurmez) , standard c kutuphaneli #include <stdio.h>; void mesajyaz () { printf("Ben bir fonksiyonum !\n"); } int main () mesajyaz (); return 0;
Basit parametreli fonksiyon ornegi Ana progran içinden değişkenler içinde gönderilen değerler, fonksiyon değişkenlerine kopyalanıp işlem yapılır. Fonksiyon dönüş parametreleri ana programda yazdırılır. #include <iostream> using namespace std; int toplama (int a, int b){ int r; r=a+b; return (r); } int main (){ int z; z = toplama (5,3); cout << "Sonuc = " << z; return 0;
Fonksiyon Değer Kopyalanması main() veri alanı toplam() veri alanı i a kopyalandı 12 12 j b kopyalandı 25 25 k c kopyalandı 45 45
Değer ve Referansla Çağırma main() veri alanı toplam() veri alanı Değer i Değişkenin Kopyası a 12 12 main() veri alanı toplam() veri alanı Referans &i Değişkenin Kendisi &i 12 12
// referans adresiyle parameter donduren fonksiyon ornegi #include <iostream> using namespace std; void ikikat (int& a, int& b, int& c) { a*=2; b*=2; c*=2; } int main () { int x=1, y=3, z=7; ikikat (x, y, z); cout << "x=" << x << ", y=" << y << ", z=" << z; return 0; }
// karisik parametreli fonksiyon ornegi #include <iostream> using namespace std; void oncesonra (int x, int& prev, int& next) { prev = x-1; next = x+1; } int main () { int x=100, y, z; oncesonra (x, y, z); cout << "Previous=" << y << ", Next=" << z; return 0; }
FONKSİYONLAR GERİ DÖNÜŞ DEĞERİ Örnekler: return (a+b/c); /* parantez kullanmak zorunlu değil */ return 10; /* değişken kullanmak mecbur değil */ return topla(a, b)/2.0; /* önce topla fonksiyonu çalışır */ Programın çözüm mantığına göre bir fonksiyon içerisinde birden çok geri dönüş değeri kullanılabilir. Fakat, ilk karşılaşılan "return" deyiminden sonra fonksiyon sonlanır ve çağrılan yere bu değer gönderilir.
FONKSİYON ÖRNEKLERİ
FONKSİYON PROTOTİPİ KULLANMA Bir fonksiyon prototipi, derleyiciye fonksiyon tarafından döndürülen verinin tipini, fonksiyonun almayı beklediği parametre sayısını, parametrelerin tiplerini ve parametrelerin sırasını bildirir.
fonksiyon prototipi tanimlama #include <iostream> using namespace std; void tek (int a); void cift (int a); int main () { int i; do { cout << "Bir sayi girin (Cıkıs icin 0 girin): "; cin >> i; tek (i); } while (i!=0); return 0; } void odd (int a) { if ((a%2)!=0) cout << "Sayi tektir.\n"; else cift (a); void cift (int a) if ((a%2)==0) cout << "Sayi cifttir.\n"; else tek (a);
// fonksiyonlarda parameter olarak array(dizi) kullanimi #include <iostream> using namespace std; void diziyaz (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } int main () { int ilkdizi[] = {5, 10, 15}; int ikincidizi[] = {2, 4, 6, 8, 10}; diziyaz (ilkdizi,3); diziyaz (ikincidizi,5); return 0; }
String Kütüphaneleri string cumleler[4]; for(int i=0; i<4; i++) cin >> cumleler[i]; for(int i=0; i<4; i++) cout << cumleler[i] + '\n'; char str1[11] = "Eve gel!"; char str2[] = "Para gonder!"; char str3[] = {'O', 'K', '\0'}; if (strcmp(str1, str2) < 0) cout << "str1 once yer alır."; if (strcmp(str1, str2) == 0) cout << "Kelimeler esittir."; if (strcmp(str1, str2) > 0) cout << "str2 once yer alır."; string klm1,klm2; if (klm1 < klm2) cout << "klm1 once yer alır."; if (klm1 == klm2) cout << "Kelimeler esittir."; if (klm1 > klm2) cout << "str2 once yer alır."; return 0; } #include <iostream> #include <string> using namespace std; #include <string.h> int main () { char kelime[20]; char kelime2[20]; printf("kelimeler girin"); // gets(kelime); // puts(kelime); // scanf("%s",kelime); // printf("%s",kelime); char hedef[9]; char baslangic[]="yazilar"; strcpy(hedef,baslangic); //string kelime3; //cin >> kelime3; string cumle; getline(cin,cumle); //cumle3 = "merhaba"; //cout << kelime3 + " ogrenci";
MATEMATİK FONKSİYONLARI Temel matematik işlemleri matematik operatörleriyle gerçekleştirebiliyoruz. Karekök alma, trigonometrik hesaplamalar gibi işlemler için matematik kütüphanesi fonksiyonlarını kullanabiliriz. #include <math.h> ile kütüphane dahil edilir. Matematik kütüphanesi fonksiyonlarından belli başlıcaları aşağıda sıralanmıştır. double cos (double __x) // returns cosine of x double fabs (double __x) // absolute value of a float double fmod (double __x, double __y) // floating point modulo double sin (double __x) // returns sine of x double sqrt (double __x) // returns square root of x double tan (double __x) // returns tangent of x double exp (double __x) // function returns the exponential value of x. double atan (double __x) // arc tangent of x double atan2 (double __y, double __x) // arc tangent of y/x double log (double __x) // natural logarithm of x double log10 (double __x) // logarithm of x to base 10. double pow (double __x, double __y) // x to power of y double square (double __x) // square of x double min (double __x, double __y) // min of x to and y double max (double __x, double __y) // max of x to and y
MATEMATİK FONKSİYONLARI ORNEKLER Val = min(Val, 100); // Val değeri ile 100 sayısını karşılaştırır hangisi // küçükse Val Değerine atama yapar. // Sonuç Hiç bir zaman 100 değerinden büyük olamaz. Val = max(Val, 20); // Val değeri ile 20 sayısını karşılaştırır. hangisi büyükse // Val Değerine atama yapar. // Sonuç hiç bir zaman 20 değerinden küçük olamaz. abs(a); // a değişkeninin mutlak değerini hesaplar. a++; // Sonra a’ nın değerini “1” artır. sqrt(val); // Sayının karekökünü hesaplar. Dönen değer Double sayı // tipindedir.