Bilgisayar Programlama Güz 2011

Slides:



Advertisements
Benzer bir sunumlar
DİZİLER – I. Kısım YRD.DOÇ.DR. CİHAD DEMİRLİ
Advertisements

Makine Müh. & Jeoloji Müh.
Bilgisayar Programlama Güz 2011
EKRAN ÇIKTISI.
Bilgisayar Programlama Güz 2011
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
Ayrık Yapılar Matlab Notları
String Diziler(Katarlar)
Bölüm 2: Program Denetimi
MATLAB’de Diziler; Vektörler ve MAtrisler
MATLAB’İN SAYI YUVARLAMA FONKSİYONLARI
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
MATLAB’ de Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
Nesneye Yönelik Programlama
T-SQL-2.Konu Akış Kontrolleri.
Yapısal Program Geliştirme – if, if-else
Program Kontrol İfadeleri
Bilgisayar Programlama (Yrd. Doç. Dr. İbrahim ASRİ)
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
Bilgisayar Programlama Güz 2011
6. HAFTA
Görsel C# ile Windows Programlama
MATLAB temel komutlar ve fonksiyonlar.
Nesneye Yönelik Programlama
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Bilgisayar Programlama Güz 2011
BM-103 Programlamaya Giriş Güz 2014 (7. Sunu)
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
NESNEYE YÖNELİK PROGRAMLAMA
MATLAB’te Döngüler.
BM-103 Programlamaya Giriş Güz 2014 (4. Sunu)
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
BM-103 Programlamaya Giriş Güz 2014 (9. Sunu)
MATLAB’ de Programlama
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bilgisayar Programlama Güz 2011
Algoritmalar ve Programlama I Ders 2: Akış Diyagramları
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BM-103 Programlamaya Giriş Güz 2012 (3. Sunu)
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Sayısal Analiz / Uygulama
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
DİJİTAL GÖRÜNTÜ İŞLEME Y. Doç. Dr. Esra Tunç Görmüş
BİLGİSAYAR PROGRAMLAMA DERSİ 4. DERS NOTU Konu: M-dosya yapısı ve Kontrol Yapıları 1.
BİLGİSAYAR PROGRAMLAMA DERSİ 6. DERS NOTU Konu: Matlab’ de Diziler ve Matrisler.
7. HAFTA.
PHP'de Program Denetimi
Bilgisayar Programlama BIL 107
Fonksiyonlar ve Diziler
MATLAB R2013’e Giriş.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BM-103 Programlamaya Giriş Güz 2016 (4. Sunu)
BM-103 Programlamaya Giriş Güz 2016 (8. Sunu)
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BM-103 Programlamaya Giriş Güz 2016 (5. Sunu)
BM-103 Programlamaya Giriş Güz 2016 (7. Sunu)
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BM-103 Programlamaya Giriş Güz 2012 (6. Sunu)
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
İleri Algoritma Analizi
BM-103 Programlamaya Giriş Güz 2016 (6. Sunu)
Sunum transkripti:

Bilgisayar Programlama Güz 2011 MF-103 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 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) %birsey yap end while ~RakamlariFarkliMi(n) %birsey yap end

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

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)

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 Donduren Alt Fonksiyon teklerSayaci=teklerSayaci+1; end KOMUT PENCERESİ >>AraliktakiTeklerinSayisiniHesapla(1,100) ans= 50

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.

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.

ÇÖZÜM 1 ÇÖZÜM 2 DÜZYAZI M ÇÖZÜMLER 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 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'); 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); DÜZYAZI M ÇÖZÜMLER

ÇÖZÜM 3 1. FONKSİYON M ÇÖZÜM 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ü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

ÇÖZÜM 4 2. FONKSİYON M ÇÖZÜM 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); İ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

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.

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;%Sayinin Cift Sayi Olmadigini Kabul Et if mod(sayi,2)==0 sonuc=1;%Baslangic Kabulunu Degistir end KOMUT PENCERESİ >>CiftSayiMi(8) ans= 1 >>CiftSayiMi(9)

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.

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.

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.

DizininMaksimumunuBul.m 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 ilk elemani en buyuk olsun for i=2:length(A) %Kac elemanli bir vektor acaba? if A(i)>enBuyuk enBuyuk=A(i); end KOMUT PENCERESİ >>B= [2, 4, -5, 6, 7, 99, -132, 126]; >>DizininMaksimumunuBul(B) ans= 126 >>DizininMaksimumunuBul( [2, 4, -5, 6, 7, 99, -132, 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=[ ]; %Baslangicta Bos 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=[ ]; %Baslangicta Bos 1. RESİM A=[A x]; %A=[x] A=[A y]; %A=[x y] Son eklenen dizi elemanı dizinin son elemanı oluyor. 2. RESİM A=[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.

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

UYGULAMA 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. (1,10) ve (10,1) şeklindeki parametre aktarımlarının her ikisinde de aynı sonucu üretecek fonksiyonu nasıl yazardınız? Programın çalışabilmesi için bu alt fonksiyonun çalışma dizini altında tanımlı olması (mevcut olması) gereklidir. 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 KOMUT PENCERESİ >>AraliktakiCiftleriBul(1,10) ans= 2 4 6 8 10 >>AraliktakiCiftleriBul(10,1) [ ]

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.

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 KOMUT PENCERESİ function sonuc=DiziSadeceBirlerMiIceriyor(B) for i=1:length(B) if B(i)==1 sonuc=1; else sonuc=0; end KOMUT PENCERESİ >>DiziSadeceBirlerMiIceriyor([-8 4 6 25 1]) ans= 1

ÇALIŞAN ÇÖZÜM KOMUT PENCERESİ 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 KOMUT PENCERESİ >>DiziSadeceBirlerMiIceriyor(ones(1,10)) ans= 1 >>DiziSadeceBirlerMiIceriyor([1 1 1 25 1])

KİTAPTAKİ 58-102 ARASI UYGULAMALARI BİRLİKTE YAZALIM VE ÇALIŞTIRALIM.