Bölüm 5

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