MF102 Bilgisayar Programlama MATLAB Lecture7

advertisement
BM-103
Programlamaya Giriş
Güz 2012
(7. Sunu)
(Yrd. Doç. Dr. Deniz Dal)
BİR BİLGİSAYAR PROGRAMININ
BİLEŞENLERİ
• Algoritma
• Veri
• Veri Yapısı (Data Structure)
DİZİLER
• Dizi (array), en temel veri yapısıdır ve kabaca
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
tam sayıyı 100 farklı değişken içinde saklamak
yerine bu amaçla içinde 100 tam sayı 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.
MATLAB’DE DİZİLER
• Bir 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.
MATLAB’DE TEK BOYUTLU DİZİLER
(SATIR VEKTÖRLERİ) VE length
Fonksiyonu
MATLAB’DE TEK BOYUTLU DİZİLER
(SÜTUN VEKTÖRLERİ) VE length
Fonksiyonu
İ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
İPUCU
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ü.)
SATIR VEKTÖRLERİNİN İÇERİSİNİN
OTOMATİK OLARAK SAYILARLA
DOLDURULMASI
satirVektoru=ilkDeger:artımMiktarı:sonDeger
artimMiktarı belirtilmezse ilkDeger den sonra 1’er artım
olacağı anlaşılır.
for DÖNGÜSÜNÜN BİR BAŞKA
KULLANILIŞ ŞEKLİ
for i=[4 6 8 10 12 14 -1 7]
fprintf('%d\n',A(i));
end
UYGULAMA
Kendisine 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 İlk Elemanı En Büyük Olsun
KOMUT
PENCERESİ
for i=2:length(A) %Kaç Elemanlı
Bir Vektör
Acaba?
>>B= [2, 4, -5, 6, 7, 99, -132, 126];
if A(i)>enBuyuk
>>DizininMaksimumunuBul(B)
enBuyuk=A(i);
ans=
end
126
end
>>DizininMaksimumunuBul( [2, 4, -5, 6, 7, 99, -132, 126] )
ans=
126
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
BİR SATIR VEKTÖRÜNÜN BİLGİ
DEPOLAMAK AMACIYLA KULLANILMASI
A=[ ]; %Başlangıçta Boş
1. METOD
A=[A x]; %A=[x]
A=[A y]; %A=[x y]
2. METOD
A(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.
İKİ RESİM ARASINDAKİ 10 FARKI BULUNUZ 
A=[ ]; %Baslangıçta Boş
1. RESİM
A=[A x]; %A=[x]
A=[A y]; %A=[x y]
2. RESİM
A=[x A]; %A=[x]
A=[y A]; %A=[y x]
Son eklenen dizi elemanı dizinin
son elemanı oluyor.
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.
>>A=[ ]
>>A=[A 1]
>>A=[A 2]
>>A=[3 A]
UYGULAMA
Kendisine
olarak aldığı
bir alt limit ile bir üst
(1,10) veparametre
(10,1) şeklindeki
parametre
limit
arasındakiher
çiftikisinde
sayıları
bir satır vektörü
aktarımlarının
debularak
aynı sonucu
üretecek geriye
fonksiyonu
nasıl yazardınız?
içerisinde
döndüren
bir MATLAB fonksiyonunu
Programın
çalışabilmesi
AraliktakiCiftleriBul.m
adındaki
fonksiyon için bu alt
fonksiyonun
çalışma dizini altında tanımlı
m-dosyasının içerisine
yazınız.
olması (mevcut olması) gereklidir.
function depoVektor=AraliktakiCiftleriBul(altLimit,ustLimit)
depoVektor=[ ];%Başlangıçta Boş Bir Satır Vektörü
KOMUT PENCERESİ
>>AraliktakiCiftleriBul(1,10)
if CiftSayiMi(i)%Geriye
1 veya 0 Döndüren Alt Fonksiyon
ans=
2 4 6 8 i];%Depo
10
depoVektor=[depoVektor
Vektörun Sonuna Ekle
>>AraliktakiCiftleriBul(10,1)
%depoVektor=[i depoVektor];
ans=
end
[]
for i=altLimit:ustLimit
end
Aksine Örnek Bulma Yöntemi ile İspat
2012 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.
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.
ÇALIŞMAYAN ÇÖZÜM
function sonuc=DiziSadeceBirlerMiIceriyor(B)
for i=1:length(B)
if B(i)==1
sonuc=1;
else
sonuc=0;PENCERESİ
KOMUT
>>DiziSadeceBirlerMiIceriyor([-8
4 6 25 1])
end
ans=
end
1
ÇALIŞAN ÇÖZÜM
Dizideki 1’lerin sayısı dizinin eleman
sayısına
eşit midir kontrolü yapan
function
sonuc=DiziSadeceBirlerMiIceriyor(B)
algoritma da kullanılabilir mi?
sonuc=1;%Dizinin Sadece 1 Değeri İçerdiğini Kabul Et
for i=1:length(B)
if B(i)~=1%En
Az 1 Adet
Aksi Örnek Mevcutsa
KOMUT
PENCERESİ
>>DiziSadeceBirlerMiIceriyor(ones(1,10))
sonuc=0;%Kabulü Değiştir
ans=
1break;%return Komutu da Kullanılabilir
>>DiziSadeceBirlerMiIceriyor([1
1 1 25 1])
end
ans=
end
0
KİTAPTAKİ 23.1-23.56 ARASI
UYGULAMALARI BİRLİKTE
YAZALIM VE ÇALIŞTIRALIM.
Download