FONKSİYONLAR (FUNCTIONS) M.İlkuçar MAKU-MYO 2014 1 FONKSİYONLAR (FUNCTIONS) Fonksiyon : Belirli bir işi yapan programın bir isim altına tanımlanarak, o isimle çağrılarak kullanılması. Fonksiyonun faydaları : Programın modülerliğini arttırır. Aynı işi yapan program parçası tekrar tekrar yazılmaz. Fonksiyon farklı programlama dillerinde yazılabilir. Fraklı dillerde kullanılabilir. Program iş parçalarını bölünerek birden çok kişi aynı program üzerinde çalışabilir. Fonksiyon program içerisinde gerektiği zaman kullanılır, gerekmedikçe kullanılmaz. M.İlkuçar MAKU-MYO 2014 2 Main( ) Ana fonksiyon { İş parçası- 1 İş parçası -2 void Main ( ) { …… İş parçası-1 ( ) ; ….. İş parçası-2 ( ) ; ……. } void İş parçası-1 ( ) { …… } void İş parçası-2( ) { ……. } } Ana fonksiyon sonu M.İlkuçar MAKU-MYO 2014 3 FONKSİYONLAR (FUNCTIONS) fonksiyon Hazır Kullanıcı Tanımlı Aritmetik void fonksiyonlar Değen döndüren fonk String Overloading Recursive M.İlkuçar MAKU-MYO 2014 4 FONKSİYONLAR (FUNCTIONS) Bir fonksiyonun genel yapısı : Erişim_izni static veri_tipi { ……. fonksiyon_adi ( parametreler ) Fonksiyon gövdesi } Public Protected Erişim izinleri : public , protected , private Private Not: Erişim izini olarak hiçbir şey yazılmaz ise default(varsayılan) değeri protect M.İlkuçar MAKU-MYO 2014 5 FONKSİYONLAR (FUNCTIONS) Fonksiyon nereye yazılmalıdır ? public class JavaApplication1 { Fonksiyonlar, bu alana yazılabilir public static void Main ( String[ ] args) // Temel (ana ) fonksiyon { …. } Fonksiyonlar, bu alana da yazılabilir } M.İlkuçar MAKU-MYO 2014 6 FONKSİYONLAR (FUNCTIONS) void (tipi olmayan) fonksiyonlar public static void fonksiyon_adi ( parametreler) { … … … } M.İlkuçar MAKU-MYO 2014 7 FONKSİYONLAR (FUNCTIONS) public static void MesajYaz ( ) { System.out.print ( «Çıkmak için Bir tuşa basınız» ); } Kullanımı: MesajYaz( ); public static void MesajYaz ( String msg) { System.out.print ( msg ); } Kullanımı: MesajYaz( « merhaba»); String s=«merhaba» ; MesajYaz( s ); M.İlkuçar MAKU-MYO 2014 8 FONKSİYONLAR (FUNCTIONS) public class Program { // kullanıcı tanımlı fonksiyon public static void MesajYaz ( String msg) { System.out.print( msg ); } // Temel (ana ) fonksiyon public static void Main ( String[ ] args) { MesajYaz (“ Bugün Hava Çok Güzel ”); } } M.İlkuçar MAKU-MYO 2014 9 FONKSİYONLAR (FUNCTIONS) void tipli parametresiz fonksiyonlar. public class Program { public static void topla ( int x , int y) { int z = x + y; System.out.print (“ Toplam : ” + z ); } public static void Main ( String[ ] args) { topla ( 5, 7 ) ; // viod fonksiyonun çağırılması int a= 4 ; int b= 7; topla ( a, b ); // viod fonksiyonun çağırılması } } M.İlkuçar MAKU-MYO 2014 10 FONKSİYONLAR (FUNCTIONS) public class Program { // kullanıcı tanımlı fonksiyon buplic static void Sayac ( ) { for( int x=1 ; x<= 5 ; x++) System.out.println( x ); } // Temel (ana ) fonksiyon public static void Main ( String[ ] args) { Sayac( ); } } M.İlkuçar MAKU-MYO 2014 11 FONKSİYONLAR (FUNCTIONS) public class Program { // kullanıcı tanımlı fonksiyon public static void Sayac ( int k ) { for( int x=1 ; x<= k ; x++) System.out.println( x ); } // Temel (ana ) fonksiyon public static void Main ( String[ ] args) { Sayac( 5 ) ; int a=6; Sayac( a ); } } M.İlkuçar MAKU-MYO 2014 12 FONKSİYONLAR (FUNCTIONS) Değer döndüren fonksiyonlar Public static veritipi FonksiyonAdı ( parametreler) { … … return (döndüreleck değer) ; } M.İlkuçar MAKU-MYO 2014 13 FONKSİYONLAR (FUNCTIONS) değer döndüren fonksiyonlar. public class Program { public static int Ekle ( int x) { return ( x+6 ); } public static void Main( String[] args) { int sonuc = Ekle( 7 ) ; // 13 System.out.print ( sonuc ); // 13 System.out.print ( Ekle( 3 ) ); // 9 } } M.İlkuçar MAKU-MYO 2014 14 FONKSİYONLAR (FUNCTIONS) değer döndüren fonksiyonlar. public static int topla ( int x, int y) { int z = x + y; return z; } public static void main ( String[] args) { int a= 5, b= 9; int sonuc = topla (3 , 5); System.out.print ( topla (a,b) ); if ( topla (4,9) > 13 ) System.out.print (“A”); System.out.print ( topla (3.15 , 9) ); // YANLIŞ KULLANIM parametre veri tipleri uyuşmuyor topla (7,9) ; // YANLIŞ KULLANIM hata vermez ama sonuç bir yerde kullanılmıyor } M.İlkuçar MAKU-MYO 2014 15 FONKSİYONLAR (FUNCTIONS) değer döndüren fonksiyonlar. public static int fakt ( int x ) { int f=1; if( x==0 || x==1 ) return 1; for ( int m=1 ; m<= x ; m++ ) f = f * m ; return f; } public static void main ( String [] args) { int a= 4; int sonuc = fakt(a); System.out.print ( fakt (5) ); } M.İlkuçar MAKU-MYO 2014 16 FONKSİYONLAR (FUNCTIONS) public static int[] Sirala(int [] x) { public static int[] DiziYap(int x) { int [] d= new int [x]; int [] d=x; for(int i=0; i<d.length; i++) for (int i = 0; i <d.length; i++) { for (int j = i; j <d.length; j++) { d[i]=(int)(Math.random()*100); if(d[i]>d[j]) { return d; int temp=d[i]; } d[i]=d[j]; public static void Yazdir(int [] x) { d[j]=temp; for(int a:x) System.out.print(" "+ a); } } } } public static void main(String[] args) { return d; int []a= DiziYap(10); Yazdir(a); } Sirala(a); System.out.println(""); Yazdir(a); } M.İlkuçar MAKU-MYO 2014 17 FONKSİYONLAR (FUNCTIONS) Overloading Functions Aşırı yüklenmiş Fonksiyon M.İlkuçar MAKU-MYO 2014 18 11- FONKSİYONLAR (FUNCTIONS) Overloading Functions ( Aşırı yüklenmiş Fonksiyon) : İsimleri aynı, parametrelerinin sayısı veya veri tipi farklı olan fonksiyonlar System.out.print ( ); System.out.print( 2 ); System.out.print( 3.14 ); System.out.print(“ MAKÜ meslek yüksekokulu ” ); System.out.print( ‘A’ ); System.out.print(“ Sonuç: ” + (6+8) ); M.İlkuçar MAKU-MYO 2014 19 FONKSİYONLAR (FUNCTIONS) Overloading – Aşırı yüklenmiş Fonksiyon: İsimleri aynı, parametrelerinin sayısı veya veri tipi farklı olan fonksiyonlar static float carp ( int x , int y) { return ( x * y); } static float carp ( int x , float y) { return ( x * y); } static float carp ( float x , int y) { return ( x * y); } static float carp ( float x , float y) { return ( x * y); } System.out.print ( System.out.print ( System.out.print ( System.out.print ( carp (4 , 6) ); carp (3.5 , 2) ); carp (4 , 2.5) ); carp (2.5 , 3.14) ); M.İlkuçar MAKU-MYO 2010 20 Overloading – Aşırı yüklenmiş Fonksiyon: isimleri aynı parametreleri farklı olan fonksiyonlar class Program { static void F1(int x) // Tek parametreli { x = 12; System.out.print (x + “ int dir"); } static void F1(int x, int y) //İki parametreli { System.out.print (x + " ve " + y + “ int dir"); } //temel fonksiyon static void Main() { int a = 12; int b = 12; int c = 12; F1 (a); // tek parametreli F1 (b, c); // iki parametreli } } M.İlkuçar MAKU-MYO 2014 21 FONKSİYONLAR (FUNCTIONS) Recursiv Functions Öz Yinelemeli Fonksiyon (Kendi kendini çağıran fonksiyonlar) M.İlkuçar MAKU-MYO 2014 22 Recursive (öz yinelemeli) Kendi kendini çağıran class Program { static void Yaz ( int x ) { if (x > 5) return; // Base şarta bağlı fonksiyondan çıkar else { System.out.ptintln ( x ); Yaz (x + 1); // Call myself (kendini çağırır) } } Çıktı: 1 2 3 4 5 static void Main() { Yaz (1 ) ; // fonksiyonun çağrılması } } M.İlkuçar MAKU-MYO 2014 23 FONKSİYONLAR (FUNCTIONS) Recursive – Özyinelemeli Fonksiyon x=24 public static float fakt ( int x) { float f = 1; if (x>1) f = x * fakt ( x - 1); return f ; } public static void Main ( ) { x =fakt(4) f=4*6 ->24 f = 4 * fakt(4 -1) f = 3 * fakt(3 -1) f=3*2 ->6 f = 2 * fakt(2 -1) f=2*1 ->2 Geri dönüş noktası çağırma f=1 f=fakt(1) Geriye doğru işleme float x = fakt( 4 ); System.out.print ln (x); } M.İlkuçar MAKU-MYO 2014 24 FONKSİYONLAR (FUNCTIONS) Fibonecci Sayıları: public static int fibonecci(int n){ if(n<=0) return 0; if(n==1) return 1; return fibonecci(n-1) + fibonecci(n-2); } public static void main (String [] args ) { int x = 8; System.out.println( x + »Fibonecci:» + fibonecci(x)); } Kaynak: 2140101 Computer Programming for International Engineers INTERNATIONAL SCHOOL OF ENGINEERING CHULALONGKORN UNIVERSITY 25 FONKSİYONLAR (FUNCTIONS) Örnek: Recursive – Özyinelemeli Fonksiyon ile üs alma işlemi public static float uslama ( int taban, int us) { float f = 1; if (us==0) f=1; else f = taban * usalama ( taban, us - 1); return f ; } public static void main (String [] args ) { float x = usalama( 2,3 ); System.out.println(« 2 üssü 3 =« + x); } M.İlkuçar MAKU-MYO 2014 26 FONKSİYONLAR (FUNCTIONS) Global ve Local Variables Genel ve Yerel Değişkenler Global (Genel) : Programın tümünde geçerli olan değişkenlerdir Local(Yerel) : Sadece tanımlandığı fonksiyon içerisinde geçerli olan değişkenlerdir. M.İlkuçar MAKU-MYO 2014 27 FONKSİYONLAR (FUNCTIONS) Genel (Global) ve yerel (local) değişkenler. class Program { static int a = 2; // GENEL programın tümünde kullanılabilir static void test( ) { int x=5; // yerel sadece bu fonksiyon içerisinde geçerli System.out.ptintln(a); a=8; } static void main( String [] args) { int x=10; // yerel sadece bu fonksiyon içerisinde geçerli test(); System.out.ptintln (a); a=17; } a=9; } M.İlkuçar MAKU-MYO 2014 28 FONKSİYONLAR (FUNCTIONS) Genel (Global) ve yerel (local) değişkenler. class Program { static int g ; // genel static int topla ( int x , int y) { int z = 1; // yerel z = x+ y; g = z; return z; } static void main(String[] args) { int a=4, b=6; // yerel System.out.ptintln ( topla ( a, b) ); System.out.ptintln ( g ); } } M.İlkuçar MAKU-MYO 2010 29 FONKSİYONLAR (FUNCTIONS) Genel (Global) ve yerel (local) değişken isimleri aynı ise; Genel değişkeni ayırt etmek için nesneismi.genel_değişken (ORNEK.x) şeklinde ayırılır. public class ORNEK { static int x =8 ; // genel static void islem ( ) int x=5; ORNEK.x= x ; } static void main(String[] args) { System.out.ptintln ( x ); // 8 islem(); System.out.ptintln ( x ); // 5 } } M.İlkuçar MAKU-MYO 2010 30 FONKSİYONLAR (FUNCTIONS) Çeşitli Örnekler M.İlkuçar MAKU-MYO 2014 31 FONKSİYONLAR (FUNCTIONS) M.İlkuçar MAKU-MYO 2014 32 FONKSİYONLAR (FUNCTIONS) recursive yöntemiyle İterasyon yöntemiyle static float oklit ( int x, int y) { while (x != y ) { static float oklit ( int x, int y) { if (x == y ) return x; // base if(x>y) x = x-y; if(x>y) return oklit (x-y , y); else y = y-x ; } else return oklit (x , y-x ); } return x; } static void Main ( ) { static void main ( String [] args ) { float sonuc = oklit( 7,2 ); System.out.ptintln (oklit( 7,2) ); float sonuc = oklit ( 7 , 2 ); System.out.ptintln ( oklit ( 7 , 2) ); } } Sonuç: 1.0 dır M.İlkuçar MAKU-MYO 2014 33 FONKSİYONLAR (FUNCTIONS) Parametresi Dizi(array) olan fonksiyonlar : class Program { static void DiziYaz(int[] d) { for(int tmp : d) System.out.println(tmp); } static void main(String [] atgs) { int[] z = { 4,7,3,6 }; DiziYaz(z); } } M.İlkuçar MAKU-MYO 2014 34 FONKSİYONLAR (FUNCTIONS) Parametresi Dizi(array) olan fonksiyonlar : static double topla( int [] d ) { double top = 0; for(int i = 0; i < d.Length; i++) top += d [ i ]; return top ; } static void main(string [] args) { int [] x = {3,9,4,2,7}; System.out.ptintln( topla( x ) ); } M.İlkuçar MAKU-MYO 2010 35 Parametresi Dizi(array) olan fonksiyonlar : class Program { static void DiziYaz( int[,] D ) { for (int sat=0; sat<D.length; sat++) { for(int sut=0; sut <D[sat].length ; sut ++) { System.out.ptint(“ ” + D[ sat, sut] ); } System.out.ptintln(); } } static void main( String [] args) { int[,] z = { {4, 5}, {2, 6}, {9, 3}, {7, 1} }; DiziYaz(z); } } M.İlkuçar MAKU-MYO 2010 Çıktı: 4 5 2 6 9 3 7 1 36 FONKSİYONLAR (FUNCTIONS) Geri dönüş değeri Dizi(Array) olan fonksiyon : static int [ ] dizi_olustur ( int adet ) { Random r = new Random(); int [ ] d= new int [adet]; for ( int i=0 ; i< adet ; i ++ ) d [i] = (int) (Math.random() *100); return d ; } static void main(String[] args) { int say = 5 ); int [ ] D = dizi_olustur ( say ) ; for ( int k : D ) System.out.ptint (" " + k ); } M.İlkuçar MAKU-MYO 2010 37 1 FONKSİYONLAR (FUNCTIONS) Örn: y =1 + x + x2 + x3 + …. +xn hesaplayıp yazdıran programı yazınız ? denkleminde klavyeden girilecek x ve n değeri için y değerini static int usal ( int x, int y ) { int top =1; for ( int i=1 ; i<= y ; i ++ ) top *= x; ; return top ; } static void main( String[] args) { Scanner oku= new Scanner (System.in); int x = oku.nextInt(); int n =oku.nextInt(); int y=0; for (int i = 0; i <= n; i++) y += usal (x, i); System.out.ptintf("\n x:%d , n:%d , y:%d", x, n, y ); } M.İlkuçar MAKU-MYO 2014 38 FONKSİYONLAR (FUNCTIONS) Örn: y =1 - x + x2 /2! - x3 /3!+ …. + xn /n! klavyeden girilecek x ve n değeri için y değerini hesaplayıp yazdıran programı yazınız ? static int fakt ( int x ) { int f =1; for ( int i=1 ; i<= x ; i ++ ) return f ; } static int usal ( int x, int y ) { int top =1; for ( int i=1 ; i<= y ; i ++ ) return top ; } f *= i ; top *= x; ; static void Main(string[] args) { Scanner oku= new Scanner (System.in); int x = oku.nextInt(); int n = oku.nextInt(); int y=0; for (int i = 0; i <= n; i++) { if( i%2== 0) y += (usal (x, i) / fakt(i) ); else y -= (usal (x, i) / fakt(i) ); } System.out.ptintf("\n x:%d , n:%d , y:%d", x, n, y ); } M.İlkuçar MAKU-MYO 2014 39 FONKSİYONLAR (FUNCTIONS) Dizinin, bir fonksiyonun geri dönüş tipi olarak kullanılması : static double [ ] sirala ( double [ ] d ) { for(int i = 0; i < d.Length-1; i++) { for(int k = i+1; k < d.Length; k++) { if(d[i] > d[k] ) { public static void yazdir(int[][] x) int temp= d[i]; { d [i]= d[k]; for (int sat = 0; sat < x.length; sat++) { d[k]=temp; } for (int sut = 0; sut < x[sat].length; sut++) { } System.out.print(" "+x[sat][sut]); } } t += d [ i ]; System.out.println(); return t ; } } } void main (String [ ] args) { int [ ] x = { 3,9,4,2,7 } ; yazdir ( x ) ; x= sirala ( x); yazdir ( x ) ; } M.İlkuçar MAKU-MYO 2014 40