Dosyayı İndir

BİLGİSAYAR
PROGRAMLAMAYA GİRİŞ
8. DERS NOTU
 Uygulama
örnekleri
 Function m-dosyaları
Kaynak: Dr.Deniz DAL kitabı ve ders sunumları
2.KıSA SıNAV SORUSU 1(İ.Ö.): DıŞARıDAN GIRILEN KENAR UZUNLUKLARıNA
GÖRE BIR ÜÇGENIN ÇEVRESINI HESAPLAYAN VE EKRANA BIR IFADE ILE SONUCU
YAZAN PROGRAMı M-DOSYASı ILE YAZıNıZ.
EĞER KULLANıCı NEGATIF BIR SAYı
GIRERSE EKRANA “POZITIF SAYı GIRINIZ” UYARıSı YAPTıRıNıZ.











clc
clear all
kenar1=input('üçgenin 1. kenar uzunluğunu giriniz');
kenar2=input('üçgenin 2. kenar uzunluğunu giriniz');
kenar3=input('üçgenin 3. kenar uzunluğunu giriniz');
if kenar1<=0 || kenar2<=0 || kenar3<=0
disp('lütfen pozitif bir sayı giriniz')
else
cevre=kenar1+kenar2+kenar3;
fprintf('üçgenin çevresi %g dir\n', cevre)
end
2.KıSA SıNAV SORUSU 2(İ.Ö.): BIR IKIZKENAR ÜÇGENIN TEPE AÇıSı 30-90 0 (30
VE 90 DAHIL) ARASıNDAKI TAMSAYıLAR IÇIN DEĞIŞIRKEN ÜÇGENIN DIĞER (EŞ)
AÇıLARıNı HESAPLAYAN VE HER SEFERINDE “ACI1, ACI2, ACI3” ŞEKLINDE ALT
ALTA 3 AÇıYı BIRLIKTE EKRANA YAZAN PROGRAMı M-DOSYASı ILE YAZıNıZ.

clc

clear all

for i=30:90

aci=(180-i)/2;

fprintf('%g, %g, %g\n', i, aci, aci)

end
2.KıSA SıNAV SORUSU 1(Ö.Ö.): DıŞARıDAN GIRILEN X VE Y DEĞERLERINE GÖRE
AŞAĞıDAKI FONKSIYONUN DEĞERINI HESAPLAYAN VE BIR IFADE ILE EKRANA
YAZAN BIR PROGRAM YAZıNıZ.










X
>0
𝐹 𝑥, 𝑦 = 𝑥 2 𝑦 + 𝑥𝑦 +
X
≤0
𝐹 𝑥, 𝑦 = 𝑥 3 𝑦 +
𝑥
𝑒𝑦
𝑙𝑛 𝑥 + 1
𝑥
+ 𝑡𝑎 𝑛
𝑙𝑜𝑔10 (𝑦)
𝑦
clc
clear all
x=input('x değerini giriniz');
y=input('y değerini giriniz');
if x>0
f=x^2*y+sqrt(x*y)+(log(exp(x))+1)/log10(y)+tan(x/y);
else
f=x^3*y+abs(x)/exp(y);
end
fprintf('işlem sonucu %g dir\n', f)
2.KıSA SıNAV SORUSU 2(Ö.Ö.): 50-120 KM/SA ARASıNDAKI TAMSAYıLAR IÇIN DEĞIŞEN
HıZDAKI ARAÇLARıN X KM’LIK MESAFEYI (MESAFEYI KULLANıCıDAN ALARAK) NE KADAR
ZAMANDA ALıNDıĞıNı HESAPLAYAN VE HER SEFERINDE ALTALTA HıZ VE SÜREYI BIRLIKTE
“V,T “ ŞEKLINDE EKRANA YAZAN MATLAB PROGRAMıNı M-DOSYASıNDA YAZıNıZ.

clc

clear all

x=input('mesafeyi km cinden giriniz');

for v=50:120

t=x/v;

fprintf('%g, %g\n', v,t)

end
KITAPTAN 20. BÖLÜM UYGULAMALARıNı
ÇÖZELIM…
FONKSİYONLAR
Fonksiyonlar da bilgisayar programlarıdır.
Bilgisayarlar yardımıyla çözülmeye çalışılan
problemler fonksiyonlar sayesinde yönetilmesi
daha kolay, küçük parçacıklara bölünürler. Bu
metoda “Böl ve Yönet” ya da “Divide and
Conquer” adı verilir. Her fonksiyon:



Kendine özgü bir isme sahiptir.
GENELLİKLE kendine, üzerinde işlem yapacağı bir
argüman (parametre) ya da argümanlar
(parametreler) alır.
GENELLİKLE geriye bir değer döndürür. (skaler,
vektör ya da matris.)
FONKSİYON M-DOSYALARI
Bir fonksiyon m-dosyasının iki bileşeni vardır:
1 – Fonksiyonun imzası veya prototipi
(İlk satırda tanımlanır.)
2 – Fonksiyonun tanımı (yapması gereken iş)
(İkinci satırdan başlar ve devam eder.)
FONKSİYON İMZASI VEYA PROTOTİPİ
function cikisParametresi = FonksiyonAdi (girisParametreleri 1, 2, …n)
function [cikisParametreleri 1, 2,…, n] = FonksiyonAdi (girisParametreleri 1, 2, …n)
function cikisParametresi = FonksiyonAdi ( )
function cikisParametresi = FonksiyonAdi
function FonksiyonAdi (girisParametreleri 1, 2, …n)
Fonksiyon m-dosyalarının ilk satırı MUHAKKAK yukarıda
tanımladığımız gibi fonksiyonların imzası veya prototipi dediğimiz
satırlardan oluşmalıdır. Bir fonksiyonu yazmaya başlamadan önce
onun imzası hakkında iyice düşünmeliyiz. (Giriş parametresi(leri)
almalı mı, geriye bir değer döndürmeli mi?)
Fonksiyon M-Dosyaları Oluşturulurken Dikkat
Edilmesi Gereken Hususlar:
1 - Her MATLAB fonksiyonu function anahtar kelimesi ile
başlamalıdır.
2 - FonksiyonAdi m-dosyasına verilen isimle aynı olmalıdır.
3 - Bir MATLAB fonksiyonu komut penceresinden fonksiyon adı
ve varsa eğer parantez içerisinde birbirlerinden virgüllerle
ayrılmış parametrelerle çağrılmalıdır.
4 - Parametre aktarımı olması durumunda alt ve ana programda
eşit sayıda giriş parametresi olmalıdır.
Uygulama: İki nokta arasındaki uzaklığı bulan programı m-fonksiyon
kullanarak yazınız.
x1 = 1. noktanın x koordinati; x2 = 2. noktanın x koordinati
y1 = 1. noktanın y koordinati; y2 = 2. noktanın y koordinati
Uzaklik.m
function mesafe = Uzaklik(x1,y1,x2,y2) %İmza
mesafe=sqrt((x2-x1)^2+(y2-y1)^2); %Tanım
KOMUT PENCERESİ
>> sonuc=Uzaklik(3,4,1,2) %veya
>> Uzaklik(3,4,1,2) %sonuç ans adlı değişkene atanır
BİR ÖNCEKİ ÖRNEĞİN DÜZYAZI M-DOSYASI İLE ÇÖZÜMÜ
Uzaklik.m
x1=input(' x1 koordinatını gir: ');
y1=input(' y1 koordinatını gir: ');
x2=input(' x2 koordinatını gir: ');
y2=input(' y2 koordinatını gir: ');
mesafe=sqrt((x2-x1)^2+(y2-y1)^2);
fprintf(' Girilen 2 nokta arası mesafe: %f \n ',mesafe);
KOMUT PENCERESİ
>>Uzaklik
!!! ÖNEMLİ !!!
Fonksiyon m-dosyalarının imza satırlarında yer alan fonksiyon
adları Paskal notasyonu ile tanımlanır. Aynı şekilde fonksiyon mdosyalarına verilen isimler için de düzyazı m-dosyalarına verilen
isimler de olduğu gibi Paskal Notasyonu kullanılır.
Fonksiyon m-dosyalarının imza satırlarındaki giriş ve çıkış
parametrelerini ifade etmek amacıyla kullanılan değişkenler deve
notasyonuyla tanımlanırlar.
Fonksiyon m-dosyaları içerisinde input komutu kullanılarak
kullanıcıdan bilgi ALINMAZ. Fonksiyon içerisinde değerlendirilecek
bilgi programa parametre olarak aktarılır.
 Fonksiyon m-dosyaları program yazma editörü içerisindeki run
butonu tıklanarak ÇALIŞTIRILMAZLAR. Komut penceresinden
parametre(ler) girilerek çalıştırılırlar.
ANA FONKSİYON, ALT (YARDIMCI)
FONKSİYON MANTIĞI
Bir fonksiyon m-dosyasının içerisinde daha önceden tanımlanmış ve
çalışma dizininizin altında mevcut olan başka bir fonksiyon
m-dosyasını (alt program, yardımcı program) kullanabilirsiniz.
FonksiyonA.m (Ana)
function sonuc1=FonksiyonA(n)
sonuc1=FonksiyonB(n)+5;
FonksiyonB.m (Alt)
function sonuc2=FonksiyonB(m)
sonuc2=m*sqrt(m);
FonksiyonA temelde
ne iş yapıyor?
Çağrılma Sırası
Komut Penceresi -> FonksiyonA -> FonksiyonB ->
FonksiyonB(sonuc) -> FonksiyonA(sonuc)->Komut Penceresi(sonuc)
GERİYE SADECE 1 VEYA 0 DEĞERİNİ DÖNDÜREN
FONKSİYONLARIN if ve while YAPILARINDA KOŞUL
OLARAK KULLANILMASI
Bundan önceki derslerimizde if ve while deyimlerini
kontrol amacıyla kullanılacak koşulları oluştururken
sadece ilişkisel ve mantıksal operatörlerden
faydalandık.
Bundan sonra if ve while deyimlerinin yanında koşul
olarak geriye sadece 1 veya 0 değerini döndüren ve
bizlerin oluşturduğu alt (yardımcı) fonksiyonları da
kullanabileceğiz.
if AsalMi(n)
%birşey yap
end
while ~RakamlariFarkliMi(n)
%birşey yap
end
İPUCU
Bilgisayar programlamada, geriye 1 veya 0 değerini
döndüren MATLAB fonksiyonlarının adlarının
sonuna Mi veya Mu eklerini getiren ve böylece
onları
diğer
fonksiyonlardan
kolayca
ayırt
edebilmeye imkan tanıyan bir notasyondan
faydalanılır.
Bu türden fonksiyon adlarına örnek
TekSayiMi,
AsalSayiMi
SayininRakamlariFarkliMi verilebilir.
olarak
veya
UYGULAMA
Kendisine parametre olarak aldığı sayı bir tek sayı
ise geriye 1 değerini aksi takdirde geriye 0 değerini
döndüren bir MATLAB fonksiyonunu TekSayiMi.m
adındaki fonksiyon m-dosyasının içerisine yazınız.
function sonuc=TekSayiMi(sayi)
sonuc=mod(sayi,2);
KOMUT PENCERESİ
>>TekSayiMi(9)
ans=
1
>>TekSayiMi(8)
ans=
0
UYGULAMA
Kendisine parametre olarak aldığı bir alt limit ile bir
üst limit arasındaki tek sayıların adedini
hesaplayarak geriye döndüren bir MATLAB
fonksiyonunu AraliktakiTeklerinSayisiniHesapla.m
adındaki fonksiyon m-dosyasının içerisine yazınız.
function teklerSayaci=AraliktakiTeklerinSayisiniHesapla(altLimit,ustLimit)
teklerSayaci=0;
for i=altLimit:ustLimit
if TekSayiMi(i)%Geriye 1 veya 0 Döndüren Alt Fonksiyon
teklerSayaci=teklerSayaci+1;
end
end
KOMUT PENCERESİ
>>AraliktakiTeklerinSayisiniHesapla(1,100)
ans=
50
return Komutu
 Yazdığınız MATLAB programını herhangi bir anda
(programın normalde sona erdiği noktanın haricinde - early
termination) sona erdirmek için return komutunu
kullanabilirsiniz.
Eğer return komutu ana program içerisinde kullanılmışsa,
kontrol komut penceresindeki klavyeye geçer. Eğer return
komutu bir fonksiyon içerisinde kullanılmışsa, kontrol bu
fonksiyonu çağıran ana fonksiyona devredilir.
return komutunun hata ayıklama modundan çıkmak için
de kullanıldığını hatırlayınız.
Soru: Ax²+Bx+C=0 şeklinde verilen 2. derece denklemin köklerini
bulan programı yazınız.
ÇÖZÜM 1
ÇÖZÜM 2
A=input('A Katsayısını Giriniz= ');
A=input('A Katsayısını Giriniz= ');
B=input('B Katsayısını Giriniz= ');
B=input('B Katsayısını Giriniz= ');
C=input('C Sabitini Giriniz= ');
C=input('C Sabitini Giriniz= ');
delta=B^2-4*A*C;
delta=B^2-4*A*C;
if delta<0
if delta<0
disp('Kökler Sanal');
disp('Kökler Sanal');
else
end
return; %Programı Ani Sonlandır
x1=(-B+sqrt(delta))/(2*A);
end
x2=(-B-sqrt(delta))/(2*A);
x1=(-B+sqrt(delta))/(2*A);
fprintf('1. Kök : %f \n', x1);
x2=(-B-sqrt(delta))/(2*A);
fprintf('2. Kök : %f \n', x2);
fprintf('1. Kök : %f \n', x1);
fprintf('2. Kök : %f \n', x2);
DÜZYAZI M ÇÖZÜMLER
Olmayana Ergi Yöntemi ile İspat
Bu ispat yöntemi doğruluğu gösterilmek istenen
bir ifadenin yanlış olduğunu kabul ederek bir ispat
yolculuğuna koyulur. Yöntem, eğer bu (yanlışlığı
ispat)
yolculuğu
esnasında
bir
çelişkiyle
karşılaşırsa başta yanlış olduğunu kabul ettiği
ifadenin aslında doğru bir ifade olduğunu
ispatlamış olur.
Bu yöntem tam ters bir mantıkla da çalışır.
UYGULAMA
Kendisine parametre olarak aldığı sayı bir çift sayı
ise geriye 1 değerini aksi takdirde geriye 0 değerini
döndüren bir MATLAB fonksiyonunu CiftSayiMi.m
adındaki fonksiyon m-dosyasının içerisine yazınız.
function sonuc=CiftSayiMi(sayi)
sonuc=0;%Sayının Çift Sayı Olmadığını Kabul Et
if mod(sayi,2)==0
sonuc=1;%Başlangıç Kabulünü Değiştir
end
KOMUT PENCERESİ
>>CiftSayiMi(8)
ans=
1
>>CiftSayiMi(9)
ans=
0
GizemliFonksiyon.m
function GizemliFonksiyon(n)
clc;
if (n<2)||(n>20)
disp('Beklenen Aralıkta Bir Giriş Değil.');
return;
end
for i=1:n
if (i==1)||(i==n)
for j=1:n
fprintf('#'); %Ekrana # Bas
end
fprintf('\n');
else
fprintf('@'); %Ekrana @ Bas
for j=2:(n-1)
fprintf(' '); %Ekrana Boşluk Bas
end
fprintf('@\n');
end
end
Yanda verilen
GizemliFonksiyon.m adlı
fonksiyon m-dosyası genel
olarak nasıl bir iş yapar?
Komut penceresinde
çalıştırılan
GizemliFonksiyon(10) nasıl
bir ekran çıktısı verir?
Çözüm: Fonksiyon
içerisinde n gördüğünüz her
yere 10 rakamını yerleştirip
sanki MATLAB
programıymışsınız gibi
fonksiyonu satır satır
işletmelisiniz.
TEŞEKKÜR
Ders notlarından yararlandığım Değerli Hocamız
Dr. Deniz DAL’a teşekkürlerimle…