25.03.2015 Views

tbt1_ders_notu

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

İÇİNDEKİLER<br />

WHİLE DÖNGÜSÜ 2<br />

KULLANIM ŞEKLİ 2<br />

BREAK VE CONTİNUE DEYİMLERİ 3<br />

MATLAB`DA İÇİÇE DÖNGÜLER 3<br />

MATLAB`DA İKİ DEĞİŞKENİN DEĞERİNİN YER DEĞİŞTİRMESİ 7<br />

SELECTION SORT (SEÇMELİ SIRALAMA ALGORİTMASI) 7<br />

BUBBLE SORT (KABARCIK SIRALAMA ALGORİTMASI) 8<br />

HIZ KIYASI 8<br />

MATLAB FONKSİYONLARI 9<br />

ALT FONKSİYONLAR<br />

11<br />

ÖNEMLİ BAZI SİSTEM FONKSİYONLARI 13<br />

SERBEST PARAMETRELİ FONKSİYONLAR 13<br />

UYGULAMA 14<br />

1


22.10.2014 Çarşamba<br />

WHİLE DÖNGÜSÜ<br />

Döngü işleminin bir şarta bağlanılması gereke durumlarda for döngüsü yerine while döngüsü<br />

kullanılır.Bu döngü çeşidinde kaç kez dönüleceği verilen şartın yerine gelip gelmediğine bağlıdır. Bu<br />

yüzden sonsuz döngülere girme tehlikesi vardır. For ve while birbiri yerine kullanılabilir.<br />

KULLANIM ŞEKLİ<br />

While (koşul)<br />

Deyim 1<br />

Deyim 2<br />

Koşul_degisikligi<br />

End<br />

ÖRNEK:<br />

clc;<br />

clear;<br />

n=5;<br />

while(n>0)<br />

fprintf(‘%d 0 dan büyüktür’,n);<br />

n=n-1;<br />

end<br />

ÖRNEK: 10 TL`nin %30 faiz ile 150 TL geçtiği yada eşit olduğu ilk yılı ve paranın kaç TL olduğunu<br />

hesaplayan bir matlab programı yazınız.<br />

clc;<br />

clear;<br />

sayaç=0;<br />

while(n


Break ve Continue Deyimleri<br />

Uygulamanın herhangi bir anında döngüyü durdurmak için (for veya while) break deyimi kullanılır.<br />

Uygulama döngüyü kapatan end deyiminden itibaren devam edecektir.<br />

Herhangi bir çevrimi iptal edip sonraki çevrime geçmek için continue terimi kullanılır.<br />

Bu deyimler iç içe döngüler içerisinde kullanılmış ise yalnızca içinde bulunduğu döngüye etki eder.<br />

ÖRNEK: Bir önceki para ile ilgili sorunun for ile yapılmış hali ve süre farkı?<br />

clc;<br />

clear;<br />

yil=0;<br />

para=10;<br />

tic;<br />

for i=1:1:inf<br />

yil=yil+1;<br />

para=para+para*0.30;<br />

if(para>=150)<br />

break;<br />

end<br />

end<br />

toc;<br />

fprintf('%d yil sonra para %g kadar olur',yil,para);<br />

ÖRNEK: x=10 ve y=7 olarak verilsin. Bu sayıların toplamı 52.347`den küçük kalıncaya kadar x sayısı<br />

2 ye katlanarak toplamaya devam edilmektedir. Döngü bittiğinde x sayısı kaç kez katlanmış olur.<br />

clc;<br />

clear;<br />

x=10;<br />

y=7;<br />

s=0;<br />

sonuc=17;<br />

while (sonuc


clc;<br />

clear;<br />

for i=1:1:5<br />

for j=1:1:3<br />

fprintf('%d,%d\n',i,j)<br />

end<br />

end<br />

ÖRNEK: Kullanıcıdan sütun ve satır değerlerini isteyip, ( İndislerini belirterek isteyen bir program<br />

yazınız).<br />

clc;<br />

clear;<br />

A=[];<br />

n=input('Matrisin satır sayısını giriniz');<br />

m=input('Matrisin sütun sayısını giriniz');<br />

for i=1:1:n<br />

for j=1:1:m<br />

fprintf('A %d. satır %d . sütunun değerini<br />

giriniz: ',i,j);<br />

A(i,j)=input('');<br />

end<br />

end<br />

ÖRNEK: Çarpım tablosunu oluşturan program.<br />

clc;<br />

clear;<br />

for i=1:1:10<br />

for j=1:1:10<br />

fprintf('%5d',i*j)<br />

end<br />

fprintf('\n');<br />

end<br />

4


ÖRNEK: Kullanıcının girdiği bir n değerine kadar<br />

1<br />

2! + 1 3! + 1 4! + ⋯ 1 n =?<br />

clc;<br />

clear;<br />

n=input('n sayısını giriniz: ');<br />

fakt=1;<br />

sonuc=0;<br />

for i=2:1:n<br />

fakt=1;<br />

for j=1:1:i<br />

fakt=fakt*j;<br />

end<br />

sonuc=sonuc+(1/fakt);<br />

end<br />

for i=2:n-1<br />

fprintf('1/%d! + ',i);<br />

end<br />

fprintf('1/%d!= %f',n,sonuc);<br />

ÖRNEK:<br />

4 ∑<br />

100000 (−1) k<br />

k=0 2k+1<br />

clc;<br />

clear;<br />

topl=0;<br />

deger=0;<br />

for i=0:1:100000<br />

topl=topl+(-1)^i/(2*i+1);<br />

end<br />

fprintf('Sonuc= %g',4*topl);<br />

SONUC=3.1416<br />

5


03.12.2014 Çarşamba<br />

ÖRNEK: Kullanıcı tarafından girilen iki matrisin toplamını bulacak olan matlab kodlarını yazınız.<br />

A=input('Lütfen ilk matrisi giriniz [,,]');<br />

B=input('Lütfen ikinci matrisi giriniz [,,]');<br />

[x,y]=size(A);<br />

[m,n]=size(B);<br />

T=[];<br />

if(x~=m)||(y~=n)<br />

error('Matrislerin boyları eşit değil !');<br />

else<br />

for i=1:1:x<br />

for j=1:1:y<br />

T(i,j)=A(i,j)-B(i,j);<br />

end<br />

end<br />

end<br />

T<br />

ÖRNEK: Kullanıcı tarafından girilen iki matrisin çarpımını bulacak olan matlab kodlarını yazınız.<br />

A=input('Lütfen ilk matrisi giriniz [,,]');<br />

B=input('Lütfen ikinci matrisi giriniz [,,]');<br />

[x,y]=size(A);<br />

[m,n]=size(B);<br />

T=zeros(x,n);<br />

if(y~=m)<br />

error('Birinci matrisin sütunu ikinci matrisin<br />

satırına eşit değil !');<br />

else<br />

for i=1:1:x<br />

for j=1:1:n<br />

for k=1:n<br />

T(i,j)=T(i,j)+A(i,k)*B(k,j);<br />

end<br />

end<br />

end<br />

end<br />

C<br />

6


ÖRNEK: Kullanıcı tarafından girilen bir matrisin transpozunu ekrana yazan matlab kodlarını<br />

yazınız.<br />

A=input('Lütfen ilk matrisi giriniz [,]: ');<br />

[x,y]=size(A);<br />

C=zeros(y,x);<br />

for i=1:x<br />

for j=1:y<br />

C(j,i)=A(i,j);<br />

end<br />

end<br />

C<br />

ÖDEV: 4x4 tipinde bir matrisin determinantını hesaplayacak olan, matlab komutlarını yazınız.<br />

ÖDEV: Kullanıcı tarafından girilen bir dizinin (satır vektörünün) elemanlarını tersten başka bir satır<br />

vektörüne aktaracak matlab kodlarını yazınız.<br />

A=input('Lütfen bir satır vektörü [,,] giriniz: ');<br />

B=[];<br />

j=length(A);<br />

for i=1:length(A)<br />

B(i)=A(j);<br />

j=j-1;<br />

end<br />

B<br />

ÖRNEK: 4x4 tipinde bir matrisin tersini alan, matlab komutlarını yazınız.<br />

MATLAB`DA İKİ DEĞİŞKENİN DEĞERİNİN YER DEĞİŞTİRMESİ<br />

X ve y gibi iki değişkenin değerlerinin yer değiştirmesi için ilk olarak geçici bir değişken<br />

oluşturulur. X` in değeri geçici bir değişkene atanır. Daha sonra y`nin değeri x e atanır. Son olarak<br />

geçici değişkenin değeri y ye atanır.<br />

Matlab da verilen bir A dizisinin (satır vektörünün) elemanlarının küçükten büyüğe veya büyükten<br />

küçüğe sıralamak için sort(A) fonksiyonu kullanılır. Biz bu işlemi kendimiz yapmaya çalışacağız.<br />

ÖRNEK: Elemanları 1 ile 50 arasında değişen 10 elemanlı rastgele oluşturulan bir dizinin<br />

elemanlarını küçükten büyüğe doğru sıralayıp, dizinin sıralanmış halini ekrana yazan matlab<br />

komutlarını yazınız.<br />

SELECTION SORT (Seçmeli Sıralama Algoritması)<br />

A=round(rand(1,10)*49+1);<br />

for i=1:length(A)<br />

min=i;<br />

for j=i+1:length(A)<br />

if(A(j)


end<br />

A<br />

gecici=A(i);<br />

A(i)=A(min);<br />

A(min)=gecici;<br />

BUBBLE SORT (Kabarcık Sıralama Algoritması)<br />

B=round(rand(1,10)*49+1);<br />

for i=1:length(B)<br />

for j=length(B):-1:(i+1)<br />

if(B(j)


end<br />

end<br />

toc;<br />

Elapsed time is 8.652372 seconds.<br />

Elapsed time is 0.160322 seconds.<br />

10.12.2014 Çarşamba<br />

MATLAB FONKSİYONLARI<br />

M dosyalarının önemli kullanım alanlarından biriside fonksiyonlardır. Kısaca bir fonksiyon<br />

belirli görevi yerine getirmek için bir araya getirilmiş komutlardan oluşur.<br />

Matlab fonksiyonları bir veya daha fazla giriş parametresi alarak, yine bir veya daha fazla çıkış<br />

parametresi verirler. Hiç giriş ve çıkış parametresi olmayan fonksiyonlarda yazılabilir. Hatta<br />

fonksiyonun parametresi başka bir fonksiyon bile olabilir.<br />

Matlab fonksiyonları sistemde hazır bulunan (MathWorks firmasının yazmış olduğu<br />

fonksiyonlar) ve kullanıcılar tarafından yazılan fonksiyonlar olmak üzere iki gruba ayrılır.<br />

Sistem tarafından yazılan fonksiyonlar bir açıklamaya sahip oldukları için kolayca kullanılırlar.<br />

Sistem tarafından yazılan fonksiyonlar, her an kullanılabilir. Ancak kullanıcı fonksiyonları<br />

varsayılan (aktif) klasörde iseler kullanılırlar.<br />

Matlab herhangi bir değişkeni, fonksiyonu hatta M-dosyası ismini farklı görmez bu sebeple<br />

fonksiyon ismi (dolayısıyla m-dosyası ismi) verirken değişken isimlendirme kurallarına uyulmalıdır.<br />

Fonksiyon isimleri daima harfle başlamalıdır. Bunu harfler rakamlar ve “_” işareti<br />

izleyebilir.<br />

Büyük küçük harf duyarlılığı vardır.<br />

En fazla 63 karakter kullanılabilir.<br />

Bir fonksiyonun ismi, giriş parametreleri ve çıkış parametreleri fonksiyonun imzası(prototipi)<br />

olarak adlandırılır. Fonksiyon olan bir m-dosyası function anahtar kelimesi ile başlamalıdır (İLK<br />

SATIRDA) ve (son satırda ) end anahtar kelimesiyle bitmelidir.<br />

ÖRNEK: Verilen x parametresi için f(x)=1+x+…+x 15<br />

function [sonuc]=ilk(x)<br />

sonuc=0;<br />

for i=0:15<br />

sonuc=sonuc+x^i;<br />

end<br />

end<br />

9


Fonksiyon imzaları için aşağıdaki kalıplar kullanılır. (gp: giriş parametresi, cp: çıkış<br />

parametresi)<br />

Function cp=fonk_adi(gp)<br />

Function cp=fonk_adi(gp1,gp2,…,gpn)<br />

Function [cp1,cp2,…,cpn]=fonk_adi(gp)<br />

Function [cp1,cp2,…,cpn]= fonk_adi(gp1,gp2,…,gpn)<br />

Function cp=fonk_adi()<br />

Function fonk_adi(gp)<br />

Function fonk_adi()<br />

ÖRNEK: İki nokta arasındaki uzaklığı bulan matlab fonksiyonunu yazınız.<br />

function sonuc= uzaklik(A,B)<br />

% (x1,y1) ve (x2,y2) noktaları arasındaki<br />

% uzaklığı bulmak için kullanılır.<br />

%uzaklik([x1,y1],[x2,y2]) biçiminde çalıştırılır<br />

sonuc=sqrt((B(1)-A(1))^2+(B(2)-A(2))^2);<br />

end<br />

2.YOL:<br />

function sonuc= uzaklik(x1,y1,x2,y2)<br />

if(length(A)~=2)||(length(B)~=2)<br />

error(‘Yanlış giriş’);<br />

else<br />

% (x1,y1) ve (x2,y2) noktaları arasındaki<br />

% uzaklığı bulmak için kullanılır.<br />

%uzaklik(x1,y1,x2,y2) biçiminde çalıştırılır<br />

sonuc=sqrt((x2-x1))^2+(y2-y1)^2);<br />

end<br />

end<br />

ÖRNEK: x ve y birbirinden farklı olmak üzere<br />

|x|+|y|≤3<br />

Eşitsizliğini sağlayan tam sayı çiftlerini ekrana yazan bir matlab fonksiyonu yazınız.<br />

function mutlakdeger()<br />

clc;<br />

syc=0;<br />

for x=-3:3<br />

for y=-3:3<br />

if(x==y) continue;<br />

else<br />

10


if(abs(x)+abs(y)2)<br />

s=0;<br />

return;<br />

end<br />

end<br />

if(length(liste)==2)<br />

s=1;<br />

else<br />

s=0;<br />

end<br />

end<br />

ALT FONKSİYONLAR 17.12.14<br />

Çarşamba<br />

Matlab`da bir fonksiyon yazarken problemi alt fonksiyonlara bölmek hem okumayı<br />

kolaylaştırır hem de fonksiyonumuzu hızlandırır. Alt fonksiyonlar fonksiyon ile aynı belgeye yazılır. Ve<br />

yalnızca ana fonksiyon tarafından çağırılır. Diğer fonksiyonlar aynı aktif klasörde olsalar bile bu alt<br />

fonksiyonu çağıramazlar.<br />

ÖRNEK: Verilen bir sayıdan küçük olan tüm asal sayıların listesini veren bir matlab<br />

fonksiyonu yazınız.<br />

11


function [ liste ] = asallar( n )<br />

% verilen bir sayıdan<br />

% küçük olan asal sayıların listesini verir<br />

liste=[];<br />

tic;<br />

for i=1:n-1<br />

if (asalmi(i)==1)<br />

liste=[liste i];<br />

end<br />

end<br />

toc;<br />

end<br />

function sonuc=asalmi(n)<br />

liste=[];<br />

for i=1:n<br />

if (mod(n,i)==0)<br />

liste=[liste i];<br />

end<br />

end<br />

if(length(liste)==2)<br />

sonuc=1;<br />

else<br />

sonuc=0;<br />

end<br />

end<br />

Daha hızlı hali;<br />

function [ liste ] = asallar( n )<br />

% verilen bir sayıdan<br />

% küçük olan asal sayıların listesini verir<br />

liste=[];<br />

tic;<br />

for i=1:n-1<br />

if (asalmi(i)==1)<br />

liste=[liste i];<br />

end<br />

end<br />

toc;<br />

end<br />

function sonuc=asalmi(n)<br />

liste=[];<br />

for i=1:n<br />

if (mod(n,i)==0)<br />

liste=[liste i];<br />

if (length(liste)>2)<br />

sonuc=0;<br />

break;<br />

end<br />

end<br />

end<br />

if(length(liste)==2)<br />

sonuc=1;<br />

else<br />

sonuc=0;<br />

end<br />

end<br />

Matlab`da fonksiyonlar rekürsif(özyinelemeli) olarak çalışabilir. Ancak bu her zaman tehlikeli bir<br />

durumdur. Mutlaka fonksiyona bir bitim noktası koymanız gerekir.<br />

Örnek: Verilen bir sayının faktöriyelini alacak olan fonksiyonu kendisini çağıracak şekilde yazınız.<br />

12


function [ sonuc ] = faktoriyel( n )<br />

if(n


function [ sonuc ] = toplam( varargin )<br />

n=nargin;<br />

sonuc=0;<br />

for i=1:n<br />

sonuc=sonuc+varargin{i};<br />

end<br />

end<br />

Örnek: Giriş parametresi olarak girilen iki sayının toplamını verecek, eğer 3 sonuç istenirse<br />

toplamın karesi, n tane istenirse n. kuvvetine kadar tüm değerleri veren<br />

function [ varargout ] = toplacarp( varargin )<br />

n=nargin;<br />

c=nargout;<br />

if(c>6)<br />

error('abartma !');<br />

end<br />

sonuc=0;<br />

for i=1:n<br />

sonuc=sonuc+varargin{i};<br />

end<br />

varargout{1}=sonuc;<br />

for j=2:c<br />

varargout{j}=sonuc^j;<br />

end<br />

end<br />

Uygulama<br />

1: Girilen bir kelimenin polindrome olup olmadığını bulan matlab fonksiyonunu<br />

yazınız.(kabak,kazak vb. kelimeler polindromdur)<br />

function sonuc = polindrome( kelime )<br />

boyut=length(kelime);<br />

yarisi=fix(boyut/2); %fix aşağıya yuvarlar<br />

sonuc=1;<br />

for i=0:yarisi<br />

if (kelime(i+1)==kelime(boyut-i))<br />

continue;<br />

else<br />

sonuc=0;<br />

break;<br />

end<br />

end<br />

end<br />

24.12.2014 Çarşamba<br />

14


2: Verilen bir yarıçap değer için çemberin alanı ve çevresini hesaplayan fonksiyon yazınız.<br />

function A = cember(r)<br />

A=[];<br />

A(1)=pi*r*r;<br />

A(2)=2*pi*r;<br />

end<br />

% function [alan,cevre]=cember(r)<br />

% alan=pi*r*r;<br />

% cevre=2*pi*r;<br />

% end<br />

3: Alt fonksiyon ile iki sayının karelerinin toplamını bulan fonksiyon örneği<br />

function [ sonuc ] = kt( x,y )<br />

sonuc=karetopla(x,y);<br />

end<br />

function [ sonuc ] = karetopla( x,y )<br />

sonuc=x^2+y^2;<br />

end<br />

4: Öyle bir matlab fonksiyonu yazınız ki, fonksiyon tek parametre ile çalıştırılmış ise girilen sayının 5<br />

katını versin eğer iki parametre ile çalıştırılmış ise girilen sayıların toplamının 10 katını versin.<br />

function [ sonuc ] = ornek4( x,y )<br />

if nargin==1<br />

sonuc=x*5;<br />

elseif nargin==2<br />

sonuc=(x+y)*10;<br />

end<br />

end<br />

5: Verilen bir liste için bir tek çıkış parametresi isteniyor ise aritmetik ortalamayı eğer iki çıkış<br />

parametresi isteniyorsa standart sapmayı da veren bir fonksiyon yazınız.<br />

1<br />

∑ t<br />

x t i=1 i Aritmetik ortalama<br />

√ t ∑ x2−<br />

(∑ t=1 x i<br />

i)<br />

t(t − 1)<br />

function [ varargout ] = ornek5( N )<br />

tp=0;<br />

n=length(N);<br />

for i=1:n<br />

tp=tp+N(i);<br />

end<br />

sonuc=(1/n)*tp;<br />

varargout{1}=sonuc;<br />

if nargout==2<br />

t<br />

t<br />

2<br />

15


tp2=0;<br />

for i=1:n<br />

tp2=tp2+N(i)^2;<br />

end<br />

topkare=tp^2;<br />

pay=n*tp2-topkare;<br />

payda=n*(n-1);<br />

sonuc1=sqrt(pay/payda);<br />

varargout{2}=sonuc1;<br />

end<br />

end<br />

6: Kendisine parametre olarak girilen tüm sayıların 3.kuvvetlerinin toplamını bulan bir fonksiyon<br />

yazınız.<br />

function [ toplam ] = ornek6( varargin )<br />

toplam=0;<br />

for i=1:nargin<br />

toplam=toplam+varargin{i}^3;<br />

end<br />

end<br />

7: Verilen bir n değerine karşılık * lardan oluşan n satır ve n sütunlu bir üçgen çizen matlab<br />

fonksiyonunu yazınız.<br />

function ucgen( n )<br />

for i=1:n<br />

for j=1:i<br />

fprintf('*');<br />

end<br />

fprintf('\n');<br />

end<br />

end<br />

8: İkilik sayı sisteminde verilen bir sayıyı onluk sayı sistemine çeviren matlab fonksiyonunu yazınız.<br />

function [ sonuc ] = ornek8( sayi ) %101 girildi<br />

sonuc=0;<br />

ikili=num2str(sayi); %101 sayısını kelimeye çevirdik<br />

boyut=length(ikili); %kelimenin uzunluğunu aldık (3)<br />

kuvvet=boyut-1; % kuvvet(2)<br />

for i=1:boyut<br />

if str2num(ikili(i))>1 % eğer 101in içindeki<br />

elemanlar 1den büyükse hata ver sadece(1,0)olmak<br />

zorunda<br />

error('sayı istenilen formatta değil');<br />

else<br />

sonuc=sonuc+str2num(ikili(i))*2^kuvvet;<br />

kuvvet=kuvvet-1;<br />

end end %sonuc=5 end<br />

16


9: Onluk sisteminde verilen bir sayıyı ikili sayı sistemine çeviren matlab fonksiyonunu yazınız.<br />

function [ sonuc ] = ornek9( sayi )<br />

i=1;<br />

q=fix(sayi/2);<br />

r=rem(sayi,2);<br />

sonuc(i)=num2str(r);<br />

while (2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!