BM103 Programlamaya Giri Gz 2014 8 Sunu Yrd
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu) (Yrd. Doç. Dr. Deniz Dal)
BİR BİLGİSAYAR PROGRAMININ BİLEŞENLERİ • Algoritma • 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.
DİZİ KULLANIMINA ÖRNEKLER • Bu sınıftaki öğrencilerin BM 103 dersi final sınavı notlarını saklamak ve üzerinde işlem yapmak (ortalama, sapma vs. ), • Yerel seçimde bu binada oy kullanacak kişilerin isimlerini saklamak, • Hızlı erişim için Fibonacci serisinin ilk 10 terimini saklamak gibi işlemlerde dizilerden faydalanabiliriz.
MATLAB’DE DİZİLER • Bir dizi vektör veya matris olabilir. • nx 1 veya 1 xm dizisi bir vektör gösterir. • Bu çerçevede nx 1 dizisi sütun vektörü ve 1 xm 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 B(length(B)) hangi amaçla kullanılabilir?
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('A(%d)=%dn', i, 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 satir. Vektoru=ilk. Deger: artım. Miktarı: son. Deger artim. Miktarı belirtilmezse ilk. Deger 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('%dn', 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 Dizinin. Maksimumunu. Bul. m adında bir fonksiyon m-dosyasının içerisine yazınız. Dizinin. Maksimumunu. Bul. m function en. Buyuk=Dizinin. Maksimumunu. Bul(A) KOMUT PENCERESİ en. Buyuk=A(1); %Dizinin İlk Elemanı En Büyük Olsun >>B= [2, %Kaç 4, -5, 6, Elemanlı 7, 99, -132, Bir 126]; Vektör Acaba? for i=2: length(A) >>Dizinin. Maksimumunu. Bul(B) if A(i)>en. Buyuk ans= en. Buyuk=A(i); 126 end >>Dizinin. Maksimumunu. Bul( [2, 4, -5, 6, 7, 99, -132, 126] ) ans= end 126
SORULAR… v Bir A satır vektörünün elemanlarının toplamı v Bir A satır vektörünün aritmetik ortalaması v Bir A satır vektörünün harmonik ortalaması v Bir A satır vektörünün elemanlarının çarpımı v Bir A satır vektörünün geometrik ortalaması v 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.
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 Araliktaki. Ciftleri. Bul. 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 depo. Vektor=Araliktaki. Ciftleri. Bul(alt. Limit, ust. Limit) depo. Vektor=[ ]; %Başlangıçta Boş Bir Satır Vektörü KOMUT PENCERESİ >>Araliktaki. Ciftleri. Bul(1, 10) if Cift. Sayi. Mi(i)%Geriye 1 veya 0 Döndüren Alt Fonksiyon ans= 2 4 6 8 i]; %Depo 10 depo. Vektor=[depo. Vektor Vektörün Sonuna Ekle >>Araliktaki. Ciftleri. Bul(10, 1) %depo. Vektor=[i depo. Vektor]; ans= end [] for i=alt. Limit: ust. Limit end
Aksine Örnek Bulma Yöntemi ile İspat 2014 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 Dizi. Sadece. Birler. Mi. Iceriyor. m adındaki fonksiyon mdosyasının içerisine yazınız.
ÇALIŞMAYAN ÇÖZÜM function sonuc=Dizi. Sadece. Birler. Mi. Iceriyor(B) for i=1: length(B) if B(i)==1 sonuc=1; else sonuc=0; PENCERESİ KOMUT >>Dizi. Sadece. Birler. Mi. Iceriyor([-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=Dizi. Sadece. Birler. Mi. Iceriyor(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İ >>Dizi. Sadece. Birler. Mi. Iceriyor(ones(1, 10)) sonuc=0; %Kabulü Değiştir ans= 1 break; %return Komutu da Kullanılabilir >>Dizi. Sadece. Birler. Mi. Iceriyor([1 1 1 25 1]) end ans= end 0
KİTAPTAKİ 23. 1 -23. 56 ARASI UYGULAMALARI BİRLİKTE YAZALIM VE ÇALIŞTIRALIM.
- Slides: 22