Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BM-103 Programlamaya Giriş Güz 2016 (6. Sunu)

Benzer bir sunumlar


... konulu sunumlar: "BM-103 Programlamaya Giriş Güz 2016 (6. Sunu)"— Sunum transkripti:

1 BM-103 Programlamaya Giriş Güz 2016 (6. Sunu)
(Yrd. Doç. Dr. Deniz Dal)

2 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.)

3 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.)

4 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?)

5 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.

6 >> Uzaklik(3,4,1,2) %sonuç ans adlı değişkene atanır
Uygulama: İki nokta arasındaki uzaklığı bulan programı m-fonksiyon kullanarak yazınız. x1 = 1. noktanın x koordinatı; x2 = 2. noktanın x koordinatı y1 = 1. noktanın y koordinatı; y2 = 2. noktanın y koordinatı 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

7 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

8 !!! ÖNEMLİ !!! Fonksiyon m-dosyalarının imza satırlarında yer alan fonksiyon adları Paskal notasyonu ile tanımlanır. Aynı şekilde fonksiyon m-dosyaları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. GENELLİKLE 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.

9 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) FonksiyonB.m (Alt) function sonuc1=FonksiyonA(n) sonuc1=FonksiyonB(n)+5; 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)

10 UYGULAMA Dışarıdan girilen x ve y değerlerine göre aşağıdaki fonksiyonun değerini hesaplayan bir MATLAB programını fonksiyon M dosyası formatında yazınız. (Dosya adı olarak Fonksiyon.m kullanınız.) Bu fonksiyon m-dosyasının imzası ne olmalıdır? Bu fonksiyon m-dosyasının tanımı ne olmalıdır?

11 KİTAPTAKİ 22.1-22.22 ARASI UYGULAMALARI BİRLİKTE YAZALIM VE ÇALIŞTIRALIM.

12 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

13 İ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 olarak TekSayiMi, AsalSayiMi veya SayininRakamlariFarkliMi verilebilir.

14 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)

15 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. Programın çalışabilmesi için bu alt fonksiyonun çalışma dizini altında tanımlı olması (mevcut olması) gereklidir. 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 KOMUT PENCERESİ >>AraliktakiTeklerinSayisiniHesapla(1,100) ans= 50

16 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.

17 Soru: Ax²+Bx+C=0 şeklinde verilen 2
Soru: Ax²+Bx+C=0 şeklinde verilen 2. derece denklemin köklerini bulan programın akış diyagramını çiziniz.

18 ÇÖZÜM 1 ÇÖZÜM 2 DÜZYAZI M ÇÖZÜMLER A=input('A Katsayısını Giriniz= ');
B=input('B Katsayısını Giriniz= '); C=input('C Sabitini Giriniz= '); delta=B^2-4*A*C; if delta<0 disp('Kökler Sanal'); else x1=(-B+sqrt(delta))/(2*A); x2=(-B-sqrt(delta))/(2*A); fprintf('1. Kök : %f \n', x1); fprintf('2. Kök : %f \n', x2); end A=input('A Katsayısını Giriniz= '); B=input('B Katsayısını Giriniz= '); C=input('C Sabitini Giriniz= '); delta=B^2-4*A*C; if delta<0 disp('Kökler Sanal'); return; %Programı Ani Sonlandır end x1=(-B+sqrt(delta))/(2*A); x2=(-B-sqrt(delta))/(2*A); fprintf('1. Kök : %f \n', x1); fprintf('2. Kök : %f \n', x2); DÜZYAZI M ÇÖZÜMLER

19 ÇÖZÜM 3 1. FONKSİYON M ÇÖZÜM
function IkinciDereceDenkleminKokleriniHesapla(A,B,C) delta=B^2-4*A*C; if delta<0 disp('Kökler Sanal'); else x1=(-B+sqrt(delta))/(2*A); x2=(-B-sqrt(delta))/(2*A); fprintf('1. Kök : %f \n', x1); fprintf('2. Kök : %f \n', x2); end Çözümün hem if ve hem de else bloğunda kök hesabı yaptırılmadığı için (sadece else bloğunda yaptırılıyor) geriye belirli bir değer döndürülmediğine dikkat ediniz. Bu yüzden imza satırında bir atama operatörü kullanılmamıştır. 1. FONKSİYON M ÇÖZÜM

20 ÇÖZÜM 4 2. FONKSİYON M ÇÖZÜM
function IkinciDereceDenkleminKokleriniHesapla(A,B,C) delta=B^2-4*A*C; if delta<0 disp('Kökler Sanal'); return; %Programı Ani Sonlandır end x1=(-B+sqrt(delta))/(2*A); x2=(-B-sqrt(delta))/(2*A); fprintf('1. Kök : %f \n', x1); fprintf('2. Kök : %f \n', x2); İmza satırında bir atama operatörü kullanılmadığına, yani fonksiyonun geriye bir değer döndürmediğine dikkat ediniz. 2. FONKSİYON M ÇÖZÜM

21 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.

22 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)

23 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 fprintf('\n'); else Bas for j=2:(n-1) fprintf(' '); %Ekrana Boşluk Bas 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. 23

24 KİTAPTAKİ 22.23-22.32 ARASI UYGULAMALARI BİRLİKTE YAZALIM VE ÇALIŞTIRALIM.


"BM-103 Programlamaya Giriş Güz 2016 (6. Sunu)" indir ppt

Benzer bir sunumlar


Google Reklamları