5. Fonksiyon Dosyası Oluşturma 5.1. Fonksiyon Dosyası Matlab fonksiyonları (örneğin, sin, sqrt, disp vb.) kullanıcının bir başka programa gerek duymaksızın temel işlemleri kolayca yapabilmesini sağlar. Kullanıcılar kendi fonksiyonlarını geliştirebilirler. Fonksiyonlar, bir m-dosyası biçiminde saklanır ve bu dosyalara, fonksiyon dosyaları adı verilir. Fonksiyon oluşturmanın iki önemli getirisi vardır: - Sürekli olarak uygulanan bir işlem için kod tekrarını önler (örneğin, açıklık açısı için yazılmış bir fonksiyon aciklik ise, programın ilgili yerinde “aciklik(X1,Y1,X2,Y2)” fonksiyonu (1-2) veya (2-1) aciklik acisini doğrudan üretecektir. - Fonksiyonlarda kullanılan değişkenler yereldir (local variables). Yani workspace içinde diğer program türlerinin değişkenleri (global variables) gibi yer işgal etmezler. Fonksiyon dosyları function ismi ile başlar ve end ile sonlanır. Fonksiyon dosyalarının genel biçimi şu şekildedir: function cikti=fonk_ismi(girdi) komut_1; komut_2; … komut_n; end Örnek: Girdi olarak verilen bir sayıya kadar olan bütün sayıları toplayan bir fonksiyon yazınız. function t=topla(N) t=0; for i=1:N t=t+i; end; end Örnek : Girdi olarak verilen bir sayının faktörüyelini bulan bir fonksiyon yazınız function c=fakt(N) c=1; for i=1:N c=c*i; end end Örnek: Koordinatları bilinen iki nokta arasındaki yatay uzunluğu hesaplayan kenar isimli bir fonksiyon oluşturunuz. function s=kenar(X1,Y1,X2,Y2) dx=X2-X1; dy=Y2-Y1; s=sqrt(dx^2+dy^2); end 27 Bir fonksiyonun geri dönüş değeri birden fazla olabilir bu durumda çıktı kısmı köşeli parantez ile belirtilip beklenen çıktılar bu parantezler içine yazılmalıdır. function [cikti1, cikti2]=fonk_ismi(girdi) komut_1; komut_2; … komut_n; end Örnek: bir vektör içerisinde en büyük ve en küçük sayıları tespt eden bir fonksiyon yazınız function [enb, enk]=makmin(A) enb=max(A); enk=min(A); end 5.2. Kendi Kendini Çağıran (Özyinelemeli - Rekürsif) Fonksiyonlar Kendi kendisini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyinelemeli (recursive) fonksiyonlar adı verilir. Özyineleme bir problemi benzer şekilde olan daha küçük parçalara bölünerek çözülmesini sağlayan bir tekniktir. Genel yazımı: if (durdurma durumu sağlandıysa) çözümü yap else problemi özyineleme kullanarak indirge Örneğin, bir n sayısının faktöriyeli şu şekildedir: n! = 1 * 2 * 3 * … * ( n – 1 ) * n Faktoriyel işlemini özyineli tanımlamak için küçük sayıların faktöriyeli şeklinde tanımlamak gerekir. n! = n * ( n – 1 ) ! Sayının faktöriyeli bulunurken; Durdurma durumu 0! = 1 olarak alınır. Her çağırmada n değeri bir azaltılarak durdurma durumuna ulaşılır. Özyineli tanımlama: n! = 1 if n = 0 n! = n * ( n – 1 )! if n > 0 Aşağıdaki kod çalıştığında n sayısının faktöriyel değerini hesaplar. function f=fakt(n) if ( n == 1 ) f= 1; else f=f* fakt(n-1); end end 28 Örnek : Fibonacci dizisinin n. elemanını bulan bir özyinelemeli fonksyion yazınız. Fibonacci dizisinde her eleman kendinden önceki iki elemanın toplamı şeklinde hesaplanır. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... Fibonacci dizisinin tanımı: fib(n) = n if ((n==0) || (n==1)) fib(n) = fib(n-2) + fib(n-1) if (n>=2) function s=fib(n) if (n==0) || (n==1) s=1; else s=fib(n-1)+fib(n-2); end end 5.3. Alıştırmalar 1- Girdi olarak 3 sayı alıp bunların ortalamasını hesaplayan bir fonksiyon yazınız 2- Dışarıdan girilen x ve y değerlerine göre aşağıdaki fonksiyonun değerini hesaplayan bir program yazınız 3- Verilen iki sayının Ebob ve Ekokunu bulna bir fonksiyon yazınız. 4- (Collatz Problemi) verilen pozitif bir n sayısı kullanılarak şu işlemler yapılıyor: - Sayı tekse 3 katını alıp 1 ekleyin. - Sayı çiftse 2'ye bölün. - Aynı işleme çıkan sayıya uygulayın. - En sonunda elde edeceğiniz sayı1'dir. Örneğin 8 sayısını ele alalım: 8-(2'ye böl)-4-(2'ye böl)-2-(2'ye böl)-1 Örneğin 5 sayısını ele alalım: 5-(3 katını al 1 ekle)-16-8-4-2-1 Buna göre verilen n sayısının tüm aradeğerlerini bulan bir fonksiyon yazınız. 29
© Copyright 2024 Paperzz