30
MF-103 Bilgisayar Programlama Güz 2011 (8. Sunu) (Yrd. Doç. Dr. Deniz Dal)

MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

  • Upload
    kalea

  • View
    46

  • Download
    1

Embed Size (px)

DESCRIPTION

MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). GER İ YE SADECE 1 VEYA 0 DEĞERİNİ D Ö ND Ü REN FONKS İ YONLARIN if ve while YAPILARINDA KO Ş UL OLARAK KULLANILMASI. - PowerPoint PPT Presentation

Citation preview

Page 1: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

MF-103

Bilgisayar Programlama Güz 2011

(8. Sunu)(Yrd. Doç. Dr. Deniz Dal)

Page 2: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

if AsalMi(n) %birsey yapend

GERİYE SADECE 1 VEYA 0 DEĞERİNİ DÖNDÜREN FONKSİYONLARIN if ve while YAPILARINDA KOŞUL OLARAK KULLANILMASI

while ~RakamlariFarkliMi(n) %birsey yapend

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.

Page 3: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

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

Page 4: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMA

function sonuc=TekSayiMi(sayi)

sonuc=mod(sayi,2);

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.

KOMUT PENCERESİ>>TekSayiMi(9)ans=

1>>TekSayiMi(8)ans=

0

Page 5: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMA

function teklerSayaci=AraliktakiTeklerinSayisiniHesapla(altLimit,ustLimit)

teklerSayaci=0;

for i=altLimit:ustLimit

if TekSayiMi(i)%Geriye 1 veya 0 Donduren Alt Fonksiyon

teklerSayaci=teklerSayaci+1;

end

end

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.

KOMUT PENCERESİ>>AraliktakiTeklerinSayisiniHesapla(1,100)ans=

50

Page 6: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

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.

Page 7: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

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

Page 8: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

A=input('A Katsayisini Giriniz= ');

B=input('B Katsayisini Giriniz= ');

C=input('C Sabitini Giriniz= ');

delta=B^2-4*A*C;

if delta<0

disp('Kokler Sanal');

else

x1=(-B+sqrt(delta))/(2*A);

x2=(-B-sqrt(delta))/(2*A);

fprintf('1. Kok : %f \n', x1);

fprintf('2. Kok : %f \n', x2);

end

ÇÖZÜM 1A=input('A Katsayisini Giriniz= ');

B=input('B Katsayisini Giriniz= ');

C=input('C Sabitini Giriniz= ');

delta=B^2-4*A*C;

if delta<0

disp('Kokler Sanal');

return; %Programi Ani Sonlandir

end

x1=(-B+sqrt(delta))/(2*A);

x2=(-B-sqrt(delta))/(2*A);

fprintf('1. Kok : %f \n', x1);

fprintf('2. Kok : %f \n', x2);

ÇÖZÜM 2

DÜZYAZI M ÇÖZÜMLER

Page 9: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

function IkinciDereceDenkleminKokleriniHesapla(A,B,C)

delta=B^2-4*A*C;

if delta<0

disp('Kokler Sanal');

else

x1=(-B+sqrt(delta))/(2*A);

x2=(-B-sqrt(delta))/(2*A);

fprintf('1. Kok : %f \n', x1);

fprintf('2. Kok : %f \n', x2);

end

ÇÖZÜM 3

1. FONKSİYON M ÇÖZÜM

Çö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.

Page 10: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

function IkinciDereceDenkleminKokleriniHesapla(A,B,C)

delta=B^2-4*A*C;

if delta<0

disp('Kokler Sanal');

return; %Programi Ani Sonlandir

end

x1=(-B+sqrt(delta))/(2*A);

x2=(-B-sqrt(delta))/(2*A);

fprintf('1. Kok : %f \n', x1);

fprintf('2. Kok : %f \n', x2);

ÇÖZÜM 4

İ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

Page 11: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

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.

Page 12: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMA

function sonuc=CiftSayiMi(sayi)

sonuc=0;%Sayinin Cift Sayi Olmadigini Kabul Et

if mod(sayi,2)==0

sonuc=1;%Baslangic Kabulunu Degistir

end

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.

KOMUT PENCERESİ>>CiftSayiMi(8)ans=

1>>CiftSayiMi(9)ans=

0

Page 13: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

DİZİLER• Dizi (array), en genel tanımıyla birbirleri ile ilişkili

nümerik veya metinsel değerler topluluğudur. • Değişkenler içerisinde yalnız bir tek bilgi

depolarken dizileri kullanarak aynı türden birden fazla bilgiyi saklayabiliriz.

• Programımız içerisinde kullanacağımız 100 adet tamsayıyı 100 farklı değişken içinde saklamak yerine bu amaçla içinde 100 tamsayı saklı bir dizi kullanmak daha mantıklıdır.

• Dizi elemanlarına ulaşmak için indis dediğimiz yapılardan ve parantezlerden faydalanırız.

Page 14: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

MATLAB’DE DİZİLER

• Bir nümerik dizi vektör veya matris olabilir.• nx1 veya 1xm dizisi bir vektör gösterir. • Bu çerçevede nx1dizisi sütun vektörü ve 1xm

dizisi ise satır vektörü olarak da düşünülebilir.• mxn veya nxm dizisi bir matris gösterir.• Bir dizinin eleman sayısı dizinin satır sayısı ile

sütun sayısının çarpımıdır.

Page 15: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

MATLAB’DE TEK BOYUTLU DİZİLER (SATIR VEKTÖRLERİ) VE length

Fonksiyonu

Page 16: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

MATLAB’DE TEK BOYUTLU DİZİLER (SÜTUN VEKTÖRLERİ) VE length

Fonksiyonu

Page 17: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

İPUCU

Bir satır veya sütun vektörü içerisinde tek bir for döngüsü kullanılarak kolaylıkla gezilebilir.

Eğer bu amaçla oluşturulacak bir for döngüsü i adında bir döngü değişkeni ile kontrol edilirse, bu i aynı zamanda dizinin indislerini de temsil etmiş olur.

for i=1:length(A)fprintf('%d\n',A(i));

end

Page 18: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Kendisine A adlı bir satır veya sütun vektörünü parametre olarak alan bir fonksiyon m-dosyası vektörün boyutuyla ilgili bir işlem yapıyorsa length(A) fonksiyonunu muhakkak kullanmak zorundadır. (Bu fonksiyona komut penceresinden nasıl bir vektörün parametre olarak verileceği peşinen bilinemez çünkü.)

İPUCU

Page 19: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

satirVektoru=ilkDeger:artımMiktarı:sonDeger

artimMiktarı belirtilmezse ilkDeger den sonra 1’er artım olacağı anlaşılır.

SATIR VEKTÖRLERİNİN İÇERİSİNİN OTOMATİK OLARAK SAYILARLA

DOLDURULMASI

Page 20: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMAKendisine parametre olarak aldığı bir A satır vektörünün en büyük elemanını bularak geriye döndüren bir MATLAB fonksiyonunu DizininMaksimumunuBul.m adında bir fonksiyon m-dosyasının içerisine yazınız.

DizininMaksimumunuBul.m

function enBuyuk=DizininMaksimumunuBul(A)enBuyuk=A(1); %Dizinin ilk elemani en buyuk olsunfor i=2:length(A) %Kac elemanli bir vektor acaba? if A(i)>enBuyuk enBuyuk=A(i); endend

KOMUT PENCERESİ>>B= [2, 4, -5, 6, 7, 99, -132, 126];>>DizininMaksimumunuBul(B)ans=

126>>DizininMaksimumunuBul( [2, 4, -5, 6, 7, 99, -132, 126] )ans=

126

Page 21: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

SORULAR…

Bir A satır vektörünün elemanlarının toplamı

Bir A satır vektörünün aritmetik ortalaması

Bir A satır vektörünün harmonik ortalaması

Bir A satır vektörünün elemanlarının çarpımı

Bir A satır vektörünün geometrik ortalaması

Bir A satır vektörünün içerisindeki çift sayıların adedi

Page 22: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

BİR SATIR VEKTÖRÜNÜN BİLGİ DEPOLAMAK AMACIYLA KULLANILMASI

A=[ ]; %Baslangicta Bos

1. METODA=[A x]; %A=[x]A=[A y]; %A=[x y]

2. METODA(1)=x; %A=[x]A(2)=y; %A=[x y]

Başlangıçta boş olan bir satır vektörünün içine sırasıyla x ve y elemanları ekleniyor.

Page 23: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

İKİ RESİM ARASINDAKİ 10 FARKI BULUNUZ

A=[ ]; %Baslangicta Bos

1. RESİMA=[A x]; %A=[x]A=[A y]; %A=[x y]Son eklenen dizi elemanı dizinin son elemanı oluyor.

2. RESİMA=[x A]; %A=[x]A=[y A]; %A=[y x]Son eklenen dizi elemanı dizinin ilk elemanı oluyor.

Bu iki farklı türdeki depolama stratejisinin ne tür uygulamalar için uygun olabileceği üzerinde dikkatlice düşününüz.

Page 24: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

>>A=[ ]>>A=[A 1]>>A=[A 2]>>A=[3 A]

Page 25: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMA

function depoVektor=AraliktakiCiftleriBul(altLimit,ustLimit)

depoVektor=[ ];%Baslangicta Bos Bir Satir Vektoru

for i=altLimit:ustLimit

if CiftSayiMi(i)%Geriye 1 veya 0 Donduren Alt Fonksiyon

depoVektor=[depoVektor i];%Depo Vektorun Sonuna Ekle

%depoVektor=[i depoVektor];

end

end

Kendisine parametre olarak aldığı bir alt limit ile bir üst limit arasındaki çift sayıları bularak bir satır vektörü içerisinde geriye döndüren bir MATLAB fonksiyonunu AraliktakiCiftleriBul.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.

KOMUT PENCERESİ>>AraliktakiCiftleriBul(1,10)ans=

2 4 6 8 10>>AraliktakiCiftleriBul(10,1)ans=

[ ]

(1,10) ve (10,1) şeklindeki parametre aktarımlarının her ikisinde de aynı sonucu üretecek fonksiyonu nasıl yazardınız?

Page 26: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Aksine Örnek Bulma Yöntemi ile İspat

2011 yılı itibariyle dünya üzerinde dinozor olmadığı iddiasında bulunan birisinin bu tezini, onun karşısına bir dinozor çıkararak çürütebilirsiniz.

Veya bir matrisin sıfır matrisi olup olmadığını araştırıyorsanız matrisin sıfır matrisi olduğu kabulüyle yola çıkarsınız ve matris içerisinde değeri sıfırdan farklı en az bir matris elemanı bulmaya çalışırsınız. Kabulünüzün aksini işaret eden böyle bir matris elemanı bulamazsanız eğer başlangıçta yaptığınız kabulün doğru olduğu ortaya çıkar. Bu ispat yöntemi özellikle dizi uygulamalarında sıklıkla kullanılır.

Page 27: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMA

Kendisine parametre olarak aldığı bir B satır vektörünün her bir elemanı 1 değerine sahipse geriye 1 aksi takdirde geriye 0 döndüren bir MATLAB fonksiyonunu DiziSadeceBirlerMiIceriyor.m adındaki fonksiyon m-dosyasının içerisine yazınız.

Page 28: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

ÇALIŞMAYAN ÇÖZÜM

function sonuc=DiziSadeceBirlerMiIceriyor(B)

for i=1:length(B)

if B(i)==1

sonuc=1;

else

sonuc=0;

end

end

KOMUT PENCERESİ>>DiziSadeceBirlerMiIceriyor([-8 4 6 25 1])ans=

1

Page 29: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

ÇALIŞAN ÇÖZÜM

function sonuc=DiziSadeceBirlerMiIceriyor(B)

sonuc=1;%Dizinin Sadece 1 Degeri Icerdigini Kabul Et

for i=1:length(B)

if B(i)~=1%En Az 1 Adet Aksi Ornek Mevcutsa

sonuc=0;%Kabulu Degistir

break;%return Komutu da Kullanılabilir

end

end

KOMUT PENCERESİ>>DiziSadeceBirlerMiIceriyor(ones(1,10))ans=

1>>DiziSadeceBirlerMiIceriyor([1 1 1 25 1])ans=

0

Page 30: MF-10 3 Bilgisayar Programlama Güz 2011 ( 8 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

KİTAPTAKİ 58-102 ARASI UYGULAMALARI BİRLİKTE

YAZALIM VE ÇALIŞTIRALIM.