You are on page 1of 351

Bilgisayar Programlama

MATLAB
(1. Sunu)
ANALİZ: Çözülmesi istenen problemin tamamen
anlaşılmasını sağlayacak ön çalışmalardır.
ALGORİTMA GELİŞTİRME: Problemi çözecek
adımların sıralı olarak ifade edilmesidir.
AKIŞ ŞEMASI ÇİZİMİ: Geliştirilen algoritmanın şekillerle
ifade edilmesidir.
PROGRAMLAMA DİLİ SEÇİMİ: Geliştirilen algoritmayı
kolay bir şekilde bilgisayar ortamına aktaracak bir
bilgisayar programlama dilinin seçilmesidir.
PROGRAMIN YAZILMASI: Seçilen programlama dilinin
kuralları kullanılarak programın yazılması aşamasıdır.

DERLEME: Programlama dili komutlarına dönüşmüş


çözümün yazım hatalarının olup olmadığının kontrol edilmesi
ve programın makina dili komutlarına çevrilmesidir.
ÇALIŞTIRMA: Derlenmiş programın işletim sistemi
tarafından hard diskten alınarak belleğe taşındığı ve
programın ilk komutunun adresinin Merkezi İşlem
Birimine bildirildiği aşamadır.
TEST: Programın mantıksal olarak test edildiği ve
muhtemel her giriş için doğru sonuçlar üretip
üretmediğinin kontrol edildiği aşamadır.
Problem çözümü kısmında anlatılan adımlar
uygulandıktan sonra ortaya çıkan ve sorunumuzu
bilgisayar ortamında çözen ürüne program denir.

Problem çözümünde anlatılan adımların tümüne


birden programlama denir.
Bir problemin algoritmik çözümünün bilgisayarda
yazılmasını sağlayan kurallar dizisidir.

• MATLAB, Delphi, Pascal, Fortran, Lisp


• C, C++, C#, Visual Basic, Java
 Belirli bir problemi çözmek için işletilmesi gereken
adımları ve bu adımların hangi sıra ile
uygulanacağını belirleyen prosedüre algoritma denir.
 “İşine gitmek üzere uyanan birinin yapması
gereken işler” algoritması:
1. Yataktan kalk
2. Pijamalarını çıkar
3. Duş al
4. Elbiselerini giy
5. Kahvaltını yap
6. Arabana bin ve işe git
 Sıra önemli. 3 ve 4 nolu adımlar yer değiştirirse
mesela? (Kim ıslanmak ister? )
Pasta tarifi bir
algoritma mıdır?
1–Değişken
2–Atama
3–Fonksiyon
4–Sayaç
5–Döngü
Değişken denince
aklınıza saklama
kapları gelmelidir.

Bir program içerisinde bilgileri geçici olarak saklamak ve ihtiyaç


duyduğumuzda bu bilgiler üzerinde işlem yapmak için
değişkenlerden yararlanırız.
Herhangi bir değişkenin içine bir değeri veya
ifadenin/işlemin sonucunu aktarma işlemine atama
denir.
değişken = ifade
satırında ‘değişken’ yazan kısım, herhangi bir değişkenin adıdır. ‘ifade’ yazan
kısımda ise matematiksel, mantıksal veya alfa-nümerik bir ifade olabilir.
Aradaki ‘=’ sembolü, ‘atama operatörü’ olarak adlandırılır ve sağdaki
ifadenin/işlemin sonucunu soldaki değişkene aktarır. Bu durumda değişkenin
(eğer varsa) bir önceki değeri (eski değeri) silinir.
Y=9
X=26
X=3
Y=X+5
işleminin sonucunda Y’nin bir önceki değeri silinerek yerine 8 değeri atanır.
Bir giriş parametresini(lerini)
(argümanlarını) belirli bir
işlemden geçirdikten sonra
geriye bir çıkış
parametresi(leri) döndüren
programlara fonksiyon denir.

Kıyma makinesi parça


eti kıymaya
dönüştüren bir
fonksiyona sahiptir.
Programlarımızda bazı işlemlerin belirli
sayıda yaptırılması veya
işlenen/üretilen değerlerin sayılması
gerekebilir. Sayma amacıyla kullanılan
bu tür değişkenlere sayaç denir.
Örneğin klavyeden girilen bir cümlede
kaç sesli harf olduğunu bulan
programda, cümlenin her harfi sırayla
çağrılır ve sesli harfler kümesine ait
olup olmadığı araştırılır. Eğer çağrılan
harf bu kümeye ait ise bunları sayacak
olan değişkenin değeri bir artırılır.
sayac = sayac + 1
bilgisayar deyimi ile sayac adlı değişkenin eski
(önceki) değerine ‘1’ eklenmekte; bulunan sonuç
yine kendisine, yeni değer olarak aktarılmaktadır.
Bu tür değişkenlere, algoritmada “sayaç” veya
“sayıcı” (counter) adı verilir. Yani “sayaç”
işlem akışı kendisine her geldiğinde, belirtilen
adım değeri kadar artan/azalan değişkendir.
‘Sayaç’ kullanımına örnek:

sayac=sayac+3 Üçer üçer artan bir sayıcıdır


sayac=sayac-5 Beşer beşer azalan bir sayıcıdır
Aşağıdaki algoritmada 1-5 arası sayılar (1 dahil, 5 hariç),
sayaç kullanılarak ekrana yazdırılmaktadır. Burada, sayac
sayaç değişkenidir.
A1: Başla
A2: sayac=1
A3: Eğer sayac 5’e eşit ise adım 7 ye git
A4: sayac ı ekrana yaz
A5: sayac=sayac+1
A6: 3. adım’ a git
A7: Bitir

Hangi amaçlarla kaç değişkene ihtiyaç var?


Birçok programda bazı
işlemler belirli ardışık
değerlerle gerçekleştirilmekte
veya belirli sayıda
yapılmaktadır. Programlardaki
belirli işlem bloklarını, belirli
sayıda tekrarlayan işlem akış
çevrimlerine döngü denir.
1- Döngü değişkeninin başlangıç değeri belirlenir.
2- Döngü değişkeninin bitiş değeri belirlenir.
3- Döngü değişkeninin bitiş değerine ulaşıp
ulaşmadığı test edilir.
4- İstenen işlem gerçekleştirilir.
5- Döngü değişkeni, döngü içinde adım miktarı
kadar artırılır yada azaltılır.
Aşağıdaki algoritmada 1-10 arası tek sayıların toplamı hesaplanmaktadır.
(Aşağıdaki algoritmayı çift sayıların toplamına hangi değişikliği yaparak
dönüştürebilirsiniz?)
A1: Başla
A2: toplam=0
A3: sayac=1
Döngü
A4: Eğer sayac>10 ise adım 8 e git
A5: toplam=toplam+sayac
A6: sayac=sayac+2
A7: Adım 4 e git
A8: toplam ı ekrana yaz
A9: Bitir Hangi amaçlarla kaç değişkene ihtiyaç var?
Dışarıdan girilen iki sayının toplamını bulan programın algoritması
aşağıdaki gibidir.

A1 : Başla

A2 : sayi1 değerini gir


Hangi amaçlarla kaç değişkene ihtiyaç var?
A3 : sayi2 değerini gir

A4 : toplam= sayi1+sayi2

A5 : toplam ı ekrana yaz

A6 : Bitir
Dışarıdan girilen 3 sayıdan en büyüğünü bulan
algoritmayı geliştiriniz.

A1 : Başla
A2 : sayi1, sayi2 ve sayi3 sayılarını dışarıdan gir
A3 : enBuyuk=sayi1
A4 : Eğer sayi2>enBuyuk ise enBuyuk=sayi2 yap
A5 : Eğer sayi3>enBuyuk ise enBuyuk=sayi3 yap
A6 : enBuyuk değerini ekrana yaz
A7 : Bitir
0’dan 100’e kadar olan sayma sayılarının
kümülatif toplamını ekrana yazdıran algoritmayı
geliştiriniz.

A1 : Başla
A2 : toplam=0;sayac=1 başlangıç değerlerini ata
A3 : Eğer sayac 100’e eşit ise 6. adıma git
A4 : toplam=toplam+sayac
A5 : sayac=sayac+1 yap ve 3. adıma geri dön
A6 : toplam ı ekrana yaz
A7 : Bitir
Verilen bir sayının faktöriyelini hesaplayan programın algoritmasını yazınız.
(Faktöriyeli hesaplanacak sayı negatif girilmişse yeniden giriş istenmelidir.)

Değişkenler:
Sayının Faktöriyeli : faktor , Faktöriyel Değişkeni :sayac
Faktöriyeli Hesaplanacak Sayı :Y

Algoritma:
A1: Başla Anlamlı Değişken İsimleri
A2: faktor =1; sayac =1 Seçmek Çok Önemli !!!!!!!!!!!!
A3: Y’yi gir
Hangi amaçlarla kaç değişkene ihtiyaç var?
A4: Eğer Y<0 ise 3. adima git
A5: Eğer sayac>Y ise adim 8 e git
A6: faktor=faktor*sayac
A7: sayac =sayac+1 yap ve adım 5 e git
A8: faktor degerini ekrana yaz
A9: Bitir
Akış diyagramları, algoritmaların sembolik olarak gösterimidir. Bilgisayarda
gerçekleştirilecek her tür aksiyon ayrı bir sembolle gösterilir.
Verilen iki sayının ortalamasını Akış diyagramı: Başla
hesaplayan programın algoritmasını
geliştiriniz ve akış diyagramını çiziniz.
sayi1=?
Algoritma:

A1 : Başla
sayi2=?

A2 : sayi1 değerini gir

A3 : sayi2 değerini gir ortalama=(sayi1+sayi2)/2

A4 : ortalama = (sayi1+sayi2)/2
ortalama
A5 : ortalama degerini ekrana yaz

A6 : Bitir Bitir
AX+B=0 şeklinde verilen 1. derece denklemin
çözümünü bulan programın algoritmasını geliştiriniz
ve akış diyagramını çiziniz. (A=0 girilmiş ise veri
girişi yenilenecektir.)

Hangi amaçlarla kaç değişkene ihtiyaç var?


1’den 100’e kadar olan sayıların (100 dahil) toplamını
ve ortalamasını bulan algoritmayı geliştiriniz.

Algoritma:
A1: Başla
A2: sayac=0
A3: toplam=0
A4: sayac=sayac+1
A5: toplam=toplam+sayac
A6: Eğer sayac 100’e eşit değilse Adım 4’e git
A7: ortalama=toplam/sayac
A8: Yaz toplam, ortalama
A9: Bitir

Hangi amaçlarla kaç değişkene ihtiyaç var?


Uygulama: Daha önce algoritması geliştirilen ve dışarıdan girilen 3
sayıdan en büyüğünü bulan programın akış diyagramını çiziniz.

Uygulama: Daha önce algoritması geliştirilen ve dışarıdan girilen bir


sayının faktöriyelini hesaplayan programın akış diyagramını çiziniz.
f(X) fonksiyonunun değeri X'in aldığı
değerlere göre aşağıda verilmiştir. X'in
değeri 0-20 arasında 0.5 aralıklarla
arttığına göre her bir X değeri için f(X)
fonksiyonunu hesaplayan programın akış
diyagramını çiziniz.

0<= X <= 2 f(X)=X


2< X <= 3 f(X)=X-X3-22
3< X <=4 f(X)=X2-2X+13
4< X f(X)=X4-3X2-43

Algoritma: ???
Ax²+Bx+C=0 şeklinde verilen 2. derece denklemin köklerini bulan
programın akış diyagramını çiziniz. (İkinci derece denklem olmadığı
uyarısını nasıl verirsiniz?)
10 tane N sayısının
faktöriyelini hesaplayan
programın akış
diyagramını çiziniz.
(Yandaki diyagramdaki
sorunları bulunuz.)
Kenar uzunlukları dışarıdan girilen bir ABC üçgenini kenar
uzunluklarına göre inceleyen programın algoritmasını kurunuz.

A1: Başla
A2: A,B,C değerlerini gir
A3: A=B ise A4’e git değilse A5’e git
A4: B=C ise A6’ya git değilse A8’e git
A5: A=C ise A8’e git değilse A7’e git
A6: ‘Üçgen Eşkenardır’ yazdir ve A10’a git
A7: B=C ise A8’e git, değilse A9’a git
A8: ‘Üçgen İkizkenardır’ yazdir ve A10’a git
A9: ‘Üçgen Çeşitkenardır’ yazdir
A10: Bitir Hangi amaçlarla kaç değişkene ihtiyaç var?
A1 Başla

A2 A,B,C Gir

A3 Eşkenar : A=B=C
H E
A=B İkizkenar: A=B veya
A=C veya
B=C
Çeşitkenar: A=B=C
A5 A4 A6
H E H E
A=C B=C Eşkenar

A7 A8
H E
B=C İkizkenar

A9
Çeşitkenar Bitir
A10
Bilgisayar Programlama
MATLAB

2.SUNU
MATLAB

MATLAB, bilim adamları ve mühendislere, matrislere dayalı problemleri


Fortran ve C gibi dillerden farklı olarak program yazmaksızın çözmede
kullanılmak üzere bir sayısal hesaplama kütüphanesi (MATris
LABoratuvarı (MATrix LABoratory)) olarak tasarlanmıştır. Daha sonraları
ise birçok toolbox eklenerek geliştirilmiştir. MATLAB 1970’lerin sonunda
Cleve Moler tarafından yazılmıştır. Cleve Moler aynı zamanda “The
MathWorks” firmasının da kurucusudur.

MATLAB bir yorumlayıcıdır (interpreter). Bir derleyiciye (compiler)


ihtiyaç duyan programlama dillerinden farklı olarak bir MATLAB
programı her çalıştırıldığında satır satır makina diline çevrilir.
MATLAB Programının Tipik Kullanım Alanları

• Algoritma geliştirme ve kod yazmada (programlama),


• Matematiksel hesaplama (nümerik ve sembolik) yapmada,
• Lineer cebir, istatistik, Fourier Analizi, filtreleme, optimizasyon,
sayısal integrasyon vb. konularda hazır matematik
fonksiyonlara ulaşabilmede,
• 2D ve 3D grafikler çizmede,
• Modelleme ve simülasyon yapmada,
• Grafiksel arayüz oluşturmada,
• Veri analizi ve kontrolü gerçekleştirmede.
MATLAB için Ücretsiz Alternatif: OCTAVE

 John W. Eaton ve arkadaşları tarafından geliştirilen ve ilk


versiyonu 1993 yılında kullanıma sunulan matematiksel yazılım
kütüphanesi ve aynı zamanda programlama dilidir.

 Yazılım ismini, John W. Eaton’nun hocası olan Profesör Octave


Levenspiel(1926-2017) den almaktadır.

 OCTAVE her türlü sayısal analiz işleminde kullanılmak amacıyla


geliştirilmiş ve ticari bir yazılım olan MATLAB
(www.mathworks.com) ile hemen hemen aynı yazılım kuralları ve
yazılım kütüphanesine sahiptir.

 Genelde gerekli görülebilen çok az sayıda düzenleme ile


MATLAB programları OCTAVE ortamında ve OCTAVE
programları da MATLAB ortamında çalıştırılabilir.
OCTAVE

 GNU OCTAVE ya da kısaca OCTAVE, öncelikli olarak sayısal


hesaplamalar için tasarlanmış yüksek seviyeli bir dildir.

 Özgür ve ücretsiz bir yazılımdır. (https://www.gnu.org/software/octave/)


sayfasından ücret ödemeden indirilip bilgisayarınıza kurabilirsiniz.
 Eğer OCTAVE’ı kurmak mümkün değilse (https://octave-online.net/)
sayfasından online olarak da kullanılabilir.

 Ticari karşılığı olan MATLAB ile çoğunlukla uyumlu bir dil kullanır.
 Fakat, ne yazık ki OCTAVE tüm MATLAB özelliklerini
kapsamamaktadır.
OCTAVE Kullanıcı Arayüzü
MATLAB Programlama Ortamının Tanıtımı

! Lütfen Herkes MATLAB Programını Çalıştırsın !

MATLAB PROGRAMLAMA ORTAMI


1. Başlat Menüsü (Start)
2. Komut Penceresi (Command Window)
3. Çalışma Alanı (Workspace)
4. Çalışma Dizini (Current Folder)
5. Komut Geçmişi (Command History)
6. Metin Düzenleyicisi (Editor)

!! MATLAB programlama ortamını ilk açılıştaki haline getirmek için


Desktop->Desktop Layout->Default komutunu çalıştırınız. !!
MATLAB Programlama Ortamının Tanıtımı
Matlab versiyonu Yardım

Metin düzenleyicisi (Editor)

Çalışma Alanı
(Workspace)
Çalışma Dizini
(Current Folder)

Komut Penceresi (Command Window)

Komut Satırı (Command Prompt)


Komut Penceresi: MATLAB ile iletişim kurulan ana penceredir.
MATLAB yorumlayıcısı, kullanıcıdan gelecek komutları kabul etmeye
hazır olduğunu gösteren “ >> ” biçiminde bir simge görüntüler. Örneğin,
4*25+6*52+2*99 gibi basit bir matematiksel işlemi yapmak için

>> 4*25+6*52+2*99 ifadesini yazıp ENTER tuşuna basarız.

ans=
610
Komut Satırında Yanlışların Düzeltilmesi: Klavyede yer alan ok tuşları
komut satırında yapılan yanlışlıkların düzeltilmesine imkan verir. Bunlar
yukarı “↑” aşağı “↓” sol “←” sağ “→”. Yukarı tuşu yardımıyla bir
önceki satır tekrar görüntülenerek sağ ve sol tuşları ile yanlış yazılı yere
imleç taşınarak düzenleme gerçekleştirilir.
Sonucun Ekranda Görüntülenmesini Gizleme: Bir deyim yazıp, ENTER
tuşuna basınca sonuçlar ekranda otomatik olarak görüntülenir. Buna
karşılık, deyimin sonuna “ ; ” ilave edilecek olursa yapılan hesaplamalar
ekranda görüntülenmez.
MATLAB’DE DEYİMLER VE BİLEŞENLERİ

MATLAB komut penceresinden doğrudan çalıştırılabilen ya da bir MATLAB


dosyası içerisine kaydedilebilen ve MATLAB tarafından yorumlanabilen her
şey MATLAB deyimidir. MATLAB deyimleri değişkenler, rakamlar,
operatörler ve fonksiyonlar kullanılarak oluşturulurlar.

Değişkenler: Deyimler içerisinde sayısal değerlerin yerini alan ifadelerdir.


MATLAB bir değişken ile karşı karşıya geldiğinde, otomatik olarak bu
değişken oluşturulur ve yeteri kadar bellek ayrılır. Eğer değişken daha
önceden tanımlı ise MATLAB onun içeriğini değiştirir ve gerekirse yeni
bellek ayırır.

Örneğin, >> x=50


komut satırından işletildiğinde MATLAB “x” adında bir değişken oluşturur
ve 50 değerini bu değişkene atar.

Diğer bilgisayar dillerinde olduğu gibi MATLAB’in de değişken isimleri


konusunda bazı kuralları vardır.
Değişken Tanımlama Kuralları
1. Değişken isimleri daima bir harf ile başlamalıdır. İlk harfi başka harfler,
rakamlar ve alt çizgiler ( _ ) izleyebilir. Örneğin 1sayi uygun bir değişken ismi
değilken, sayi_1 kullanılabilir bir değişken adıdır.

2. Değişken isimleri noktalama işaretleri ve boşluk(lar) barındırmamalıdır.


sayi.1 veya sayi 2 (2 den önceki boşluğa dikkat) şeklinde tanımlanan
değişken adları bu kural ihlalinin iki örneğidir.

3. Değişken isimleri içerisinde Türkçemize özgü küçük veya büyük “ç, ğ, ı, ö,


ş, ü” karakterleri kullanılmamalıdır.

4. Değişken isimlerinin küçük ve büyük harf kullanımına duyarlı olduğu


unutulmamalıdır. orta, Orta, ORTA veya orTa adlı değişkenler MATLAB için
farklı değişkenlerdir.

5. Değişken isimleri en fazla 63 karakter içerebilir ve bundan fazlası MATLAB


tarafından dikkate alınmaz.
DEĞİŞKENLERİN İSİMLENDİRİLMESİ
 Değişkenler ve daha sonraki bölümlerde göreceğimiz fonksiyonlar
muhakkak kullanım amaçları dikkate alınarak ve anlamlı bir şekilde
isimlendirilmelidirler.

 Örneğin kullanıcıdan klavye yoluyla alınacak ve ortalamaları hesaplanacak


üç sayı a, b, c veya x, y, z gibi jenerik değişken isimleriyle değil sayi1,
sayi2 ve sayi3 gibi anlamlı isimlerle temsil edilmelidir.

 Bir zorunluluk olmasa bile yazılan bir programın anlaşılabilirliğini artırmak


adına değişkenler ve fonksiyonlar adlandırılırken bazı notasyonlardan
faydalanılır.
DEVE VE PASKAL NOTASYONLARI

 Değişken tanımlamalarında Deve Notasyonundan (Camel Notation) ve


dosya isimlendirmelerinde (düzyazı ve fonksiyon m-dosyaları) Paskal
Notasyonundan (Pascal Notation) faydalanılabilir.

 Deve Notasyonu ile tanımlanmış değişken isimlerine birkaç örnek olarak


sayi1, enKucuk, bankaHesapNo ve basamakSayisi verilebilir.

 Paskal Notasyonu ile tanımlanmış dosya isimlerine örnek olarak


AsalSayiMi.m, OrtalamayiHesapla.m ve ToplayarakCarpma.m verilebilir.

 .m, daha sonra da öğreneceğimiz üzere MATLAB programlama


dosyalarının uzantısıdır.
Rakamlar
 MATLAB’de negatif bir sayıyı temsil için o sayının önünde eksi (-) işareti
vardır. Bir sayının önüne artı (+) işareti koyulması veya hiçbir işaret
koyulmaması o sayının pozitif olduğunun delilidir.

 Ondalıklı sayılarda ayraç olarak nokta (.) ve 10 sayısının kuvvetini


temsilen e harfi kullanılır.

 Karmaşık sayıların sanal kısımları MATLAB’de son takı olarak i harfini


kullanır.

 Bu bilgiler ışığında MATLAB yorumlayıcısının anlayacağı birkaç rakama


örnek olarak 6, -175, 3.1416, 2.54e2, 7i veya 5+7i verilebilir.
Aritmetik Operatörler: MATLAB, deyimler içerisinde aşağıdaki aritmetik
operatörleri ve öncelik kurallarını kullanır.

İşlem Operatör Örnek


Toplama, a+b + 2+3 Aritmetik Operatörlerin Öncelik
Çıkarma, a-b - 5-2 Sıraları: Tek bir matematiksel
deyim içinde birden fazla işlem bir
Çarpma, a*b * 3*4 arada bulunabildiğine göre hangi
Bölme, a/b / 15/7 işlemin öncelik hakkına sahip
olduğunun bilinmesi yerinde
Üs alma, ab ^ 2^3 olacaktır. MATLAB’de işlemlerin
Parantez a*(b+c) () 2*(3+5) öncelik listesi aşağıda verilmiştir.

Öncelik İşlem
1. Parantez (İçten Dışa Doğru)
2. Üs Alma (Soldan Sağa Doğru) (2^2^3=???)
3. Çarpma ve Bölme (Soldan Sağa Doğru)
4. Toplama ve Çıkarma (Soldan Sağa Doğru)
MATLAB’in Kullanıma-Hazır Bazı Matematiksel
Fonksiyonları
Örnekler:

Matematiksel Yazılım MATLAB de Yazılım


ab-c+d-6+da a*b-c+d-6+d*a
b+c3-d/8-b2c b+c^3-d/8-b^2*c
a 2ab
 c 3  bd 2  2 a / b  c  (3 / 2)  b * d  2  (2 * a * b) /(b  2  4 * a * c)
b b  4ac
(b  c 2 ).3 f 3
a
e f a=1, b=2, c=3, d=4, e=5, f=6 iken ???
d
3a

c
Uygulama 1: a 4
x ba  ( ac) 3 
a
2
3
1  c2  a  b4
a a
b  5 cd 3

işlemini MATLAB dilinde kodlayınız.


clc VE clear KOMUTLARI

clc komutu komut penceresini temizler.

clear komutu bütün değişkenleri ve fonksiyonları bellekten siler.


(Bütün değişkenleri çalışma alanından (workspace) çıkarır.)

Lütfen Aşağıdaki Komutları Komut Penceresinden Çalıştırın:


>>help clc
>>help clear
>>help abs
>>help sqrt
Daha detaylı yardım için (komutun kullanımına ait örnekleri de görmek için)
doc komutundan faydalanabilirsiniz.

>>doc sqrt
MATLAB’ DE DEĞİŞKEN TÜRLERİ
VE DEĞER ATAMALARI

Herşey matris?

MATLAB değişkenlerine değer olarak aşağıdakilerden


herhangi birisi atanabilir:

 Matris
 Satır Vektörü
 Sütun Vektörü
 Karakter Dizisi (Katar) (String)
 Skaler
(İKİ BOYUTLU) MATRİSLERİN DEĞİŞKENLERE
DEĞER OLARAK ATANMASI
(TEK BOYUTLU) SATIR VEKTÖRLERİNİN
DEĞİŞKENLERE DEĞER OLARAK ATANMASI
(TEK BOYUTLU) SÜTUN VEKTÖRLERİNİN
DEĞİŞKENLERE DEĞER OLARAK ATANMASI
KARAKTER DİZİLERİNİN DEĞİŞKENLERE DEĞER
OLARAK ATANMASI
SKALERLERİN DEĞİŞKENLERE DEĞER OLARAK
ATANMASI
YERLEŞİK ans DEĞİŞKENİ VE MATEMATİK SABİTLERİ
ans DEĞİŞKENİ
pi SABİTİ
i SABİTİ

Sonraki bölümlerde döngü değişkeni olarak da kullanacağımız i


ile i sabiti karıştırılmamalıdır.
intmin ve intmax SABİTLERİ

İlgili bit sayısı ile temsil edilebilecek (işaretli/işaretsiz)


tamsayıların alabileceği en küçük ve en büyük değeri verir.
realmin ve realmax SABİTLERİ

realmin: Çift duyarlıklı kayan noktalı sayıların (64 bit) normalize


edilmiş en küçük pozitif değerini verir.

realmax: Çift duyarlıklı kayan noktalı sayıların en büyük değerini


verir.
eps SABİTİ

İki kayan noktalı sayı


arasındaki en küçük farka
eşittir.

 1.0 sayısı ile 1.0+eps


sayısı arasında kayan
noktalı başka bir sayı
bulunmamaktadır.
inf SABİTİ

IEEE 754 aritmetik temsilinde pozitif sonsuzluğu (∞) ifade eder.

Matlab
yorumlayıcısının inf
sabitini sonuç olarak
ürettiği durum
NaN SABİTİ

İngilizce Not a Number kelimesinin


ilk harflerinin oluşturduğu bir
kısaltmadır.

 IEEE 754 aritmetik temsilinde


tanımlanmamış sayısal sonuçları
ifade eder.
 Örneğin 0/0 işleminin sonucu
Sayı Görüntüleme Formatı
• Bir işlemin sonucu, varsayılan (default) olarak ondalık ayracından sonra 4
basamak duyarlılık ile gösterilir.

• Ondalık hane sayısı format fonksiyonu ile değiştirilebilir.

Konum İşlev
bank Ayraçtan sonra gösterilen ondalık hane sayısı:2

short Ayraçtan sonra gösterilen ondalık hane sayısı: 4


format
long Ayraçtan sonra gösterilen ondalık hane sayısı: 15

rat Rasyonel sayı (pay/payda) formunda gösterilir.


hex Hexadecimal sayı biçiminde gösterilir.
Sayı Görüntüleme Formatı
 format bank
Sayı Görüntüleme Formatı
 format long
Sayı Görüntüleme Formatı
 format rat
Sayı Görüntüleme Formatı
• UYGULAMA 1:
>>a=22/5 i bank, short, long ve rat formatları için test ediniz.

UYGULAMA 2: Ayrıca aşağıdaki komutlar dizisini çalıştırınız.


>>format rat
>>a=22/5
>>b=1/3
>>c=a+b
>>format
>>c
MATLAB PROGRAMLARINA KLAVYEDEN
VERİ AKTARIMI

"input" komutu yardımıyla bir MATLAB programı içerisinde


değerlendirilmek üzere kullanıcıdan klavye yoluyla bir veri alınır ve bu veri
bir değişkene atanır.
input KOMUTU İLE KLAVYEDEN SAYISAL VERİ
TEMİNİ
>> sayi1=input('Lutfen 1. Sayiyi Giriniz= ')
Tek tırnaklar arasına nasıl bir bilgi
>> sayi1=input('8') girmesi gerektiği hususunda
kullanıcıya verilecek uyarı mesajı
yazılır.
input KOMUTU İLE KLAVYEDEN METİNSEL
VERİ TEMİNİ
>> isim=input('Lutfen Isminizi Giriniz = ', 's' )
Bilgisayar Programlama
(3. Sunu)
disp VE fprintf KOMUTLARI İLE EKRANA
BİLGİ YAZDIRMA

Bir önceki dersimizde input komutu ile klavye


üzerinden MATLAB programlama ortamına
nasıl veri aktarılacağını öğrendik.
Bu dersimizde ise disp ve fprintf komutları
yardımıyla ekrana nasıl bilgi yazdırılacağını
öğreneceğiz.
disp KOMUTU İLE EKRANA METİN YAZDIRMA
disp KOMUTU İLE EKRANA SAYISAL DEĞER
YAZDIRMA
disp KOMUTU İLE EKRANA METİNLERİ VE
SAYISAL DEĞERLERİ BİRLİKTE YAZDIRMA

MATLAB’in num2str fonksiyonu


kendisine parametre olarak aldığı
bir sayıyı bir karakter dizisine
(string) çevirir. (22 sayısı '22' olur.)
fprintf KOMUTU İLE EKRANA BİLGİ YAZDIRMA
GENEL KULLANIM

fprintf('Ekrana Basilacak Aciklama %X \n', deger);

Burada %X Kısmında Kullanabileceğimiz Seçenekler :


%c : deger in tek bir karakter olduğunu gösterir.
%s : deger in bir karakter dizisi (string) olduğunu gösterir.
%d : deger in bir tamsayı olduğunu gösterir.
%f : deger in bir ondalıklı sayı olduğunu gösterir.
%g : deger i mümkün olan en kompakt forma sokar.

Diğer yandan :
\n : İmleci bir alt satırın başına götürür. (n, newline)
\t : İmleci bir TAB kadar sağa kaydırır.
fprintf Kullanımına Örnekler
fprintf İLE ALAN, HİZALAMA VE DUYARLILIK KONTROLÜ

• fprintf ile
 Ondalıklı sayıların ayraçtan itibaren kaç basamak duyarlılıkla ekrana
yazdırılacağı

 Ekrana yazdırılacak verinin imlecin bulunduğu noktadan itibaren kaç


karakterlik bir alan kullanacağı

 Yazdırılacak verinin kendisine rezerve edilen alanın sağına veya soluna


hizalanabileceği
belirlenebilir.

• % karakteri ve onu takip eden daha önce bahsi geçen özel karakterler
arasına yeni karakterler eklenerek yapılır.
fprintf İLE ALAN, HİZALAMA VE DUYARLILIK KONTROLÜ

• %f yi ele alalım
 %±6.2f örneğindeki

f ilgili değişkenin bir ondalıklı sayı olduğunu gösterir.

2 ilgili değişkenin değerinin ayraçtan sonra 2 basamak


duyarlılıkla ekrana yazdırılacağını belirtir.
. ayraç karakteridir.
6 ilgili değişkenin değerinin imlecin bulunduğu noktadan
itibaren kendisine rezerve edilecek olan 6 karakterlik bir
alana yazdırılacağını belirtir.
+ İlgili değişkenin kendisine rezerve edilen alanın sağına
hizalanmış/dayalı olarak ekrana yazdırılacağını belirtir.
(Kullanılmadığı durumda varsayılan olarak sağa hizalanır.)
- İlgili değişkenin kendisine rezerve edilen alanın soluna
hizalanmış olarak ekrana yazdırılacağını belirtir.
fprintf İLE ALAN, HİZALAMA VE DUYARLILIK Örnekler
Aşağıdaki 2 Komut Aynı İşi Yapar

disp('Uzgunum! Sifira Bolum Hatasi Var.');

fprintf('Uzgunum! Sifira Bolum Hatasi Var.\n');


disp ve fprintf ARASINDAKİ FARKLAR

disp komutu ekrana çıktı verdikten sonra bir alt satıra


otomatik olarak atlar. fprintf komutunu bir alt satıra
götürebilmek için ise \n kullanılmalıdır.

Ayrıca disp komutu satır veya sütun vektörleri ile


matrisleri ekrana kolayca yazdırabilirken aynı işlemi
fprintf ile yapabilmek daha çok işlem gerektirmektedir.
KAÇIŞ KARAKTERLERİ

• Kaçış karakterleri (Escape characters): ', %, \

• disp veya fprintf komutlarıyla ekrana yazdırılmak istenen metnin kaçış


karakteri içerdiği durumda ne olacak?

 Söz konusu karakterlerin bu iki komut için özel anlamlar ifade etmektedir.

 Çözüm: Kaçış karakterlerini ekrana yazdırmak için bunlardan peş peşe iki
adet kullanmak gerekir.
KAÇIŞ KARAKTERLERİ Kullanım Örnekleri
MATLAB’DE PROGRAMLAMA

MATLAB’de programlama genel olarak iki yolla yapılır:


 Komut penceresinde (inline) programlama
 m-dosyaları ile (m-files) programlama
o Düzyazı (script) m-dosyaları ile programlama
o Fonksiyon (function) m-dosyaları ile programlama

m-dosyaları oluşturabilmek için ise bir metin düzenleyicisine (editor)


ihtiyaç vardır.
Düzyazı M-Dosyaları ile Programlama
 Bir düzyazı (senaryo dosyası) (script file) özel bir görevi yerine getirmek için gerekli
MATLAB komutlarının saklandığı bir metin dosyasıdır. Başka bir ifadeyle; bir
hesaplamayı gerçekleştirmek için yazılacak birçok komut dizisi, komut penceresinden
tek tek girmek yerine bir dosyada saklanır ve daha sonra bu dosya çalıştırılarak bu
komutlar icra edilir.

 Bu dosyaların MATLAB’in Çalışma Dizini (Current Folder) altında "DosyaAdi.m"


şeklinde saklanmaları gerekir.

 DOSYA ADLARI TÜRKÇE KARAKTERLER VE BOŞLUKLAR


İÇERMEZLER.!!!!!!!!
MATLAB DOSYALARI İSİMLENDİRİLİRKEN PASKAL NOTASYONUNDAN
FAYDALANILIR.
 MATLAB programlama ortamı, m-dosyalarının oluşturulmasını kolaylaştıran akıllı
bir metin düzenleyicisine (text editor) sahiptir. m-dosyaları Windows’un Notepad i gibi
herhangi bir metin düzenleyicisi ile de yazılabilirler. Bir düzyazı m-dosyası oluşturmak
için “Current Folder” penceresinde boş bir alana sağ tıklayıp “New
File>Script” yolu takip edilmelidir.
Programı yazma işlemi bittikten
sonra ve programı çalıştırmadan
önce muhakkak kaydediniz.
Değişken ve dosya adlarının ilk
birkaç karakterini yazdıktan sonra
TAB tuşuna basarak MATLAB’in bu
adları otomatik olarak
tamamlamasını sağlayabilirsiniz.
MATLAB PROGRAMLAMA ORTAMI İLE İLGİLİ
BAZI PRATİK BİLGİLER
 asv Uzantılı Yedekleme Dosyaları
 Bazen çalışma dizininin altında aynı isme sahip 2 dosya görülebilir.

 Bu dosyalardan birisi üzerinde çalışılan .m uzantılı program dosyası iken


diğeri .asv (auto save) uzantılı dosyadır.

 Bilgisayarın/MATLAB programının yanlışlıkla kapatılması veya çökmesi


neticesinde gerçekleşebilecek bir veri kaybının önüne geçebilmek
amacıyla MATLAB tarafından sürekli olarak devrede tutulan bir güvenlik
mekanizması tarafından otomatik olarak üretilir.

 MATLAB, metin düzenleyicisi penceresinde açık bulunan ve üzerinde


yapılan değişikliklerin kullanıcı tarafından kaydedilmediği dosyaların
varsayılan olarak her 5 dakikada yedeğini alır ve uzantısı .asv olan bir
dosyada saklar.
MATLAB PROGRAMLAMA ORTAMI İLE İLGİLİ
BAZI PRATİK BİLGİLER
 asv Uzantılı Yedekleme Dosyaları
 Bir MATLAB dosyasına herhangi bir nedenle erişilemiyorsa ve çalışma
dizininin altında ilgili dosyanın .asv uzantılı versiyonu mevcutsa, son
otomatik kayıt anına kadar MATLAB tarafından yedeği alınan dosya
sayesinde bilgiler kısmen de olsa kurtarılabilir.
 Bu durumda yapılacak işlem: .asv olan dosyanın uzantısını .m olarak
değiştirmek

 Otomatik kaydetmeyi/yedeklemeyi devre dışı bırakma/devreye alma veya


varsayılan ayarları değiştirmek için
 HOME > ENVIRONMENT > Preferences > Editor/Debugger >
Backup Files
yolu izlenerek ulaşılacak pencere kullanılır.
MATLAB PROGRAMLAMA ORTAMI İLE İLGİLİ
BAZI PRATİK BİLGİLER
 Yan Yana Üç Nokta ile Deyimlerin Birden Fazla Satıra
Yayılması
 Bir uygulama içerisindeki her bir MATLAB deyimi/satırı aynı uzunlukta
değildir.
 Bazıları kısadır, bazıları ise metin düzenleyicisi penceresinin görüş
alanına sığmayacak kadar uzundur.

 Herhangi bir uzun MATLAB deyiminin görüş alanı içerisinde kalan kısmı,
deyimi içeren satırın sonu olarak yan yana üç nokta (…) karakterleri
sayesinde işaretlenmiş olur.

 MATLAB yorumlayıcısı da, böyle bir durumda, bir alt satıra taşan bilgilerin
mevcut satırdaki bilgilerle birleştirildikten sonra bir MATLAB deyimi olarak
değerlendirilmesi gerektiğini anlar.
MATLAB PROGRAMLAMA ORTAMI İLE İLGİLİ
BAZI PRATİK BİLGİLER

Yan yana üç nokta ile deyimlerin birden


fazla satıra yayılması
MATLAB PROGRAMLAMA ORTAMI İLE İLGİLİ
BAZI PRATİK BİLGİLER

 Ctrl+C Tuş Kombinasyonu ile Komut Penceresi


Kontrolünün Yeniden Kazanılması
 MATLAB komut penceresinde kontrolü kaybettiğinizde (örneğin
programınız sonsuz döngüye girdiyse ve bir türlü sonlanmıyorsa)

 Kontrolü yeniden kazanabilmek için, yani >> karakterlerini yeniden


ekranda görebilmek için Ctrl+C tuşlarına birlikte basılır.
MATLAB PROGRAMLAMA ORTAMI İLE İLGİLİ
BAZI PRATİK BİLGİLER

Ctrl+C
UYGULAMALAR
Uygulama 3.1
input komutu ile kullanıcıdan klavye yoluyla 2 sayının geometrik ortalamasını
hesaplayan ve bu ortalamayı fprintf komutuyla ekrana basan (yazdıran)
MATLAB programını IkiSayininGeometrikOrtalamasiHesapla.m adındaki
düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız. (İpucu:
Geometrik ortalama hesabındaki karekök alma işlemi için MATLAB in sqrt()
fonksiyonunu kullanınız.)

Örnek Komut Penceresi Çıktısı


Uygulama 3.2
input komutu ile kullanıcıdan klavye yoluyla aldığı 3 sayının aritmetik
ortalamasını hesaplayan ve bu ortalamayı disp komutuyla ekrana basan
MATLAB programını UcSayininAritmetikOrtalamasiHesapla.m adındaki
düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız. (İpucu: disp
fonksiyonu ile ekrana bir metin ile birlikte sayısal değeri yazdırırken köşeli
parantez kullanımına dikkat ediniz.)

Örnek Komut Penceresi Çıktısı


Uygulama 3.3
input komutu ile kullanıcıdan klavye yoluyla aldığı 4 sayının harmonik
ortalamasını hesaplayan ve bu ortalamayı fprintf komutuyla ekrana basan bir
MATLAB programını DortSayininHarmonikOrtalamasiHesapla.m adındaki
düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız.
Sayılar 𝒙1 , 𝒙𝟐 , 𝒙𝟑 𝐯𝐞 𝒙𝟒 olmak üzere 4 sayının harmonik ortalaması aşağıdaki
formül ile hesaplanır:
4
H=
1 1 1 1
+ + +
𝒙1 𝒙2 𝒙3 𝒙4

Örnek
Komut
Penceresi
Çıktısı
Uygulama 3.4
input komutu ile kullanıcıdan klavye yoluyla aldığı bir dairenin yarıçap değerini
kullanarak bu dairenin çevresini ve alanını hesaplayarak fprintf komutuyla
ekrana basan bir MATLAB programını DaireninCevresiniVeAlaniniHesapla.m
adındaki düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız. (İpucu:
𝜋 sayısı için MATLAB in yerleşik pi sabitini kullanınız.)

Örnek Komut Penceresi Çıktısı


Uygulama 3.5
Kenar uzunlukları a, b ve c olan bir üçgenin alanı Heron Formülü kullanılarak
şu şekilde hesaplanır:
A(𝐴𝐵𝐶) = 𝑢(𝑢 − 𝑎)(𝑢 − 𝑏)(𝑢 − 𝑐)

Yukarıdaki formüldeki u, üçgenin çevre uzunluğunun yarısını ifade eder. input


komutu ile kullanıcıdan klavye yoluyla aldığı bir üçgene ait kenar uzunluklarını
kullanarak bu üçgenin alanını Heron Formülü ile hesaplayan ve disp komutuyla
ekrana basan bir MATLAB programını UcgeninAlaniniHesapla.m adındaki
düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız.

Örnek
Komut
Penceresi
Çıktısı
Uygulama 3.6
input komutu ile kullanıcıdan klavye yoluyla aldığı bir zaman dilimine (saat ve
dakika) ait akrep ve yelkovan arasındaki açıyı hesaplayarak fprintf komutuyla
ekrana basan bir MATLAB programını
AkrepIleYelkovanArasindakiAciyiHesapla.m adındaki düzyazı m-dosyasının
içerisinine yazınız ve programı çalıştırınız. (Kullanıcının saat değeri olarak 0 ile 11
ve dakika değeri olarak da 0 ile 59 arasında bir veri girişi yapacağının garanti edildiği
kabulünü yapabilirsiniz.) (İpucu: Mutlak değer işlemi için MATLAB in abs() fonksiyonunu
kullanınız.)

Örnek Komut Penceresi Çıktısı


Bilgisayar Programlama
(4. Sunu)
İLİŞKİSEL OPERATÖRLER
İlişkisel operatörler, işlenenleri (operands) arasındaki
eşitlik, eşitsizlik, büyüklük veya küçüklük türünden ilişkileri
belirleyen operatörlerdir.

== Eşit Mi?
~= Eşit Değil Mi?
> Büyük Mü?
>= Büyük veya Eşit Mi?
< Küçük Mü?
<= Küçük veya Eşit Mi?
İlişkisel operatörler sonuç olarak 1 (BİR) (true) veya
0 (SIFIR) (false) değerlerini üretirler.
 Eşitlik testinde 2 adet "==" işareti kullanılır. Oysa değişken
atamalarında kullandığımız eşittir "=" 1 tanedir.
 MATLAB komut penceresinde 3=5 yazdığımızda program hata
verir. Oysa 3==5 yazdığımızda bu “3, 5'e eşit midir?" anlamına gelir,
karşılaştırma yanlıştır ve MATLAB bu durum için 0 (Sıfır) sonucunu
üretir.
İLİŞKİSEL OPERATÖRLERİN
ÖNCELİK SIRALARI
 İlişkisel operatörler aritmetik operatörlerden daha düşük
bir işlem önceliğine sahiptirler.
 Örneğin komut penceresinde 3+4<7-5 şeklinde
çalıştırılacak bir MATLAB deyimi arka planda önce 7<2
formuna dönüştürülür ve ilişkisel test (küçüklük testi)
daha sonra gerçekleştirilir.
 Benzer şekilde i+j==10 gibi bir eşitlik testi, öncelikle
hesaplanan i+j aritmetik işleminin sonucu ile 10 sayısı
arasında gerçekleştirilir.
 Yukarıdaki deyimler, karışıklığa meydan vermemek için
(3+4)<(7-5) ve (i+j)==10 formlarına sokulabilirler.
MANTIKSAL OPERATÖRLER
Birden fazla ilişkisel durumu birbirine mantıksal olarak
bağlamaya yarar.
Mantıksal operatörler de ilişkisel operatörler gibi sonuç
olarak 1 (BİR) (true) veya 0 (SIFIR) (false) değerlerini
üretirler.
MANTIKSAL İŞLEVİ
MATLAB
OPERATÖR
a&&b VE (AND)
a||b VEYA (OR)
~a DEĞİL (NOT)
MANTIKSAL OPERATÖRLERİN
DOĞRULUK TABLOLARI

A B A && B Mantıksal VE operatörü ile


birleştirilmiş bir ifadenin 1 (true)
0 0 0 değerini üretebilmesi için
işlenenlerin her ikisinin de aynı
0 1 0 anda 1 (true) olması gerekir. Diğer
1 0 0 tüm durumlarda sonuç 0 (false) dır.

1 1 1
MANTIKSAL OPERATÖRLERİN
DOĞRULUK TABLOLARI

A B A || B Mantıksal VEYA operatörü ile


birleştirilmiş bir ifadenin 1 (true)
0 0 0 değerini üretebilmesi için işlenenlerden
herhangi birisinin 1 (true) olması
0 1 1 yeterlidir. Çıkışın 0 (false) olduğu tek
durum her iki işlenenin de aynı anda 0
1 0 1 (false) olduğu durumdur.
1 1 1
MANTIKSAL OPERATÖRLERİN
DOĞRULUK TABLOLARI

A ~A Mantıksal DEĞİL operatörü sağındaki


işlenen 0 (false) ise 1 (true) değerini,
0 1 benzer şekilde sağındaki işlenen 1 (true)
ise 0 (false) değerini üretmektedir. Yani
1 0 işlenenin DEĞİL’ini almaktadır.
>> k=5;
>> m=7;
>> (k>6) && (m<8)

ans =

0
İlişkisel ve mantıksal operatörler her zaman bool
tipinde (yani 1 (true) veya 0 (false) değerinde, başka bir
ifadeyle sadece iki değerli) bir sonuç geriye döndürürler.
Dolayısıyla if ve while deyimleri ile birlikte karar verme
amacıyla kullanılabilirler.
if Şartlı Deyimi
Bir karşılaştırma ifadesini veya mantıksal bir ifadeyi test ederek bunun
sonucuna göre mümkün seçeneklerden birini icra edebilen bir komuttur.

if Deyiminin Üç Farklı Kullanım Şekli vardır:


if koşul if koşul if koşul1
işlem(ler) işlem(ler) işlem(ler)
end else elseif koşul2
işlem(ler) işlem(ler)
end else
işlem(ler)
end
koşul dediğimiz şey bir karşılaştırma ifadesi (a>b gibi) ya da
bir mantıksal ifadedir (a&&b gibi).
if Yapısının Akış Diyagramı
if-else Yapısının Akış Diyagramı
if-elseif-else Yapısının Akış Diyagramı
ÖRNEK UYGULAMALAR
Klavyeden girilen iki sayının oranını bulan ve fprintf komutuyla
ekrana basan bir MATLAB düzyazı m-programı yazınız.
(Programınız payda sıfır girildiğinde disp komutuyla ekrana
“Uzgunum! Sifira Bolum Hatasi Var.” mesajını yazdırmalıdır.)

Uygulama1.m
Programınızı en az kaç
clc; %Komut penceresini temizle kez çalıştırmalısınız?
clear; %Degiskenleri sil
pay = input('Lutfen Payi Giriniz: ');
pay
payda = input('Lutfen Paydayi Giriniz: '); oran 
payda
if payda==0
disp('Uzgunum! Sifira Bolum Hatasi Var.');
else
oran=pay/payda;
fprintf('Oran = %f \n',oran);
%disp(['Oran = ' num2str(oran)]);
end
Örnek: Kullanıcıdan klavye yoluyla alınan x ve y değerlerine
göre aşağıdaki sonuçlardan birini hesaplayan bir MATLAB
programını bir m-dosyası içine yazınız ve komut penceresinden
dosya adı ile çalıştırınız.
Uygulama2.m
x>y ise sonuc= (x-y)
x=y ise sonuc=(x+y)7 x=input('Lutfen x Degerini Giriniz : ');
y=input('Lutfen y Degerini Giriniz : ');
x<y ise sonuc=x*y
if x>y
sonuc=sqrt(x-y);
elseif x==y
sonuc=(x+y)^7;
else
Programınızı en az kaç sonuc=x*y;
kez çalıştırmalısınız?
end
disp(['Sonuc=' num2str(sonuc)]);
m-dosyalarını oluşturduğunuz
MATLAB metin editörünün >>Uygulama2
program yazma stiline
müdahale etmeyiniz !!!!!
UYGULAMA
Girilen ay numarasına göre gün sayısını hesaplayan MATLAB
programını yazınız.
Programınızı en az
kaç kez
Uygulama3.m çalıştırmalısınız?

ay=input('Bir Ay Numarasi Giriniz (1-12)= ');


if ay==1 || ay==3 || ay==5 || ay==7 || ay==8 || ay==10 || ay==12
disp('Bu Ay 31 Gunden Olusur. ');
elseif ay==2
disp('Bu Ay 28 Gunden Olusur.');
elseif ay==4 || ay==6 || ay==9 || ay==11
disp('Bu Ay 30 Gunden Olusur.');
else
disp('Yanlis Bir Ay Numarasi Girdiniz.');
end
switch-case Yapısı
switch-case yapısı sayesinde bir değişkenin farklı değerleri için ayrı ayrı
işler yapabilmek oldukça kolay hale gelir.

switch-case kullanılarak yazılan herhangi bir bilgisayar programı aslında


if-elseif-else-end ile de gerçekleştirilebilir olsa da programımızı daha
okunabilir ve anlaşılabilir kıldığı için genellikle tercih edilir

switch değisken
case koşul1
işlem(ler)
case koşul2
işlem(ler)
.
otherwise
işlem(ler)
end
switch Şartlı Deyimi
Uygulama4.m

ayNo = input('Bir Ay Numarasi Giriniz (1-12)= ');


switch ayNo
case {1,3,5,7,8,10,12}
disp('Bu Ay 31 Gunden Olusur.');
case 2
disp('Bu Ay 28 Gunden Olusur.');
case {4,6,9,11}
disp('Bu Ay 30 Gunden Olusur.');
otherwise
disp('Yanlis Bir Ay Numarasi Girdiniz.');
end
PROGRAMLARIMIZI ÇALIŞTIRMA

Yazdığımız programlar ya hiç çalışmazlar ya da


çalışırlar ama beklediğimiz sonuçları üretmezler.

Yazdığımız bir program çalışmaz ise eğer, bize


bunun nedenlerini komut penceresine hatalı
bölümlere ait satır ve sütun bilgilerini basarak
bildirir. Ayrıca MATLAB bizlere programlarımızı
yazdığımız editörün sağ tarafında turuncu
çizgiler şeklinde muhtemel hatalar hakkında
ipuçları da verir.
HATA AYIKLAMA (DEBUGGING)
NE UMUYORDUM NE BULDUM?
m-dosyası editörünün hata ayıklamaya
(debugging) yarayan fonksiyonlarını ve calışma
alanı (workspace) penceresini kullanarak çalışan
programınızdaki (!! BEKLEDİĞİNİZ GİBİ
ÇALIŞMAYAN !!) hataları bulabilirsiniz. Bunun
için herhangi bir program satırına kesme noktası
(breakpoint) koymalı ve programınızı F10 tuşu ile
satır satır işletmelisiniz. (Derste bu konuyu
özetleyen canlı bir uygulama yapılacak.)
HATA AYIKLAMA

Hata Ayıklama modundan komut satırında return


komutunu işleterek çıkabilirsiniz. Ayrıca
m-dosyasının içerisindeki kesme noktasını
üzerini tıklayarak kaldırmalısınız.

K>>return
>>
UYGULAMALAR
Uygulama 4.1
Her bir doğru sorunun karşılığının 4 puan olduğu ve 4 yanlışın 1 doğruyu götürdüğü 25
soruluk bir testten alınan puanı hesaplayacak bir MATLAB programını
TestPuaniniHesapla.m adındaki düzyazı m-dosyasının içerisine yazınız ve programı
çalıştırınız. Programınız input komutu ile kullanıcıdan klavye yoluyla doğru, yanlış ve boş
cevap sayılarını almalıdır ve hesapladığı test puanını fprintf komutuyla ekrana
basmalıdır. Kullanıcının tutarsız veri girişi yapması durumunda ise ekrana sadece disp
komutuyla «Tutarsız Veri Girişi Yaptınız.» mesajı yazdırılmalıdır.

Örnek Komut Penceresi Çıktısı


Uygulama 4.2
input komutu ile kullanıcıdan klavye yoluyla aldığı iki sayı arasındaki ilişkiyi (eşitlik,
büyüklük, küçüklük) belirleyen ve fprintf komutuyla ekrana basan bir MATLAB
programını IkiSayiArasindakiFarkiBelirle.m adındaki düzyazı m-dosyasının içerisine
yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 4.3
𝑨𝒙𝟐 + 𝑩𝒙 + 𝑪 = 𝟎 şeklinde verilen 2. dereceden bir denklemin köklerini hesaplayarak
ekrana basan bir MATLAB programını IkinciDerecedenDenkleminKokleriniHesapla.m
adındaki düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız. A ve B
katsayıları ile C sabiti input komutu yardımıyla kullanıcıdan klavye yoluyla alınmalıdır.
Eğer girilen denklem 2.dereceden bir denklem değilse bu durum kullanıcıya bir uyarı
mesajıyla iletilmelidir.

Örnek Komut Penceresi Çıktısı Örnek Komut Penceresi Çıktısı


Uygulama 4.4
Bir bisiklet kiralama firması, müşterilerinden, yarım saate kadar olan kiralamalar için 5 TL
ve bu süre aşımı sonrasındaki her bir dakika için 0.25 TL (25 Kuruş) ücret talep
etmektedir. input komutu ile kullanıcıdan klavye yoluyla aldığı herhangi bir müşteriye ait
dakika cinsinden kiralama süresini kullanarak müşterinin ödemesi gereken kiralama
ücretini hesaplayan ve fprintf komutuyla ekrana basan bir MATLAB programını
BisikletKiralamaUcretiniHesapla.m adındaki düzyazı m-dosyasının içerisine yazınız.
Örneğin programınız 29 dakika bisiklet kiralayan bir müşteriye 5 TL’lik ve 40 dakika
bisiklet kiralayan bir müşteriye ise 7.5 TL

Örnek Komut Penceresi Çıktısı


Uygulama 4.5
input komutu ile kullanıcıdan klavye yoluyla aldığı üç sayının en küçüğünü bularak fprintf
komutuyla ekrana basan bir MATLAB programını UcSayininEnKucugunuBul.m
adındaki düzyazı m-dosyasının içerisine yazınız ve programı çalıştırınız.

Örnek Komut Penceresi Çıktısı


Uygulama 4.6
Vücut Kitle İndeksi (VKİ), kilogram cinsinden vücut ağırlığının metre cinsinden boy uzunluğunun
karesine bölünmesiyle hesaplanır. VKİ değeri 16’dan küçükse kişi aşırı az kilolu, 16-18.5 arasında ise
kişi az kilolu, 18.5-25 arasında ise kişi normal, 25-30 arasında ise kişi kilolu ve 30-40 arasında ise
kişi obez sınıfına dâhil edilir.^ input komutu ile kullanıcıdan klavye yoluyla aldığı vücut ağırlığı
(kilogram cinsinden) ve boy uzunluğu (metre cinsinden) değerlerini kullanarak herhangi bir kişiye ait
VKİ’yi hesaplayan ve bu indekse göre kişiyi sınıflandıran bir MATLAB programını
VucutKitleIndeksiniHesapla.m adındaki düzyazı m-dosyasının içerisine yazınız ve programı
çalıştırınız.

Örnek Komut Penceresi Çıktısı


Bilgisayar Programlama
(5. Sunu)
MATLAB’İN SAYI YUVARLAMA
FONKSİYONLARI
MATLAB’in ondalıklı sayıları yuvarlama amacıyla
sıklıkla kullanılan 4 adet hazır fonksiyonu vardır.
Bunlar:
fix
round
ceil
 floor
fix(x)
Kendisine parametre (argüman) olarak aldığı x
ondalıklı sayısını 0 (Sıfır) yönünde karşılaştığı ilk
tamsayıya yuvarlar.
round(x)
Kendisine parametre (argüman) olarak aldığı x
ondalıklı sayısını kendisine en yakın tamsayıya
yuvarlar.
ceil(x)

Kendisine parametre (argüman) olarak aldığı x


ondalıklı sayısını pozitif sonsuz yönünde karşılaştığı
ilk tamsayıya yuvarlar.
floor(x)

Kendisine parametre (argüman) olarak aldığı x


ondalıklı sayısını negatif sonsuz yönünde
karşılaştığı ilk tamsayıya yuvarlar.
BİR SAYININ TAMSAYI VEYA
ONDALIKLI SAYI OLUP OLMADIĞININ
ARAŞTIRILMASI
Bir sayı tamsayı ise sayının kendisi sayının
yuvarlanmışına eşittir.
Bir sayı yuvarlanmışına eşit değilse ondalıklı
bir sayıdır.
mod FONKSİYONU İLE KALAN BULMA
mod(x,y) x sayısının y sayısına bölümünden kalanı
verir.

x=y*bölüm+kalan
x=y*fix(x/y)+mod(x,y)
BİR SAYININ ÇİFT SAYI VEYA TEK SAYI
OLUP OLMADIĞININ ARAŞTIRILMASI
Bir sayı ikiye tam olarak bölünebiliyorsa yani
sayının ikiye bölümünden kalan sıfırsa bu sayı
bir çift sayıdır.
Bir sayının ikiye bölümünden kalan 1 ise bu
sayının bir tek sayıdır.
rand FONKSİYONU RASTGELE SAYI ÜRETİMİ
 rand(n,m) fonksiyonu MATLAB’de nxm boyutunda ve
elemanları rastgele sayılar olan bir matris oluşturur.
Oluşturulan bu rastgele sayılar 0 ile 1 arasındadır ve düzgün
dağılımlıdır.
 Üretilmek istenen matris kare bir matris ise yani n satır
sayısı, m sütun sayısına eşit ise rand(n,n) yerine sadece
rand(n) kullanılabilir.
 0 ile 1 arasında rastgele ondalıklı bir skaler sayı üretmek için
ise rand(1) fonksiyonunun kullanımı yeterlidir.
 Rastgele sayılardan oluşan bu matrisin tüm elemanlarını k
gibi bir sayı ile çarparak sayıları 0 ile k aralığına çekebiliriz.
 Ondalıklı sayılardan oluşmuş bir matrisin elemanlarını
yuvarlayıp tamsayı yapmak için herhangi bir yuvarlama
fonksiyonunu, mesela round fonksiyonunu kullanabiliriz.
AŞAĞIDAKİ MATLAB DEYİMLERİ KOMUT
PENCERESİNDE ÇALIŞTIRILDIKLARINDA
NASIL ÇIKTILAR ÜRETİRLER?
>> a=rand(1,10)
>> b=fix(rand(3,5))
>> c=round(40*rand(5,3))
>> d= 40*round(rand(5,3))
>> e=round(10+40*rand(5,3))
>> f=10+40*round(rand(5,3))
>> g=round(50+250*rand(3,4))
>> h=round(1000*rand(1))
zeros FONKSİYONU İLE SADECE 0’LAR İÇEREN
BİR MATRİSİN OTOMATİK OLARAK
OLUŞTURULMASI
 zeros(n,m) fonksiyonu nxm boyutunda
(n satırlı ve m sütunlu) ve her bir elemanı 0
olan bir matris üretmek amacıyla kullanılır.
 Üretilmek istenen matris kare bir matris ise
yani n satır sayısı, m sütun sayısına eşit ise
zeros(n,n) yerine sadece zeros(n)
kullanılabilir.
>> zeros(1,3) zeros(3,5) deyimi acaba
>> zeros(3,1) fix(rand(3,5)) deyimi ile aynı
>> zeros(4,4) sonucu üretir mi?

>> zeros(4)
>> zeros(3,5)
ones FONKSİYONU İLE SADECE 1’LER İÇEREN
BİR MATRİSİN OTOMATİK OLARAK
OLUŞTURULMASI
 ones(n,m) fonksiyonu nxm boyutunda
(n satırlı ve m sütunlu) ve her bir elemanı 1
olan bir matris üretmek amacıyla kullanılır.
 Üretilmek istenen matris kare bir matris ise
yani n satır sayısı, m sütun sayısına eşit ise
ones(n,n) yerine sadece ones(n)
kullanılabilir.
>> ones(1,3) ones(3,5) deyimi acaba
>> ones(3,1) ceil(rand(3,5)) deyimi ile
>> ones(4,4) aynı sonucu üretir mi?

>> ones(4)
>> ones(3,5)
UYGULAMA
Dünyaya geldiğiniz gün 0 (sıfır) başlangıç değeri ile çalışmaya başlayan ve
mevcut değerini her gün 1 arttıran bir sayaca sahip olduğunuzu hayal edin.
Böyle bir sayıcının, ekranında gördüğünüz değere ulaşmak için kaç yıl, kaç ay
ve kaç gün süreyle sayma işlemi gerçekleştirdiğini hesaplayacak bir MATLAB
programını yazınız. Programınız input komutu ile kullanıcıdan klavye yoluyla
söz konusu sayıcı değerini almalıdır ve hesapladığı yıl, ay ve gün değerini
fprintf komutuyla ekrana basmalıdır. Bir yılın 365 ve bir ayın da 30 günden
oluştuğunu kabul edebilirsiniz.

sayac=input('Sayıcınızın Mevcut Değeri?: ');


yilSayisi=fix(sayac/365);
ardaKalan=mod(sayac,365); %ardaKalan=sayac-yilSayisi*365
aySayisi=fix(ardaKalan/30);
gunSayisi=mod(ardaKalan,30);
fprintf('%d Sayıcı Değeri ', sayac);
fprintf('%d yıla, %d Aya ve ', yilSayisi, aySayisi);
fprintf('%d Güne Denk Gelir.\n', gunSayisi);
UYGULAMA
Program Ekran Görüntüsü
DÖNGÜLER

 Birçok uygulamada bazı işlemlerin tekrar


tekrar gerçekleştirilmesi gerekir. Bu imkanı
sağlayan programlama yapılarına döngü
denir.
 MATLAB’de döngü oluşturmak amacıyla
kullanılan for ve while adında 2 tekrarlama
deyimi vardır.
DÖNGÜ OLUŞTURMA KURALLARI

1- Döngü değişkeninin başlangıç değeri belirlenir.


2- Döngü değişkeninin bitiş değeri belirlenir.
3- Döngü değişkeninin bitiş değerine ulaşıp ulaşmadığı
test edilir.
4- İstenen işlem gerçekleştirilir.
5- Döngü değişkeni, döngü içinde adım miktarı kadar
artırılır yada azaltılır.
for DÖNGÜSÜ
 Tekrarın belirli bir sayı adedince gerçekleşmesine izin
veren yapı

for döngü değişkeni = başlangıç:artış miktarı:bitiş


komutlar
end

for döngü değişkeni = başlangıç:bitiş


komutlar
end
artış miktarı otomatik olarak 1 atanır.

döngü değişkeni sayaç olarak da adlandırılır.


UYGULAMA
1 sayısı ile klavyeden girilen herhangi bir sayı
arasındaki ardışık sayıların toplamını for
n sayısı 0 veya
döngüsü kullanarak hesaplayan negatifse
ve ekrana hangi
toplam elde
basan bir düzyazı MATLAB programıedilir?
yazınız.
n=input('Lutfen Bir Sayi Giriniz : ');
toplam=0; %Toplamada Etkisiz Eleman
for i=1:n
toplam=toplam+i;
%fprintf('Toplam = %d \n',toplam);
end
fprintf('Toplam = %d \n',toplam); %Gauss Teoremi???

Programlama jargonunda bir döngünün tekrarlanan her bir adımı


iterasyon olarak adlandırılır.
for i=5:1
Yandaki for döngüsü kaç
kere işletilir?

end

Başlangıç değeri bitiş değerinden büyük fakat


artım miktarı pozitif bir for döngüsü işletilmez.

for i=1:-1:5 Yandaki for döngüsü kaç


kere işletilir?

end
Başlangıç değeri bitiş değerinden küçük fakat
artım miktarı negatif bir for döngüsü işletilmez.
while DÖNGÜSÜ
 Tekrarın bir koşula bağlı olarak işletilmesini sağlayan bir yapı

while koşul
işlem_1
işlem_2
koşul denilen şey sonucu BİR veya
SIFIR olan bir eşitlik testi, karşılaştırma
işlem_n işlemi veya mantıksal bir test olabilir.
end
UYGULAMA
Ekrana adınızı ve soyadınızı 10 kez yazan bir
MATLAB programını while döngüsü kullanarak
oluşturunuz.

i=1; %sayac % for Döngüsü ile çözüm


while i<=10 for i=1:10
disp(‘Ad Soyad'); disp(Ad Soyad');
i=i+1; end
end
UYGULAMA
1 sayısı ile klavyeden girilen herhangi bir sayı
arasındaki ardışık sayıların çarpımını while döngüsü
kullanarak hesaplayan ve ekrana basan bir düzyazı
MATLAB programı yazınız.
Bu satır
n=input('Lutfen Bir Sayi Giriniz : '); çözümden
çıkarılırsa ne
carpim=1; %Carpmada Etkisiz Eleman olur?
i=1;
while i<=n
Komut penceresi kontrolünü
carpim=carpim*i;
kaybettiğinizde (mesela programınız
sonsuz bir döngünün içerisine girdiyse)
i=i+1; CTRL+C tuş kombinasyonunu
%fprintf('Carpim = kullanabilirsiniz.
%d \n',carpim);
end
fprintf('Carpim = %d \n',carpim); %Faktoriyel ??????
UYGULAMA
Aşağıdaki while döngüsü kaç kere işletilir?

devamEt=1;
i=0; %sayac
Yandaki programı ekrana 10
while devamEt kere “Merhaba Dünya” yazacak
disp(‘Merhaba Dünya'); şekilde nasıl
i=i+1; modifiye edersiniz???
end
UYGULAMA
Ocak ayının 1. gününde doğan bir bebek tek numaralı ayların sonunda ağırlığının
%7’sini kaybederken, çift numaralı ayların sonunda ağırlığının %9’u kadar kilo
alıyor. Bu bebeğin kaç ay sonra doğum ağırlığının %10’undan fazla bir ağırlığa
ulaşacağını hesaplayan ve fprintf komutuyla ekrana basan bir MATLAB
programını yazınız.
kilo=100; %Bebeğin başlangıç ağırlığı
ay=1;
while kilo<=110
if mod(ay,2)==1
kilo=kilo*0.93; %kilo=kilo-kilo*0.07;
else
kilo=kilo*1.09; %kilo=kilo+kilo*0.09;
end
ay=ay+1;
end
fprintf('Çözümü Sağlayan Ay: %d\n',ay);
UYGULAMALAR
Uygulama 5.1
Dünyaya geldiğiniz gün 0 (sıfır) başlangıç değeri ile çalışmaya başlayan ve mevcut
değerini her saniye 1 arttıran bir sayaca sahip olduğunuzu hayal ediniz. Böyle bir
sayıcının, ekranında gördüğünüz değere ulaşmak için kaç gün, kaç saat, kaç dakika ve
kaç saniye süreyle sayma işlemi gerçekleştirdiğini hesaplayacak bir MATLAB programını
SaniyeSayacininKarsiliginiHesapla.m adındaki düzyazı m-dosyasının içerisine yazınız
ve programı çalıştırınız. Programınız input komutu ile kullanıcıdan klavye yoluyla söz
konusu sayıcı değerini almalıdır ve hesapladığı gün, saat, dakika ve saniye değerini
fprintf komutuyla ekrana basmalıdır.

Örnek Komut Penceresi Çıktısı


Uygulama 5.2
input komutu ile kullanıcıdan klavye yoluyla aldığı bir alt limit ile bir üst limit arasındaki tek
sayıların ortalamasını while döngüsü kullanarak hesaplayan ve fprintf komutuyla ekrana
basan bir MATLAB programını TekSayilarinOrtalamasiniHeapla.m adındaki düzyazı m-
dosyasının içerisine yazınız ve programı çalıştırınız.

Örnek Komut Penceresi Çıktısı


Uygulama 5.3
𝒙𝟐 + 𝟏, 𝒙 ≥ 𝟒 Örnek Komut Penceresi Çıktısı
f(x) = 𝟒 − 𝒙𝟐 , 𝟎 < 𝒙 < 𝟒
𝟑𝒙 , 𝒙≤𝟎

şeklinde tanımlanmış parçalı bir fonksiyonun


− 𝟖 ≤ 𝒙 ≤ 𝟗 aralığındaki ardışık 𝒙 tam sayıları
için alacağı değerleri hesaplayan ve aşağıdaki
formatta ekrana basan bir MATLAB programını
ParcaliFonksiyonuDegerlendir.m adındaki
düzyazı m-dosyasının içerisine yazınız ve
programı çalıştırınız.
x f(x)
---------------
1 3
2 0
Uygulama 5.4
Bir çiftlikteki tavşanların sayısı 1042 iken kuşların sayısı 2272’dir. Bir yılda tavşanlar %
3.8, kuşlar ise % 1.2 oranında çoğalmaktadır. Tavşanların sayısının kuşların sayısını kaç
yıl sonra geçeceğini hesaplayan ve fprintf komutuyla ekrana basan bir MATLAB
programını TavsanlarVeKuslar.m adındaki düzyazı m-dosyasının içerisine yazınız ve
programı çalıştırınız.

Örnek Komut Penceresi Çıktısı


Uygulama 5.5
𝟏𝟏𝟑 + 𝟏𝟐𝟑 + 𝟏𝟑𝟑 + 𝟏𝟒𝟑 + ⋯ + 𝑵𝟑 = 𝟏𝟐𝟒𝟖𝟕𝟕𝟔𝟎𝟎

Yukarıda verilen denklemi sağlayan N sayısını while döngüsü kullanarak bulan ve fprintf
komutuyla ekra ve fprintf komutuyla ekrana basan bir MATLAB programını
GizemliKuplerToplami.m adındaki düzyazı m-dosyasının içerisine yazınız ve programı
çalıştırınız.

Örnek Komut Penceresi Çıktısı


Bilgisayar Programlama
(6. Sunu)
break DEYİMİ
for veya while döngülerinde program akışını kontrol edebilmenin bir yolu
break deyimini kullanmaktır. break deyimini döngü gövdesi içerisinde
kullanmak, döngünün aniden sonlandırılmasını ve döngüden sonra gelen
ilk ifade veya komutun işletilmesini sağlar.

for i=1:10
if i==4
break;
EKRAN ÇIKTISI ???
end
fprintf('i=%d\n', i);
end
break DEYİMİ
Bora arkadaşı Kaan’a «Kaç tane bilyen var?» diye soruyor ve «Bilyelerimi
ikişer, üçer, dörder, beşer ve altışar saydığımda hep bir bilyem artarken
yedişer saydığımda hiç bilyem artmamaktadır. Toplam bilye sayım ise
1000’den azdır» şeklinde bir cevap alıyor. Kaan’ın bilyelerinin sayısının
maksimum kaç olabileceğini hesaplayıp ekrana basacak programı yazalım.

for i=1000:-1:1
if (mod(i,2)==1) && (mod(i,3)==1) && (mod(i,4)==1) && . . .
(mod(i,5)==1) && (mod(i,6)==1) && (mod(i,7)==0)
fprintf(' Maksimum Bilye sayısı:%d\n', i);
break; % Sonuca ulaşıldı
end
end
continue DEYİMİ
Genellikle for döngülerinde, program akışı ayrıca continue deyimi ile kontrol
edilebilir. continue deyimi işletildiğinde continue deyiminden sonraki bütün
herşey ihmal edilir ve döngü değişkeni güncellenerek döngü bir sonraki
iterasyona başlar.

for i=1:10
if i==4
continue;
end
EKRAN ÇIKTISI ???
fprintf('i=%d\n', i);
end
continue DEYİMİ
1-ile 20 arasındaki tek sayıları ekrana alt alta yazdıran programı continue
deyimini kullanarak yazdıralım.

for i=1:20
if mod(i,2)==0
continue;
end
disp (i);
end

Döngü değişkeninin çift sayı olduğu durumlarda disp


komutunu içeren satırın işletilmediğine dikkat ediniz.
İç İçe Döngüler
• Döngü içinde döngü olarak da bilinir.

• İngilizce karşılığı: nested loops

• Bir döngü içerisinde (dış döngü-outer loop) gerçekleştirilen


işlemlerden birisinin başka bir döngü (iç döngü-inner loop)
olması durumunu karşılayan bir programlama yapısıdır.

• İç içe döngülerde dış döngünün her bir iterasyonunda iç döngü


yeni baştan bir daha işletilir.
 Bu durum dış döngü sona erene kadar devam eder.
Bu MATLAB deyimi
İç İçe for Döngüleri kaç kere işletilir?
Bu MATLAB deyimi
kaç kere işletilir?

toplam=0; deyimi
for i=1:5
dıştaki for döngüsünün
toplam=0;
bir üst satırına
for j=1:5
taşınsaydı nasıl bir
toplam=toplam+j;
ekran çıktısı elde
end
edilirdi?
disp(toplam*i);
end
Bu MATLAB deyimi
kaç kere işletilir?

EKRAN ÇIKTISI ???


5 yerine i kullanılsaydı
nasıl bir ekran çıktısı
elde edilirdi?
UYGULAMA
Çarpım tablosunu ekrana basacak bir MATLAB düzyazı
m-programı yazınız.
Bu MATLAB deyimi
for i=1:10 kaç kere işletilir?
for j=1:10 Bu deyim yerine
carpim=i*j; break deyimi
kullanılırsa ne olur?
fprintf('%d*%d=%d\n', i, j, carpim);
end Bu MATLAB deyimi
kaç kere işletilir?
disp('-----------------------');
end
Döngü Değişkenleri Bağımlı İç İçe
Döngüler
for i=1:4
for j=(i+1):6
fprintf('(%d,%d)\n',i,j);
end
end

Komut penceresi
çıktısını bu hale
dönüştürmek için
programda nasıl
bir değişiklik
yapılmalıdır???
Sonsuz Döngüler
Bazı uygulamalarda belirli bir şart gerçekleşinceye kadar bir takım
işlemlerin devamı istenir ve bu gerçekleşmesi beklenen işlem
program içerisinde dinamik olarak belirleniyor olabilir. Örneğin
kullanıcının bilgisayarın tuttuğu bir sayıyı tahmin oyununda, oyun
sayı doğru tahmin edilinceye kadar devam etmelidir. (Bunun ne
kadar süreceği dinamik bir süreç sonunda bilinebilir ancak.) Bu tür
durumlarda sonsuz bir döngünün içine girerek bu şartın
gerçekleşmesini beklemek tercih edilen metodlardan biridir.

devamEt=1; while 1
if tahmin==sayi
while devamEt
break;
if tahmin==sayi
end
devamEt=0;
end
end
end
UYGULAMA
Bir sonsuz döngü içerisinde 0-100 arasındaki sayılar rastgele bir şekilde
üretilip sıra numarası ile birlikte ekrana bastırılmak isteniyor. O ana kadar
üretilen sayıların toplamı 10000’i aşınca programın sonlandırılması ve
üretilen rastgele sayıların toplamının ekrana basılması istenmektedir.

toplam=0;
sayac=0;
while 1
sayi=fix(rand(1)*100);
sayac=sayac+1;
fprintf('\n%d. rasgele sayı:%d',sayac,sayi);
toplam=toplam+sayi;
if toplam>10000
break;
end
end
fprintf('\nRastgele üretilen sayıların toplamı:%d',toplam);
UYGULAMA
Bilgisayarın rastgele üreteceği 100 ile 999 arasındaki bir tamsayıyı
kullanıcı olarak bulmaya çalışacağımız bir sayı tahmin oyun
programını MATLAB’de yazalım.
 Yazacağımız program bilgisayar tarafından rastgele üretilen sayı ile
kullanıcının klavye yoluyla girdiği tahminini karşılaştırarak bir sonraki
iterasyonda kullanılmak üzere kullanıcıya «Küçük Bir Sayı Tahmininde
Bulundunuz.» veya «Büyük Bir Sayı Tahmininde Bulundunuz.» şeklinde
ipuçları vermelidir.
 Sayı doğru tahmin edildiğinde ise rastgele üretilen sayının kaçıncı tahminde
bulunduğu bilgisi ekrana yansıtılmalıdır ve kullanıcıya oyuna devam etmek
isteyip istemediği sorulmalıdır.
 Oyuna devam edilmek istenirse komut penceresi ekranı temizlenmeli ve yeni
üretilen bir sayı ile oyun yeniden başlamalıdır. Örnek Ekran
Görüntüsü
 Oyuna devam edilmek istenmezse program sonlandırılmalıdır.
UYGULAMA
tic Ve toc Komutları İle Performans
Ölçümü

• Bir program/kod parçasın performansını yani ne kadar sürede


işletildiğini öğrenmek için
 MATLAB’in tic ve toc komutları arasına yerleştirilir.
• tic komutu bir kronometre başlatır.
• bu komutu takip eden ilk toc komutu da söz konusu kronometreyi
durdurur.
• toc komutun çalıştırıldığında tic ile toc arasında geçen süre
saniye cinsinden ekrana yansıtılır.
tic Ve toc Komutları İle Performans
Ölçümü
Ölçülen süreyi değişkene kaydedip
sonrasında formatlı bir şekilde ekrana
Ölçülen süreyi doğrudan yazdırmak
ekrana yansıtmak
tic
tic
for i=1:1000000
for i=1:1000000
toplam=toplam+i;
toplam=toplam+i; end
end t=toc;
toc fprintf('Geçen Süre: %.2f saniye\n',t)
UYGULAMA
Klavyeden kullanıcı tarafından girilen terim sayısına göre 𝛑 sayısının aşağıda
seri açılım formülü ile hesaplanma süresini tic ve toc komutlarıyla ölçelim.

(−1)𝑘 1 1 1 1 1
𝛑=4෍ = 4(1 − + − + − ⋯)
2𝑘 + 1 3 5 7 9 11
𝑘=0

terimSayisi=input('Terim sayısını giriniz: ');


piSayisi=0;
tic
for k=0:terimSayisi
piSayisi=piSayisi+4*(((-1)^k)/(2*k+1));
end
toc
fprintf('\n%d terimle hesaplanan pi sayısı: %f',k,piSayisi);
fprintf('\nMATLAB pi sabiti: %f',pi);
TÜRKÇE ANAHTAR KELİMELER MATLAB KARŞILIKLARI
ise, eğer, mi? if
değilse else, elseif
tane, kere, defa, kez, e’ kadar for veya while döngüsü
UYGULAMALAR
Uygulama 6.1
Aşağıdaki ekran görüntüsündeki verildiği şekliyle çarpım tablosunu ekrana basan bir
MATLAB programını CarpimTablosunuEkranaBas.m isimli düzyazı m-dosyasının
içerisine yazın ve programı çalıştırınız.

Örnek Komut
Penceresi
Çıktısı
Uygulama 6.2
𝒂 < 𝒃 < 𝒄 iken 𝒂𝟐 + 𝒃𝟐 = 𝒄𝟐 şartını sağlayan pozitif 𝒂, 𝒃 ve 𝒄 sayılarından oluşan sete
Pisagor Üçlüsü adı verilir. Örneğin 𝒂 = 𝟑, 𝒃 = 𝟒 ve 𝒄 = 𝟓 bir Pisagor üçlüsüdür.

𝒂 + 𝒃 + 𝒄 = 𝟏𝟎𝟎𝟎 koşulunu gerçekleyen Pisagor Üçlülerinin sayısını, koşulu sağlayan


üçlüleri ve bu üçlülerin çarpımlarını bularak ekrana alt alta basacak bir MATLAB
programını PisagorUcluleriniHesapla.m isimli düzyazı m-dosyasının içerisine yazın ve
programı çalıştırınız.

Örnek Komut Penceresi Çıktısı


Uygulama 6.3
Bir önceki uygulamadaki(Uygulama 6.2) programın çalışma süresini tic ve toc komutu
ile ölçünüz.

Örnek Komut Penceresi Çıktısı


Uygulama 6.4
Bir sonsuz döngü içerisinde bilgisayar tarafından sürekli olarak 0 ve 1 sayıları rastgele
üretilmek isteniyor. Bu döngüden çıkış şartı ise üretilen sıfır ve birlerin sayısı arasındaki
fark 500’ü aşması durumudur. Bu koşul sağlanıp programı sonlandırırken üretilen bir ve
sıfırların sayısı ve geçen süre formatlı bir biçimde virgülden sonra tek haneyle ekrana
basılmalıdır. Bu programı SifirVeBirlerinSayisi.m isimli düzyazı m-dosyasının içerisine
yazın ve programı çalıştırınız.

Örnek Komut Penceresi Çıktısı


Bilgisayar Programlama
(7. Sunu)
FONKSİYONLAR
Fonksiyonlar da bilgisayar programlarıdır.
Bilgisayarlar yardımıyla çözülmeye çalışılan
problemler fonksiyonlar sayesinde yönetilmesi
daha kolay, küçük parçacıklara bölünürler. Bu
metoda “Böl ve Yönet” ya da “Divide and
Conquer” adı verilir. Her fonksiyon:
• Kendine özgü bir isme sahiptir.
• GENELLİKLE kendine, üzerinde işlem yapacağı bir
argüman (parametre) ya da argümanlar (parametreler)
alır.
• GENELLİKLE geriye bir değer döndürür. (skaler, vektör
ya da matris.)
FONKSİYON M-DOSYALARI

Bir fonksiyon m-dosyasının iki bileşeni vardır:

1 – Fonksiyonun imzası veya prototipi


(İlk satırda tanımlanır.)

2 – Fonksiyonun tanımı (yapması gereken iş)


(İkinci satırdan başlar ve devam eder.)
FONKSİYON İMZASI VEYA PROTOTİPİ
1) function cikisParametresi = FonksiyonAdi (girisParametreleri 1, 2, …n)
2) function [cikisParametreleri 1, 2,…, n] = FonksiyonAdi (girisParametreleri 1, 2, …n)

3) function cikisParametresi = FonksiyonAdi ( )


4) function cikisParametresi = FonksiyonAdi
5) function FonksiyonAdi (girisParametreleri 1, 2, …n)

Fonksiyon m-dosyalarının ilk satırı MUHAKKAK yukarıda


tanımladığımız gibi fonksiyonların imzası veya prototipi dediğimiz
satırlardan oluşmalıdır. Bir fonksiyonu yazmaya başlamadan önce
onun imzası hakkında iyice düşünmeliyiz. (Giriş parametresi(leri)
almalı mı, geriye bir değer döndürmeli mi?)
FONKSİYON İMZASI VEYA PROTOTİPİ
İMZA 1: function cikisParametresi = FonksiyonAdi (girisParametreleri 1, 2, …n)

İMZA 1 ile imzası tanımlanan fonksiyon birden fazla giriş


parametresi alır ve geriye sadece bir çıkış değeri gönderir.

İMZA 2: function [cikisParametreleri 1, 2,…, n] = FonksiyonAdi (girisParametreleri 1, 2, …n)

İMZA 2 ile imzası tanımlanan fonksiyon birden fazla giriş parametresi


alır ve geriye birden fazla çıkış değeri gönderir.
Bu durumda geriye döndürülen birden fazla çıkış değerinin köşeli
parantezler ( [ ] ) içerisine konulur.
FONKSİYON İMZASI VEYA PROTOTİPİ
İMZA 3: function cikisParametresi = FonksiyonAdi ( )

İMZA 4: function cikisParametresi = FonksiyonAdi


Kendisine değerlendirilmek üzere bir giriş parametresi almayan
fakat geriye bir değer döndüren bir fonksiyon İMZA 3 veya İMZA
4 ile tanımlanabilir.

İMZA 5: function FonksiyonAdi (girisParametreleri 1, 2, …n)

İMZA 5 ile imzası tanımlanan fonksiyon birden fazla parametre alır fakat
geriye hiçbir değer döndürmez.

Bu fonksiyonun imzasında, geriye bir değer döndürülmediği için atama


operatörü ( = ) kullanılmaz.
Geriye bir değer döndürmeyen fonksiyonlar gelende fprintf veya disp
komutu ile ekrana çıktı verirler.
Fonksiyon M-Dosyaları Oluşturulurken Dikkat Edilmesi
Gereken Hususlar:

1 - Her MATLAB fonksiyonu function anahtar kelimesi ile


başlamalıdır.
2 - FonksiyonAdi m-dosyasına verilen isimle aynı olmalıdır.
3 - Bir MATLAB fonksiyonu komut penceresinden fonksiyon adı ve
varsa eğer parantez içerisinde birbirlerinden virgüllerle ayrılmış
parametrelerle çağrılmalıdır.
4 – Bir fonksiyonu çağıran herhangi bir program o fonksiyona,
fonksiyonun imzasında tanımlanan sayıda parametre geçmelidir.
(Örneğin 3 parametre ile çalışsan bir fonksiyon komut penceresinden 4
parametre girilerek çağrılmamalıdır.)
Uygulama: İki nokta arasındaki uzaklığı bulan programı fonksiyon m-
dosyası kullanarak yazalım.
x1 = 1. noktanın x koordinati; x2 = 2. noktanın x koordinati
y1 = 1. noktanın y koordinati; y2 = 2. noktanın y koordinati

Uzaklik.m
function mesafe = Uzaklik(x1,y1,x2,y2) %imza
mesafe=sqrt((x2-x1)^2+(y2-y1)^2); %tanim

KOMUT PENCERESİ
>> sonuc=Uzaklik(3,4,1,2) %veya
>> Uzaklik(3,4,1,2) %sonuc ans adli degiskene atanir
BİR ÖNCEKİ ÖRNEĞİN DÜZYAZI M-DOSYASI İLE ÇÖZÜMÜ

Uzaklik.m

x1=input(' x1 koordinatini gir: ');


y1=input(' y1 koordinatini gir: ');
x2=input(' x2 koordinatini gir: ');
y2=input(' y2 koordinatini gir: ');
mesafe=sqrt((x2-x1)^2+(y2-y1)^2);
fprintf(' Girilen 2 nokta arasi mesafe: %f \n ',mesafe);

KOMUT PENCERESİ
>>Uzaklik
!!! ÖNEMLİ !!!
Fonksiyon m-dosyalarının imza satırlarında yer alan fonksiyon
adları Paskal notasyonu ile tanımlanır. Aynı şekilde fonksiyon m-
dosyalarına verilen isimler için de düzyazı m-dosyalarına verilen
isimlerde olduğu gibi Paskal Notasyonu kullanılır.
Fonksiyon m-dosyalarının imza satırlarındaki giriş ve çıkış
parametrelerini ifade etmek amacıyla kullanılan değişkenler deve
notasyonuyla tanımlanırlar.
Fonksiyon m-dosyaları içerisinde input komutu kullanılarak
kullanıcıdan bilgi ALINMAZ. Fonksiyon içerisinde değerlendirilecek
bilgi programa parametre olarak aktarılır.
 Fonksiyon m-dosyaları program yazma editörü içerisindeki run
butonu tıklanarak ÇALIŞTIRILMAZLAR. Komut penceresinden
parametre(ler) girilerek çalıştırılırlar.
ANA FONKSİYON, ALT (YARDIMCI)
FONKSİYON MANTIĞI
• Bir A fonksiyonu, işlevini yerine getirirken bir B fonksiyonundan yardım
alabilir.
• Böyle bir durumda A fonksiyonu ana ve B fonksiyonu da alt veya
yardımcı fonksiyon olarak adlandırılır.
FonksiyonA.m (Ana) FonksiyonB.m (Alt)
function sonuc=FonksiyonA(x) function sonuc=FonksiyonB(y)
araSonuc=FonksiyonB(x); %Alt fonk. çağır sonuc=y^2;
sonuc= araSonuc+x +1;
FonksiyonB işlevi, kendisine argüman
FonksiyonA bir x sayısını parametre olarak aktarılan herhangi bir y sayısının
olarak alır, bu sayıyı kullanarak 𝐱 𝟐 + 𝐱 + 𝟏 karesini almaktan ibarettir.
işleminin sonucunu doğrudan değil de
FonksiyonB adlı bir alt/yardımcı Bir fonksiyon m-dosyasının içerisinde daha
fonksiyon sayesinde dolaylı olarak önceden tanımlanmış ve çalışma dizininizin
hesaplar ve geriye döndürür. altında mevcut olan başka bir fonksiyon
m-dosyasını (alt program, yardımcı program)
kullanabilirsiniz.
ANA FONKSİYON, ALT (YARDIMCI) FONKSİYON MANTIĞI
FonksiyonA.m (Ana) FonksiyonB.m (Alt)
function sonuc=FonksiyonA(x) function sonuc=FonksiyonB(y)
araSonuc=FonksiyonB(x); %Alt fonk. çağır sonuc=y^2;
sonuc= araSonuc+x +1;

KOMUT PENCERESİ ÇIKTISI FonksiyonA temelde


ne iş yapıyor?
𝒇 𝒙 = 𝒙𝟐 + 𝒙 + 𝟏

Komut penceresinde 3 parametresi ile çalıştırılan FonksiyonA sonuç olarak 13


değerini arka planda sırasıyla aşağıdaki adımları takip ederek üretir.
1) FonksiyonA’ya giriş parametresi olarak aktarılan 3 sayısı x değişkeninin değeri olur.
2) FonksiyonA bu değer ile FonksiyonB’yi çağırır.
3) FonksiyonB 3 sayısının karesini alarak ürettiği 9 sayısını değerlendirilmek üzere
kendisini çağıran FonksiyonA’ya geri gönderir.
4) FonksiyonA FonksiyonB’den gelen cevabı yani 9 değerini araSonuc adlı değişken
içerisinde saklar.
5) FonksiyonA araSonuc değişkeninin değerine x+1=3+1=4 ekler ve 13 değerini komut
penceresinde kullanıcıya sunar.
UYGULAMA 1
Dışarıdan girilen x ve y değerlerine göre aşağıdaki fonksiyonun
değerini hesaplayan bir MATLAB programını fonksiyon M dosyası
formatında yazınız. (Dosya adı olarak Fonksiyon.m kullanınız.)

ln( x)  1 x
f(x, y)  x  y  x.y 
2
 tan( )
log10 ( y) y
Bu fonksiyon m-dosyasının imzası ne olmalıdır?

Bu fonksiyon m-dosyasının tanımı ne olmalıdır?


UYGULAMA 1

ln( x)  1 x
f(x, y)  x  y  x.y 
2
 tan( )
log10 ( y) y

function sonuc=Fonksiyon(x,y) %imza


sonuc=(x^2)*y+sqrt(x*y)+(log(x)+1)/(log10(y))+tan(x/y); %tanım

Örnek Komut Penceresi Çıktısı


UYGULAMA 2
𝟐
𝒙
𝟑
෍ 𝟓+ 𝟒𝒊 , 𝒙>𝒚
𝒊=𝒚

𝒇 𝒙, 𝒚 = 𝒚
𝟏
ෑ 𝟏+ , 𝒙<𝒚
𝒊𝟑
𝒊=𝒙

𝒍𝒐𝒈𝟐 𝒙𝒚 , 𝒙=𝒚

Kendisine parametre (argüman) olarak aldığı x ve y tam sayılarını


kullanarak yukarıdaki gibi tanımlanmış bir 𝒇 𝒙, 𝒚 parçalı fonksiyonu icra
eden bir MATLAB fonksiyonunu ParcaliFonk.m adındaki bir fonksiyon m-
dosyası içerisine yazalım.
UYGULAMA 2

function fXY=ParcaliFonk(x,y)
if x>y
toplam=0; %Toplamada Etkisiz Eleman
for i=y:x
toplam=toplam+(5+sqrt(4^i))^3;
end
fXY=toplam^2;
elseif x<y
fXY=1; %Çarpmada Etkisiz Eleman
for i=x:y
fXY=fXY*(1+1/(i^3));
end
else
fXY=log2(x*y);
end
UYGULAMA 3
Kendisine parametre olarak aldığı bir ondalıklı sayıyı yine kendisine
parametre olarak aldığı bir tamsayı adedince virgülden sonra yuvarlayan
ve geriye döndüren bir MATLAB fonksiyonunu OndalikliSayiyiYuvarla.m
adındaki fonksiyon m-dosyasının içerisine yazalım.

function yuvarlanmisSayi=OndalikliSayiyiYuvarla(sayi,basamak)
yuvarlanmisSayi=round(sayi*(10^basamak))/(10^basamak);
UYGULAMA 4
Kendisine parametre olarak aldığı 2 sayıdan küçük olanı bularak geriye
döndüren bir MATLAB fonksiyonunu IkiSayininMinimumunuBul.m
adındaki fonksiyon m-dosyasının içerisine yazalım.

function kucukSayi=IkiSayininMinimumunuBul(sayi1,sayi2)
if sayi1<sayi2
kucukSayi=sayi1;
else
kucukSayi=sayi2;
end
UYGULAMA 5
Sıralı (küçükten büyüye veya büyükten küçüğe) bir sayı dizisinin tam
ortasında bulunan dizi elemanına ortanca (median) adı verilir. Örneğin 12,
3 ve 5 sayılarının ortancası 5’tir.
Kendisine parametre olarak aldığı 3 sayının ortancasını bularak geriye
döndüren bir MATLAB fonksiyonunu UcSayininOrtancasiniBul.m
adındaki fonksiyon m-dosyasının içerisine yazalım.

function ortanca=UcSayininOrtancasiniBul(a,b,c)
enKucuk=UcSayininMinimumunuBul(a,b,c); %Alt Fonksiyon
if a==enKucuk
ortanca=IkiSayininMinimumunuBul(b,c); %Alt Fonksiyon
elseif b==enKucuk
ortanca=IkiSayininMinimumunuBul(a,c); %Alt Fonksiyon
elseif c==enKucuk
ortanca=IkiSayininMinimumunuBul(a,b); %Alt Fonksiyon
end
UYGULAMA 6
Kendisine parametre olarak aldığı 2 pozitif tam sayının En Büyük Ortak
Bölenini (EBOB) (Greatest Common Divisor-GCD) bularak geriye
döndüren bir MATLAB fonksiyonunu IkiSayininEBOBunuBul.m adındaki
fonksiyon m-dosyasının içerisine yazalım. (Fonksiyona parametre olarak
aktarılan sayıların her ikisi de pozitif değilse geriye -1 değeri
döndürülmelidir.)
function ebob=IkiSayininEBOBunuBul(sayi1,sayi2)
if (sayi1>0)&&(sayi2>0) %Her iki sayı da pozitif ise
%küçük olanını alt fonksiyon ile bul
kucukSayi=IkiSayininMinimumunuBul(sayi1,sayi2);
for i=kucukSayi:-1:1
if (mod(sayi1,i)==0)&&(mod(sayi2,i)==0)
ebob=i;
break; % EBOB bulundu
end
end %for
else
ebob=-1; %Hatalı parametre girişinin çıkışı
end
UYGULAMA 7
Kendisine parametre olarak aldığı sayi1, sayi2 ve sayi3 tam sayılarını
kullanarak sayi1* sayi2* sayi3 çarpımının sonucunu sadece toplama
yaparak hesaplayan ve geriye döndüren bir MATLAB fonksiyonunu
UcSayiyiToplayarakCarp.m adındaki fonksiyon m-dosyasının içerisine
yazalım. (Parametre olarak kullanılan sayıların hem pozitif hem de negatif
sayılar olabileceğini unutmayınız.)

function carpim=UcSayiyiToplayarakCarp(sayi1,sayi2,sayi3)
carpim=0; %Toplamada Etkisiz Eleman
for i=1:abs(sayi1) %sayi1 Kere
for j=1:abs(sayi2) %sayi2 Kere
carpim=carpim+sayi3; %sayi3 Topla
end
end
if ((sayi1<0)&&(sayi2>0))||((sayi1>0)&&(sayi2<0))
carpim=carpim*(-1); %ilk 2 sayıdan sadece 1'i negatif
end % ise sonucun işaretini değiştir.
UYGULAMA 8
Kendisine parametre olarak aldığı pozitif bir sayi1 tam sayısı ile pozitif bir
sayi2 tam sayısını kullanarak sayi1’in sayi2’ye bölümünden kalanı
(MATLAB’de tanımlı mod veya rem hazır fonksiyonlarını kullanmadan)
hesaplayan ve geriye döndüren bir MATLAB fonksiyonunu
KalaniHesapla.m adındaki fonksiyon m-dosyasının içerisine yazalım.

function kalan=KalaniHesapla(bolunen,bolen)
while bolunen>=bolen
bolunen=bolunen-bolen;
end
kalan=bolunen;

function kalan=KalaniHesaplaV2(bolunen,bolen)
if bolunen<bolen
kalan=bolunen;
else
bolum=fix(bolunen/bolen);
kalan=bolunen-bolen*bolum;
end
UYGULAMA 9
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … şeklinde sıralanan ve serideki
her bir sayının kendisinden bir önceki ve iki önceki sayı toplanarak
(f(n)=f(n-1)+f(n-2)) elde edildiği seriye Fibonacci Serisi adı verilir. Serinin
ilk 2 elemanı sabittir ve sırasıyla 0 ve 1 değerlerine sahiptir. (f(0)1 ve
f(1)=1)

Kendisine parametre olarak aldığı pozitif bir tam sayı değerini indis olarak
kullanarak bu indisteki Fibonacci sayısını hesaplayan ve geriye döndüren
bir MATLAB fonksiyonunu FibonacciSayisiniHesapla.m adındaki
fonksiyon m-dosyasının içerisine yazalım. Örneğin
FibonacciSayisiniHesapla(1) 0 değerini, FibonacciSayisiniHesapla(2)
1 değerini ve FibonacciSayisiniHesapla(13) 144 değerini geri
döndürmelidir. Fonksiyona parametre olarak aktarılan indis değerinin 0
veya negatif bir tam sayı olması durumuna geriye -1 değeri
döndürülmelidir.
UYGULAMA 9
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … ,f(n)=f(n-1)+f(n-2))

function sonuc=FibonacciSayisiniHesapla(indis)
if indis<1
sonuc=-1; %Hatalı Parametre Girişinin Çıkışı
elseif indis==1
sonuc=0; %Serinin Birinci Elemanı
elseif indis==2
sonuc=1; %Serinin İkinci Elemanı
else
ikiOncekiEleman=0; %Serinin Birinci Elemanı
birOncekiEleman=1; %Serinin İkinci Elemanı
for i=3:indis
sonuc=ikiOncekiEleman+birOncekiEleman;
ikiOncekiEleman=birOncekiEleman;
birOncekiEleman=sonuc;
end
end
UYGULAMALAR
Uygulama 7.1
Kendisine parametre olarak aldığı 3 sayının en küçüğünü bularak geriye döndüren bir
MATLAB fonksiyonunu UcSayininMinimumunuBul.m adındaki fonksiyon m-dosyasının
içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 7.2
Kendisine parametre olarak aldığı 2 pozitif tam sayının En Küçük Ortak Katını (EKOK)
(Least Common Multiple-LCM) bularak geriye döndüren bir MATLAB fonksiyonunu
IkiSayininEKOKunuBul.m adındaki fonksiyon m-dosyasının içerisine yazınız.
(Fonksiyona parametre olarak aktarılan sayıların her ikisi de pozitif değilse geriye -1
değeri döndürülmelidir.)

Örnek Komut Penceresi Çıktısı


Uygulama 7.3
Kendisine parametre olarak aldığı bir sayi1 tam sayısı ile bir sayi2 tamsayısını
kullanarak sayi1’in sayi2. üssünün ( 𝐬𝐚𝐲𝐢𝟏𝐬𝐚𝐲𝐢𝟐 ) sonucunu sadece çarpma yaparak
hesaplayan ve geriye döndüren bir MATLAB fonksiyonunu CarpmaYaparakUssunuAl.m
adındaki fonksiyon m-dosyasının içerisine yazınız. (MATLAB’in üs alma operatörü olan
^’nın kullanımına izin yoktur. Parametre olarak kullanılan sayıların hem pozitif hem de
negatif sayılar olabileceğini unutmayınız.)

Örnek Komut Penceresi Çıktısı


Uygulama 7.4
Bir 𝒏 doğal sayısının (𝒏 ≥ 𝟎) faktöriyeli 𝒏! = 𝟏. 𝟐. 𝟑. 𝟒 … . . 𝒏 formülü ile hesaplanır. (0
(Sıfır) ve 1 (Bir) sayılarının faktöriyeli 1’dir.)
Kendisine parametre olarak aldığı bir 𝒏 doğal sayısının faktöriyelini hesaplayarak geriye
döndüren bir MATLAB fonksiyonunu FaktoriyelHesapla.m adındaki fonksiyon m-
dosyasının içerisine yazınız. Fonksiyonunuza parametre olarak aktarılan sayının negatif
bir tamsayı olması durumunda geriye 0 değeri döndürülmelidir.

Örnek Komut Penceresi Çıktısı Örnek Komut Penceresi Çıktısı


Uygulama 7.5
𝟎 ≤ 𝒏 ≤ 𝒎 koşulu altında bir 𝒎 tamsayısının 𝒏’li permütasyonlarının sayısı 𝑷 = 𝒎, 𝒏 =
𝒎!
formülü ile hesaplanır.
𝒎−𝒏 !

Kendisine parametre olarak aldığı bir 𝒎 ve 𝒏 sayılarını kullanarak 𝒎 ’nin 𝒏 ’li


permütasyonlarının sayısını hesaplayan ve geriye döndüren bir MATLAB fonksiyonunu
PermutasyonHesapla.m adındaki fonksiyon m-dosyasının içerisine yazınız.
Fonksiyonunuza parametre olarak aktarılan sayılar 𝟎 ≤ 𝒏 ≤ 𝒎 koşulunu sağlamaması
durumunda geriye 0 değeri döndürülmelidir.

Örnek Komut Penceresi Çıktısı


Uygulama 7.6
Tribonacci serisi aşağıdaki gibi tanımlanır.
1, n=1
1, n=2
f(n)=
2, n=3
f(n-1)+f(n-2)+f(n-3), 𝐧≥𝟒
Dolayısıyla bu seri 1, 1, 2, 4, 7, 13, 24, 44, 81, 149, … şeklinde sıralanmalıdır. Örneğin
serinin 10. elemanının değeri 81+44+24 işlemi sonrasında (serinin 9., 8. ve 7.
elemanlarının toplanması ile) 149 olarak bulunmalıdır.
Kendisine parametre olarak aldığı pozitif bir tam sayı değerini indis olarak kullanarak bu
indisteki Tribonacci sayısını hesaplayan ve geriye döndüren bir MATLAB fonksiyonunu
TribonacciSayisiniHesapla.m adındaki fonksiyon m-dosyasının içerisine yazınız.
Fonksiyona parametre olarak aktarılan indis değerinin 0 veya negatif bir tam sayı olması
durumuna geriye -1 değeri döndürülmelidir.
Örnek
Komut
Penceresi
Çıktısı
Bilgisayar Programlama
(8. Sunu)
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) while ~RakamlariFarkliMi(n)
%birsey yap %birsey yap
end 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)
ans=
0
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
Programın çalışabilmesi için bu alt
fonksiyonun
fonksiyon m-dosyasının çalışma
içerisine dizini altında tanımlı
yazınız.
olması (mevcut olması) gereklidir.

function teklerSayaci=AraliktakiTeklerinSayisiniHesapla(altLimit,ustLimit)
teklerSayaci=0;
for i=altLimit:ustLimit
KOMUT
if TekSayiMi(i)%Geriye PENCERESİ
1 veya 0 Donduren Alt Fonksiyon
>>AraliktakiTeklerinSayisiniHesapla(1,100)
teklerSayaci=teklerSayaci+1;
ans=
end 50
end
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)
if mod(sayi,2)==0
sonuc=1;
else
sonuc=0;
end
UYGULAMA
Kendisine parametre olarak aldığı sayı bir tam sayı ise
geriye 1 değerini aksi takdirde geriye 0 değerini döndüren
bir MATLAB fonksiyonunu TamSayiMi.m adındaki
fonksiyon m-dosyasının içerisine yazınız.

function sonuc=TamSayiMi(sayi)
if sayi==round(sayi)
sonuc=1;
else
sonuc=0; Round yerine herhangi
end bir yuvarlama fonksiyonu
kullanılabilir mi?

Diğer yuvarlama
fonksiyonlarını deneyelim:
fix, ceil, floor
UYGULAMA
Ortak Bölenlerinin En Büyüğü 1 olan iki sayı aralarında asal (relatively
prime, coprime) sayılar olarak adlandırılırlar.
Kendisine parametre olarak aldığı 2 pozitif tam sayı aralarında asal
iseler geriye 1 değerini aksi takdirde geriye 0 değerini döndüren bir
MATLAB fonksiyonunu AralarindaAsallarMi.m adındaki fonksiyon m-
dosyasının içerisine yazınız.

function sonuc=AralarindaAsallarMi(sayi1,sayi2)
ebob=IkiSayininEBOBunuBul(sayi1,sayi2);
if ebob==1
sonuc=1;
else
sonuc=0;
end
UYGULAMA
Kendisine parametre olarak aldığı pozitif bir tam sayının 2 sayısının
herhangi bir üssü olup olmadığını bulan bir MATLAB fonksiyonunu
IkininUssuMu.m adındaki fonksiyon m-dosyasının içerisine yazınız.
Fonksiyona parametre olarak aktarılan sayı 2 sayısının bir x. üssü
olarak ifade edilebiliyorsa geriye [1 x] değerlerini aksi takdirde geriye
[0 0] değerleri döndürülmelidir.

function [sonuc,us]=IkininUssuMu(sayi)
if (sayi>0)&&(TamSayiMi(log2(sayi))) %Alt Fonk.
sonuc=1;
us=log2(sayi);
else
sonuc=0;
us=0;
end
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. derece denklemin
köklerini bulan programın akış diyagramını çiziniz.
ÇÖZÜM 1 ÇÖZÜM 2
A=input('A Katsayisini Giriniz= '); A=input('A Katsayisini Giriniz= ');
B=input('B Katsayisini Giriniz= '); B=input('B Katsayisini Giriniz= ');
C=input('C Sabitini Giriniz= '); C=input('C Sabitini Giriniz= ');
delta=B^2-4*A*C; delta=B^2-4*A*C;
if delta<0 if delta<0
disp('Kokler Sanal'); disp('Kokler Sanal');
else return; %Programi Ani Sonlandir
x1=(-B+sqrt(delta))/(2*A); end
x2=(-B-sqrt(delta))/(2*A); x1=(-B+sqrt(delta))/(2*A);
fprintf('1. Kok : %f \n', x1); x2=(-B-sqrt(delta))/(2*A);
fprintf('2. Kok : %f \n', x2); fprintf('1. Kok : %f \n', x1);
end fprintf('2. Kok : %f \n', x2);

DÜZYAZI M ÇÖZÜMLER
ÇÖZÜM 3
function IkinciDereceDenkleminKokleriniHesapla(A,B,C)
delta=B^2-4*A*C;
if delta<0 Çözümün hem if ve hem de else bloğunda
kök hesabı yaptırılmadığı için (sadece
disp('Kokler Sanal');
else bloğunda yaptırılıyor) geriye belirli
else
bir değer döndürülmediğine dikkat ediniz.
x1=(-B+sqrt(delta))/(2*A);
Bu yüzden imza satırında bir atama
operatörü kullanılmamıştır.
x2=(-B-sqrt(delta))/(2*A);
fprintf('1. Kok : %f \n', x1);
fprintf('2. Kok : %f \n', x2);
end

1. FONKSİYON M ÇÖZÜM
ÇÖZÜM 4
function IkinciDereceDenkleminKokleriniHesapla(A,B,C)
delta=B^2-4*A*C;
if delta<0
disp('Kokler Sanal');
return; %Programi Ani Sonlandir
end
İmza satırında
x1=(-B+sqrt(delta))/(2*A); bir atama operatörü
kullanılmadığına, yani fonksiyonun geriye
x2=(-B-sqrt(delta))/(2*A);
bir değer döndürmediğine dikkat ediniz.
fprintf('1. Kok : %f \n', x1);
fprintf('2. Kok : %f \n', x2);

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


• n×1 veya 1×m dizisi bir vektör gösterir.
• Bu çerçevede n×1dizisi sütun vektörü ve 1×m
dizisi ise satır vektörü olarak da düşünülebilir.
• m×n veya n×m 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
BİR DİZİNİN HERHANGİ BİR
ELEMANININ YOK EDİLMESİ
İ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.
SATIR VEKTÖRLERİNİN İÇERİSİNİN
OTOMATİK OLARAK SAYILARLA
DOLDURULMASI
satirVektoru= ones(1,n) -> n tane 1 elemanından
oluşan bir satır vektörü
satirVektoru= zeros(1,n) -> n tane 1 elemanından
oluşan bir satır vektörü
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 birKOMUT PENCERESİ
vektor acaba?
>>B= [2, 4, -5, 6, 7, 99, -132, 126];
if A(i)>enBuyuk
>>DizininMaksimumunuBul(B)
enBuyuk=A(i);
end ans=
end 126
>>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
UYGULAMA
Sayılar 𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 , … , 𝒙𝒏 olmak üzere n adet sayının geometrik ortalaması
aşağıdaki formül kullanılarak hesaplanır.
𝑮 = 𝒏 𝒙𝟏 . 𝒙𝟐 . 𝒙𝟑 … 𝒙𝒏
Kendisine parametre olarak aldığı satır vektörü formundaki bir dizinin
elemanlarının geometrik ortalamasını hesaplayarak geriye bir MATLAB
fonksiyonunu DizininGeometrikOrtalamasiniHesapla.m adındaki fonksiyon m-
dosyasının içerisine yazınız.

function ortalama=DizininGeometrikOrtalamasiniHesapla(A)
carpim=1;
diziBoyutu=length(A);
for i=1:diziBoyutu
carpim=carpim*A(i);
end
ortalama=nthroot(carpim,diziBoyutu);
BİR SATIR VEKTÖRÜNÜN BİLGİ
DEPOLAMAK AMACIYLA KULLANILMASI
A=[ ]; %Baslangicta Bos
1. METOD 2. METOD
A=[A x]; %A=[x] A(1)=x; %A=[x]
A=[A y]; %A=[x y] 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 2. RESİM
A=[A x]; %A=[x] A=[x A]; %A=[x]
A=[A y]; %A=[x y] A=[y A]; %A=[y x]
Son eklenen dizi elemanı dizinin Son eklenen dizi elemanı dizinin
son elemanı oluyor. 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
(1,10) veparametre olarak aldığı
(10,1) şeklindeki bir alt limit ile bir üst
parametre
limit arasındakiher
aktarımlarının çiftikisinde
sayılarıdebularak bir satır vektörü
aynı sonucu
üretecek geriye
içerisinde nasıl yazardınız?
döndüren
fonksiyonu bir MATLAB fonksiyonunu
adındaki
Programın
AraliktakiCiftleriBul.m fonksiyon için bu alt
çalışabilmesi
m-dosyasının içerisine çalışma dizini altında tanımlı
yazınız.
fonksiyonun
olması (mevcut olması) gereklidir.
function depoVektor=AraliktakiCiftleriBul(altLimit,ustLimit)
depoVektor=[ ];%Baslangicta Bos Bir Satir Vektoru
for i=altLimit:ustLimit KOMUT PENCERESİ
>>AraliktakiCiftleriBul(1,10)
if CiftSayiMi(i)%Geriye
ans= 1 veya 0 Donduren Alt Fonksiyon
2 4 6 8 i];%Depo
depoVektor=[depoVektor 10 Vektorun Sonuna Ekle
>>AraliktakiCiftleriBul(10,1)
%depoVektor=[i depoVektor];
ans=
end []
end
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

function sonuc=DiziSadeceBirlerMiIceriyor(B)
for i=1:length(B)
if B(i)==1
sonuc=1;
else
KOMUT
sonuc=0;PENCERESİ
>>DiziSadeceBirlerMiIceriyor([-8
end
4 6 25 1])
ans=
end 1
ÇALIŞAN ÇÖZÜM
function sonuc=DiziSadeceBirlerMiIceriyor(B)
sonuc=1;%Dizinin Sadece 1 Degeri Icerdigini Kabul Et
for i=1:length(B)
KOMUT
if B(i)~=1%En PENCERESİ
Az 1 Adet Aksi Ornek Mevcutsa
>>DiziSadeceBirlerMiIceriyor(ones(1,10))
sonuc=0;%Kabulu Degistir
ans=
1break;%return Komutu da Kullanılabilir
>>DiziSadeceBirlerMiIceriyor([1
end 1 1 25 1])
end
ans=
0
UYGULAMA
Kendisine parametre olarak aldığı satır vektörü formundaki tek boyutlu bir
dizinin içerisindeki en küçük elemanı ve bu elemanın dizinin kaçıncı elemanı
olduğunu bularak geriye döndüren bir MATLAB fonksiyonunu
DizininMinimumunuVeIndisiniBul.m adındaki fonksiyon m-dosyasının
içerisine yazınız.

function [enKucuk, enKucugunIndisi]= . . .


DizininMinimumunuVeIndisiniBul(A)
enKucugunIndisi=1;
diziBoyutu=length(A);
for i=2:diziBoyutu
if A(i)<A(enKucugunIndisi)
enKucugunIndisi=i;
end
end
enKucuk=A(enKucugunIndisi);
UYGULAMA
Belirli sayıda terim içeren ve ardışık iki teriminin arasındaki fark aynı sabit sayı
olan bir dizi bir sonlu aritmetik dizi (finite arithmetic sequence) olarak adlandırılır.
Aritmetik dizilerin terimleri arasındaki farka ise ortak fark (common difference)
adı verilir. Örneğin {2, 3, 4, 5} dizisi ortak farkı 1 olan bir sonlu aritmetik dizidir.
(En az 3 terimli bir dizinin aritmetik dizi olup olmayacağının araştırılabileceğini
unutmayınız.)
Kendisine parametre olarak aldığı en az 3 elemanlı satır vektörü formundaki tek
boyutlu bir dizi bir sonlu aritmetik dizi ise geriye 1 değerini aksi takdirde geriye 0
değerini döndüren bir MATLAB fonksiyonunu SonluAritmetikDiziMi.m adındaki
fonksiyon m-dosyasının içerisine yazınız.

KOMUT PENCERESİ
UYGULAMA
function sonuc=SonluAritmetikDiziMi(A)
diziBoyutu=length(A);
if diziBoyutu>=3
sonuc=1; %Aritmetik Dizi Kabulü Yap
ortakFark=A(2)-A(1);
for i=3:diziBoyutu
if (A(i)-A(i-1))~=ortakFark
sonuc=0; %Kabulü Değiştir
break; %En az 1 Tane Aksine Örnek Yeterli
end
end
else
sonuc=0; %En Az 3 Terimle Bir Karara Varılabilir.
end
UYGULAMA

Belirli Kendisine parametre olarak aldığı en az 3 elemanlı satır vektörü


formundaki tek boyutlu bir dizi bir sonlu aritmetik dizi ise geriye 1 değerini aksi
takdirde geriye 0 değerini döndüren bir MATLAB fonksiyonunu
SonluAritmetikDiziMi.m adındaki fonksiyon m-dosyasının içerisine yazınız.

KOMUT PENCERESİ
UYGULAMALAR
Uygulama 8.1
Kendisine parametre olarak aldığı pozitif bir alt limit ile pozitif bir üst limit arasındaki bütün
aralarında asal sayı çiftlerini bulan ve ekrana alt alta basan bir MATLAB fonksiyonunu
AraliktakiAralarindaAsalSayiCiftleriniBul.m adındaki fonksiyon m-dosyasının içerisine
yazınız. Fonksiyonunuzun geriye hiçbir değer döndürmeyeceğine dikkat ediniz ve
fonksiyon imzasında bu durumu göz önüne alınız.

Örnek Komut Penceresi Çıktısı


Uygulama 8.2
Pozitif bir tam sayının karesi şeklinde ifade edilebilen tam sayılara tam kare sayı (square
number, perfect square) denir. İlk birkaç tane tam kare sayıya örnek olarak 𝟏 = 𝟏𝟐 , 𝟒 =
𝟐𝟐 , 𝟗 = 𝟑𝟐 , 𝟏𝟔 = 𝟒𝟐 ve 𝟐𝟓 = 𝟓𝟐 sayıları verilebilir.
Kendisine parametre olarak aldığı pozitif bir tam sayı, bir tam kare sayı ise geriye 1
değerini aksi takdirde geriye 0 değerini döndüren bir MATLAB fonksiyonunu
TamkareSayiMi.m adındaki fonksiyon m-dosyasının içerisine yazınız.

Örnek
Komut
Penceresi
Çıktısı
Uygulama 8.3
Kendisine parametre olarak aldığı satır vektörü formundaki tek boyutlu bir dizinin
içerisindeki negatif tek sayıları toplamını hesaplayarak geriye döndüren bir MATLAB
fonksiyonunu DizidekiNegatifTeklerinToplaminiHesapla.m adındaki fonksiyon m-
dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 8.4
Kendisine parametre olarak aldığı satır vektörü formundaki tek boyutlu bir dizinin
içerisindeki ondalıklı sayıların adedini hesaplayarak geriye döndüren bir MATLAB
fonksiyonunu DizidekiOndalikliSayilarinAdediniHesapla.m adındaki fonksiyon m-
dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 8.5
Kendisine parametre olarak aldığı satır vektörü formundaki tek boyutlu bir dizinin
içerisindeki yine kendisine parametre olarak aldığı bir sayıdan en az bir adet mevcutsa
geriye 1 değerini aksi takdirde geriye 0 değerini döndüren bir MATLAB fonksiyonunu
DizininIcindeMevcutMu.m adındaki fonksiyon m-dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 8.6
Belirli sayıda terim içeren ve ardışık iki teriminin oranı aynı sabit sayı olan bir dizi bir
sonlu geometrik dizi (finite geometric sequence) olarak adlandırılır. Geometrik dizilerin
terimleri arasındaki orana ise ortak oran (common ratio) adı verilir. Örneğin {2, 6, 18, 54}
dizisi ortak oranı 3 olan bir sonlu aritmetik dizidir. (En az 3 terimli bir dizinin aritmetik dizi
olup olmayacağının araştırılabileceğini unutmayınız.)
Kendisine parametre olarak aldığı en az 3 elemanlı satır vektörü formundaki tek boyutlu
bir dizi bir sonlu geometrik dizi ise geriye 1 değerini aksi takdirde geriye 0 değerini
döndüren bir MATLAB fonksiyonunu SonluGeometrikDiziMi.m adındaki fonksiyon m-
dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 8.7
Kendisine parametre olarak aldığı satır vektörü formundaki tek boyutlu bir A dizisi ile B
dizisi birbirine eşit ise (tamamen birbirinin aynısı ise) geriye 1 değerini aksi takdirde
geriye 0 değerini döndüren bir MATLAB fonksiyonunu DizilerBirbirineEsitMi.m adındaki
fonksiyon m-dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Bilgisayar Programlama
(9. Sunu)
İKİ BOYUTLU DİZİLER (MATRİSLER)

İki boyutlu dizi (matris)


denildiğinde aklınıza kare
bulmaca veya satranç tahtası
gelmelidir.
MATLAB’DE İKİ BOYUTLU DİZİLER
(MATRİSLER) VE size Fonksiyonu

1. boyut

2. boyut
MATRİS ELEMANLARINA İNDİS İLE
ULAŞMA

Virgül ile ayrılmış iki


indis kullanıldığına dikkat
ediniz (satır indisi ve
sütun indisi). Tek boyutlu
dizilerde ise tek bir indis
kullandığımızı da
hatırlayınız.
İPUCU

Kendisine M adındaki bir matrisi parametre olarak alan


bir fonksiyonu matrisin boyutuyla ilgili bir işlem
yapıyorsa dinamik bir boyut analizi için size(M)
fonksiyonunu muhakkak kullanmak zorundadır. (Bu
fonksiyona komut penceresinden nasıl bir matrisin
parametre olarak aktarılacağı peşinen bilinemez çünkü.)
İPUCU
Bir matris içerisinde iç içe 2 for döngüsü kullanılarak
kolaylıkla gezilebilir. Dıştaki döngü (i ile kontrol edilen
döngü) satır indislerini ve içteki döngü (j ile kontrol
edilen döngü) sütun indislerini temsil amacıyla
kullanılabilir.

[satirSayisi sutunSayisi]=size(M); Bu program


toplam=0; ne iş yapar?
for i=1:satirSayisi
for j=1:sutunSayisi
toplam=toplam+M(i,j);
end
end
disp(toplam);
MATRİSLERDE İŞLEMLER
Aşağıdaki matris işlemlerini MATLAB zaten kolayca
gerçekleştirmektedir. Ama bizim amacımız bu işlemleri
şimdiye kadar öğrendiğimiz programlama yapıları ile
kendimizin yazabilmesidir.

Matrislerin Bir Skalerle Çarpımı

Matrislerde Toplama ve Çıkarma

Matrislerde Çarpma

Matrislerin Transpozu
Matrislerin Bir Skalerle Çarpımı
Kendisine parametre olarak aldığı bir M matrisinin her bir
elemanını yine kendisine parametre olarak aldığı bir k skaleri ile
çarpan ve elde ettiği N matrisini geriye döndüren bir MATLAB
fonksiyonunu MatrisiSkalerleCarp.m adındaki fonksiyon
m-dosyasının içerisine yazınız.

function N=MatrisiSkalerleCarp(M,k)
N=[ ];%Baslangicta Bos Bir Matris
[satirSayisi sutunSayisi]=size(M);
for i=1:satirSayisi
for j=1:sutunSayisi
KOMUT PENCERESİ
N(i,j)=M(i,j)*k;
>>MatrisiSkalerleCarp([1 2;3 4],6)
end
ans=
end
6 12
18 24
Matrislerde Toplama ve Çıkarma İşlemi
Kendisine parametre olarak aldığı bir M matrisi ile yine kendisine
parametre olarak aldığı bir N matrisini toplayarak elde ettiği T
matrisini geriye döndüren bir MATLAB fonksiyonunu
IkiMatrisiTopla.m İki
adındaki
matrisin fonksiyon
toplanabilmesi veya çıkarılabilmesi
m-dosyasının içerisine
yazınız. ancak ve ancak boyutlarının (yani satır ve
sütun sayılarının) eşit olması ile mümkündür.

function T=IkiMatrisiTopla(M,N)
T=[ ];%Baslangicta Bos Bir Matris
[satirSayisiM sutunSayisiM]=size(M);
[satirSayisiN sutunSayisiN]=size(N);
KOMUT PENCERESİ
if (satirSayisiM==satirSayisiN)&&(sutunSayisiM==sutunSayisiN)
>>IkiMatrisiTopla([1
for i=1:satirSayisiM%Veya 2;3 4],[5 6;7 8])
satirSayisiN
ans=
for j=1:sutunSayisiM%Veya sutunSayisiN
6 8
T(i,j)=M(i,j)+N(i,j);
end 10 12
end
end
Matrislerde Çarpma İşlemi
A ve B gibi iki matrisin A=[1 2 1;0 3 -1];
çarpılabilmesi için A matrisinin B=[1 2; 1 5;2 3];
sütun sayısının B matrisinin satır [satirA sutunA]=size(A);
sayısına eşit olması [satirB sutunB]=size(B);
gerekmektedir. A matrisi m×n, B if sutunA ~= satirB
matrisi n×r ise bu çarpma işlemi disp('Çarpma yapılamaz.');
sonucunda elde edilecek C return;
matrisinin boyutu m×r olacaktır. end

Örnek
C=zeros(satirA, sutunB);
for i=1: satirA
for j=1: sutunB
1 2  for k=1: sutunA %veya satirB
1 2 1 
A 
B  1 5 C(i,j)=C(i,j)+A(i,k)*B(k,j);
0 3  1 2 3
end
end
end
5 15 disp(A);
C  A B    disp(B);
1 12 disp(C);
Matrislerde Transpoz İşlemi
Transpoz, matrislerde satır ile sütunun yer değiştirmesi işlemidir.
Yani A=2×3’lük bir matrisin transpozu alındığı zaman B=AT=3×2’lik bir
matris elde edilir.

A=[1 3 0; 4 2 -3]; B =AT


A=
B=[ ];
1 4
[m n]=size(A); 1 3 0
3 2
4 2 -3
for i=1:n %A’nin Sutunu 0 -3
for j=1:m %A’nin Satiri
B(i,j)=A(j,i); Komut satırında A' yı test ediniz.
end Hangi metod daha kolay ? 
end
disp(A);
disp(B);
BİR KARE MATRİSİN ANA KÖŞEGENİ
(Kuzey Batı – Güney Doğu Köşegeni)
Köşegen Üzerindeki İç Döngü Üst Üçgen Bölgedeki
Elemanlar (i==j) Değişkeni (j) Elemanlar (j>i)

𝟒 𝟒 −𝟏𝟓 𝟑 𝟐𝟕
𝟏 𝟕𝟖 𝟗 𝟏𝟔 −𝟕
Dış Döngü
𝑴 = 𝟏𝟐𝟑 −𝟗 𝟐𝟓 𝟑𝟒 𝟐
Değişkeni (i)
𝟒 𝟓𝟖 𝟑𝟒 𝟒𝟐 𝟓𝟔
−𝟔𝟓 𝟏𝟏𝟐 𝟐 𝟖 𝟑

Alt Üçgen Bölgedeki


Elemanlar (i>j)
BİR KARE MATRİSİN İKİNCİL KÖŞEGENİ
(Kuzey Doğu – Güney Batı Köşegeni)
Üst Üçgen Bölgedeki İç Döngü Köşegen Üzerindeki
Elemanlar (i+j)<(n+1) Değişkeni (j) Elemanlar (i+j)==(n+1)

𝟒 𝟒 −𝟏𝟓 𝟑 𝟐𝟕
𝟏 𝟕𝟖 𝟗 𝟏𝟔 −𝟕
Dış Döngü
𝑴 = 𝟏𝟐𝟑 −𝟗 𝟐𝟓 𝟑𝟒 𝟐
Değişkeni (i)
𝟒 𝟓𝟖 𝟑𝟒 𝟒𝟐 𝟓𝟔
−𝟔𝟓 𝟏𝟏𝟐 𝟐 𝟖 𝟑

Alt Üçgen Bölgedeki


Elemanlar (i+j)>(n+1)
UYGULAMA
Kendisine parametre olarak aldığı bir M kare matrisinin ana
köşegeni üzerindeki elemanlarının aritmetik ortalamasını
bularak geriye döndüren bir MATLAB fonksiyonu yazınız. (İç içe
2 for döngüsüne ihtiyaç duyulur mu? Tek for döngüsü ile
çözüme ulaşabilir miyiz?)

function ortalama=AnaKosegeninAritmetikOrtalamasi(M)
[satirSayisi sutunSayisi]=size(M);
if satirSayisi==sutunSayisi % M Bir Kare Matris İse
toplam=0;
for i=1:satirSayisi %for i=1:sutunSayisi
toplam=toplam+M(i,i);
end
ortalama=toplam/satirSayisi;
else
ortalama=0; % M Bir Kare Matris Değilse
end
UYGULAMA
Kendisine parametre olarak aldığı bir M kare matrisinin ikincil
köşegeni üzerindeki elemanlarının geometrik ortalamasını
bularak geriye döndüren bir MATLAB fonksiyonu yazınız. (İç içe
2 for döngüsüne ihtiyaç duyulur mu? Tek for döngüsü ile
çözüme ulaşabilir miyiz?)

function ortalama=IkincilKosegeninGeometrikOrtalamasi(M)
[satirSayisi sutunSayisi]=size(M);
if satirSayisi==sutunSayisi % M Bir Kare Matris İse
carpim=1;
for i=1:satirSayisi % for i=1:sutunSayisi
carpim=carpim*M(i,satirSayisi+1-i); % (i+j)=(n+1)
end
ortalama=nthroot(carpim,satirSayisi);
else
ortalama=0; % M Bir Kare Matris Değilse
end
İPUCU
Bir kare matrisin sadece birincil veya ikincil
köşegeni üzerindeki elemanlarını ilgilendiren
uygulamalar geliştirilirken iç içe 2 for döngüsü
kullanılmasına gerek yoktur. Bu amaca yönelik
olarak tek bir for döngüsü yeterlidir.
UYGULAMA
Simetrik Matrislerin Tespiti
Ana köşegenin ayırdığı üst yarısı ile alt yarısı birbirinin aynası
görüntüsünde olan kare matrise Simetrik Matris (Symmetric
Matrix) denir. Başka bir deyişle transpozu kendisine eşit olan bir
kare matris simetriktir. Örnek :

𝟕 −𝟐 𝟓
𝑴 = −𝟐 𝟖 𝟏𝟒
𝟓 𝟏𝟒 𝟎

Kendisine parametre olarak aldığı bir M kare matrisi simetrik matris ise
geriye 1 değerini aksi takdirde geriye 0 değerini döndüren bir MATLAB
fonksiyonunu SimetrikMatrisMi.m adındaki fonksiyon m-dosyasının
içerisine yazalım.
UYGULAMA
Simetrik Matrislerin Tespiti
function sonuc=SimetrikMatrisMi(M)
[satirSayisi sutunSayisi]=size(M);
if satirSayisi==sutunSayisi % M Bir Kare Matris İse
sonuc=1; % Ana köşegen ikincil köşegene eşittir kabulünü yap
for i=1:satirSayisi
for j=1:sutunSayisi
if M(i,j)~=M(j,i)
sonuc=0; % Kabulü değiştir
return; %Programı ani sonlandır
end
return komutu yerine break
end
kullanılsaydı ne olurdu?
end
else
sonuc=0; % M nin önce kare matris olması lazım
end
UYGULAMA
Üst Üçgen Matrislerin Tespiti
Bir kare matrisin ana köşegeninin o matrisi, birisi köşegenin
altında ve diğeri de köşegenin üstünde olmak üzere 2 üçgen
bölgeye ayırdığını bilinmektedir. Ana köşegenin altında kalan
üçgen bölgenin tüm elemanları 0 değerine sahip olan kare
matrise Üst Üçgen Matris (Upper Triangular) denir. Örnek:
𝟕 −𝟐 𝟓
𝑴= 𝟎 𝟖 𝟏𝟒
𝟎 𝟎 𝟎

Kendisine parametre olarak aldığı bir M kare matrisi üst üçgen matris
ise geriye 1 değerini aksi takdirde geriye 0 değerini döndüren bir
MATLAB fonksiyonunu UstUcgenMatrisMi.m adındaki fonksiyon m-
dosyasının içerisine yazalım.
UYGULAMA
Üst Üçgen Matrislerin Tespiti
function sonuc=UstUcgenMatrisMi(M)
[satirSayisi sutunSayisi]=size(M);
if satirSayisi==sutunSayisi % M Bir Kare Matris İse
sonuc=1; % M nin bir üst üçgen olduğunu kabul et
for i=1:satirSayisi
for j=1:sutunSayisi
if (i>j)&&(M(i,j)~=0)
sonuc=0; % Kabulü değiştir
return; %Programı ani sonlandır
end
end
end
else
sonuc=0; % M nin önce kare matris olması lazım
end
UYGULAMA
Aşağıdaki gibi bir ekran çıktısı verecek EkranaRakamBas.m adında
bir fonksiyon m-dosyası yazınız. (Fonksiyonunuz kendisine hiçbir
argüman almayacak ve geriye yine hiçbir değer çevirmeyecektir.)

EKRAN ÇIKTISI function EkranaRakamBas()


>>EkranaRakamBas() clc;
123456789 for i=1:9 %Satir Sayisi
12345678 for j=1:(10-i) %Sutun Sayisi
1234567 fprintf('%d ', j);
123456 end
12345 fprintf('\n'); %Bir Alt Satirin Basina Git
1234 end
123
12
1
UYGULAMA
Aşağıdaki gibi bir ekran çıktısı verecek EkranaRakamBas.m adında
bir fonksiyon m-dosyası yazınız. (Fonksiyonunuz kendisine hiçbir
argüman almayacak ve geriye yine hiçbir değer çevirmeyecektir.)

EKRAN ÇIKTISI
>>EkranaRakamBas()
111111111
22222222
3333333
444444
55555
6666
777
88
9
UYGULAMA
Aşağıdaki gibi bir ekran çıktısı verecek EkranaRakamBas2.m adında
bir fonksiyon m-dosyası yazınız. (Fonksiyonunuz kendisine hiçbir
argüman almayacak ve geriye yine hiçbir değer çevirmeyecektir.)

9x9’luk bir kare matrisin ana


EKRAN ÇIKTISI
>>EkranaRakamBas2() köşegene göre alt üçgen
1 bölgesinde (ana köşegen
12 dahil) (if i>=j) j’leri, üst üçgen
123 bölgesinde ise boşluk
1234 karakterlerini ekrana basan
12345 bir çözüm işe yarar mı?
123456
1234567
12345678
123456789
UYGULAMA
K=[-4 3 0;2 0 4 ] matrisindeki sıfırların sayısını ve yerini (satır ve
sütun numaralarını) ekrana basan bir MATLAB düzyazı
m-programı yazınız.
K=[-4 3 0;2 0 4 ];%Rastgele Matris Icinde Sıfır Arayin
[m n]=size(K);
sifirSayisi=0;%Sayac
for i=1:m
for j=1:n
if K(i,j)==0
sifirSayisi=sifirSayisi+1;
fprintf('K(%d,%d)=0\n',i,j);
end
end
end
disp(K);
fprintf('K Matrisindeki SIFIR Sayisi=%d\n',sifirSayisi);
UYGULAMA
6 parametresi ile 6 x 6 boyutunda ve 10 parametresi ile de 10 x 10
boyutunda bir alana aşağıdaki komut penceresi çıktılarını üreten bir
MATLAB fonksiyonunu EkranaSekilCiz1.m adındaki fonksiyon m-
dosyasının içerisine yazalım. Fonksiyon kendisine parametre olarak
aldığı pozitif bir n tamsayısını kullanarak n x n boyutundaki bir alana
aynı şekli çizebilmelidir.
UYGULAMA
function EkranaSekilCiz1(n) % !!İMZAYA DİKKAT!!
for i=1:n % n Satırlı
for j=1:i % Üst üçgeni dikkate alma
if (j==1) || (i==j) || (i==n)
fprintf('*'); %Ekrana yıldız bas
else
fprintf(' '); %Ekrana yıldız bas
end
end
fprintf('\n'); %Bir sonraki satırın başına git
end
UYGULAMA
Komut penceresinde çalıştırıldığında aşağıdaki gibi bir ekran çıktısı
verecek bir MATLAB fonksiyonunu EkranaSekilCiz11.m adındaki
fonksiyon m-dosyasının içerisine yazalım.

function EkranaSekilCiz11() % !!İMZAYA DİKKAT!!


for i=1:9 %9 Satırlı
for j=1:9 %9 Sütunlu
if ((j>=i)&&(i+j)<=10) || (((i+j)>=10)&&(j<=i))
fprintf('*'); %Ekrana Yıldız Bas
else
fprintf(' '); %Ekrana Boşluk Bas
end
end
if deyimindeki 1. fprintf('\n'); %Bir Sonraki Satırın Başına Git
kısmı yoksa 2. kısmı end
sayesinde?
UYGULAMALAR
Uygulama 9.1
Kendisine parametre olarak aldığı bir M kare matrisinin ana köşegeni ikincil köşegenine
eşitse geriye 1 değerini aksi takdirde geriye 0 değerini döndüren bir MATLAB
fonksiyonunu AnaKosegenIkincilKosegeneEsitMi.m adındaki fonksiyon m-dosyasının
içerisine yazınız. Eğer M bir kare matris değilse geriye 0 değeri döndürülmelidir.

Örnek Komut Penceresi Çıktısı


Uygulama 9.2
Kendisine parametre olarak aldığı bir M kare matrisi birim matris ise geriye 1 değerini
aksi takdirde geriye 0 değerini döndüren bir MATLAB fonksiyonunu BirimMatrisMi.m
adındaki fonksiyon m-dosyasının içerisine yazınız. Eğer M bir kare matris değilse geriye
0 değeri döndürülmelidir.

Örnek Komut Penceresi Çıktısı


Uygulama 9.3
Ana köşegenin üstünde kalan üçgen bölgenin tüm elemanları 0 değerine sahip olan kare
matrise Alt Üçgen Matris (Lower Triangular) denir.
Kendisine parametre olarak aldığı bir M kare matrisi alt üçgen matris ise geriye 1 değerini
aksi takdirde geriye 0 değerini döndüren bir MATLAB fonksiyonunu AltUcgenMatrisMi.m
adındaki fonksiyon m-dosyasının içerisine yazalım.

Örnek
Komut
Penceresi
Çıktısı
Uygulama 9.4
Kendisine parametre olarak aldığı bir M kare matrisinin alt üçgen bölgesindeki
elemanlarını olduğu haliyle, ana köşegendeki elemanlar yerin boşluk karakteri
kullanarak ve üst üçgen bölgesindeki elemanlar yerine de ‘*’ kullanarak bu matrisi ekrana
basan bir MATLAB fonksiyonunu EkranaSekilCiz2.m adındaki fonksiyon m-dosyasının
içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 9.5
Komut penceresinde çalıştırıldığında aşağıdaki gibi bir ekran çıktısı verecek bir MATLAB
fonksiyonunu EkranaSekilCiz3.m adındaki fonksiyon m-dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 9.6
Komut penceresinde çalıştırıldığında aşağıdaki gibi bir ekran çıktısı verecek bir MATLAB
fonksiyonunu EkranaSekilCiz4.m adındaki fonksiyon m-dosyasının içerisine yazınız.

Örnek Komut Penceresi Çıktısı


Uygulama 9.7
Komut penceresinde çalıştırıldığında aşağıdaki gibi bir ekran çıktısı verecek bir MATLAB
fonksiyonunu EkranaSekilCiz5.m adındaki fonksiyon m-dosyasının içerisine yazınız.
Fonksiyonun hiçbir parametre almayacağına ve geriye hiçbir değer döndürmeyeceğine
dikkat ediniz.

Örnek Komut Penceresi Çıktısı


Uygulama 9.8
Komut penceresinde çalıştırıldığında aşağıdaki gibi bir ekran çıktısı verecek bir MATLAB
fonksiyonunu EkranaSekilCiz6.m adındaki fonksiyon m-dosyasının içerisine yazınız.
Fonksiyonun hiçbir parametre almayacağına ve geriye hiçbir değer döndürmeyeceğine
dikkat ediniz.

Örnek Komut Penceresi Çıktısı


Bilgisayar Programlama
(10. Sunu)
MATLAB’DE NOKTA
(ELEMANTER-ELEMAN ELEMAN) İŞLEMLER
MATLAB’de nokta işlemler elemanter yani eleman eleman
gerçekleştirilen işlemleri ifade ederler ve bu amaçla . operatöründen
faydalanırlar. (Gerçekleştirilecek matematiksel işlemin operatörünün
önünde . operatörü kullanılır.)

Eleman Eleman Çarpma: .*


Eleman Eleman Bölme: ./
Eleman Eleman Üs Alma: .^
Örneğin b adındaki bir matrisin her bir elemanının karesini almak
için b^2 yerine b.^2 kullanılmalıdır.
Benzer şekilde bir a satır vektörü ile bir b satır vektörünün aynı indis
değerlerindeki elemanlarının çarpımını içeren bir c satır vektörü
elde etmek c=a.*b deyiminden faydalanılmalıdır.
MATLAB’DE NOKTA
(ELEMANTER-ELEMAN ELEMAN) İŞLEMLER
MATLAB’DE 2 BOYUTLU GRAFİK
İŞLEMLERİ
MATLAB’DE 2 BOYUTLU GRAFİK TÜRLERİ

1. Bir grafik penceresinde tek bir grafik (plot komutuyla)


2. Bir grafik penceresinde birden fazla grafik (Grafik elemanlarını
plot komutu içinde virgülle ayırarak ya da hold komutuyla)
3. Birden fazla grafik farklı grafik pencereleri içerisinde (figure
komutuyla)
4. Birden fazla grafik tek bir grafik penceresi içinde ama farklı
grafikler halinde (subplot komutuyla)
MATLAB’de GRAFİK İŞLEMLERİ
MATLAB güçlü bir “ grafik araç kutusuna” (toolbox) sahiptir.

MATLAB’de 2 boyutlu (2D) grafik çizebilmek için plot komutu


kullanılır. plot komutunun açtığı yeni grafik penceresi üzerinde
grafiğiniz ile ilgili değişiklikler yapabilir ve hatta grafiğinizi farklı
formatlarda (bmp veya jpeg gibi) saklayabilirsiniz. (Menüleri
inceleyiniz.)
Örnek: y  x 2  9 x  20
fonksiyonunun herhangi bir aralıktaki grafiği aşağıda verilen
MATLAB komutlarının çalıştırılması ile elde edilir.
Grafik1.m
clear;
x=0:20; % x ve y satir vektorleri
y=x.^2-9*x-20; % . operatorune dikkat !!!
plot(x,y);
GRAFİK DÜZENLEYEN KOMUTLAR
Çizeceğiniz her bir grafik için aşağıda verilen tanımlamalar mevcut
olmalıdır:
1. Grafiğin başlığı bold face: kalın harfle yaz

2. Eksen takımlarının isimleri


Grafiğe bir isim, başlık vermek için title komutu kullanılır.
x eksenine bir eksen ismi vermek için xlabel komutu kullanılır.
y eksenine bir eksen ismi vermek için ylabel komutu kullanılır.
Grafik2.m
clear;
x=0:20;
y=x.^2-9*x-20;
plot(x,y);
title('\bf x^2-9x-20 Fonksiyonunun Grafigi');
xlabel('\bf x');
ylabel('\bf y');
ÇOKLU GRAFİKLER
MATLAB’de tek bir grafik penceresinde birden fazla grafik çizdirmek
mümkündür.

Örnek
y(t )  3t 2  5t  8 fonksiyonu ile türevi olan y(t )  6t  5
fonksiyonunun t’ye göre değişimlerini aynı grafik penceresi üzerinde
gösterebilmek için aşağıda verilen MATLAB programı çalıştırılır:

Grafik3.m
clear;
t=0:0.1:5;%artis miktari grafigin seklini etkiler !!!
y1=3*t.^2-5*t+8;
y2=6*t-5;
plot(t,y1,t,y2);
UYGULAMA
0 ile 360 derece arasındaki açı değerleri için sin(x) ve cos(x)
fonksiyonlarını aynı grafik penceresinde çizen bir MATLAB programı
yazınız.

Grafik4.m
clear;
derece=0:10:360; %Artis miktari 60 deneyiniz
s=sind(derece);
c=cosd(derece);
plot(derece,s,derece,c);
GRAFİKLERİ DÜZENLEME
Çizeceğimiz grafiklerde aşağıda belirtilen türlerde düzenlemeler
yapabiliriz:
1. Çizgi rengi ve tipini değiştirmek
2. x değeri ile fonksiyon değerinin kesiştiği noktaları işaretlemek
3. Grafiklere açıklama eklemek

plot(x,y,'r-') şeklinde formatlı MATLAB komutu, x ve y


vektörlerinin grafik çizgi renginin kırmızı ve stilinin düz
(sürekli çizgi) olmasını sağlar.
Renk İşaretleme Tipi Çizgi Tipi
y: yellow (sarı) . : nokta - : sürekli çizgi
m: magenta (mor) o : yuvarlak : : nokta nokta
b: blue (mavi) x : x işareti -. : kesikli çizgi ve nokta
r: red (kırmızı) + : artı işareti -- : kesikli çizgi
g: green (yeşil) * : yıldız işareti

w: white (beyaz) s : square (kare)


k: black (siyah) d : diamond (elmas)
v : aşağı üçgen
^ : yukarı üçgen
< : sola üçgen
> : sağa üçgen
p : pentagram (beşgen)
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 50 100 150 200 250 300 350 400

clear;
derece=0:10:360;
s=sind(derece);
plot(derece,s, 'ro-');

renk işaretleme tipi çizgi tipi


legend fonksiyonu ile hangi eğrinin hangi fonksiyona ait olduğu
belirtilir.
>>doc legend veya >>help legend
Grafik5.m
clear;
x=0:pi/10:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'bo:',x,y2, 'rs-')
xlabel('x Degisimi');
ylabel('Fonksiyon Degisimi');
title('sin(x) ve Turevinin Degisimi');
legend('sin(x)','cos(x)');
%legend('sin(x)','cos(x)','location','NorthEast');
figure Fonksiyonu ile Çoklu Grafikler
Birden fazla grafik penceresi açmak için figure(n) komutu kullanılır.
Burada n grafik penceresinin adını belirtmektedir.

Grafik6.m
clear;
x=0:pi/30:2*pi;
y1=sin(x);
y2=cos(x);
figure(1);
plot(x,y1,'bo:');
figure(2);
plot(x,y2,'r*-');
title('cos(x) grafigi');%sadece figure 2’ye ait baslik
Açık Olan Grafik Pencerelerinin
Tümünü Birden Kapatma
figure komutu kullanarak açılmış birden fazla pencere olabilir.
Bu pencerelerin hepsini birden kapatmak için;
subplot Fonksiyonu ile Alt Grafikler

Aynı grafik penceresinde birden fazla grafik çizmek için


subplot(a,b,c) fonksiyonu kullanılır. Burada:
a : Grafik penceresinin satır sayısıdır.
b : Grafik penceresinin sütun sayısıdır.
c : Alt pencere numarasıdır.
Grafik7.m
clear;
x=0.1:pi/10:2*pi; %Neden 0 dan baslamamis?????
y1=sin(x);
y2=cos(x);
y3=tan(x);
y4=cot(x);
subplot(2,2,1);
plot(x,y1);
title('f(x)=sin(x)');
subplot(2,2,2);
plot(x,y2);
title('f(x)=cos(x)');
subplot(2,2,3);
plot(x,y3);
title('f(x)=tan(x)');
subplot(2,2,4);
plot(x,y4);
title('f(x)=cot(x)');
subplot Fonksiyonu ile Alt Grafikler
subplot ile birden fazla alt pencereye yayılan grafik çizdirmek için;
Örneğin;

subplot(2,2,3:4);
hold Komutu
Aynı eksen takımında birden fazla grafik hold komutu yardımıyla da çizilebilir.
figure fonksiyonu kullanılmadığı sürece işletilen herbir plot komutu aynı grafik
penceresinde işlem görür. Aynı grafik ekranına çizilecek fonksiyonların sayısı
fazla ise eğer plot komutu içinde fonksiyonları birbirinden virgülle ayırmak sıkıcı
olabilir. Bu tür durumlarda hold komutu kullanılmalıdır.

Grafik8_1.m Grafik8_2.m
clear; clear;
x=0:pi/30:2*pi; x=0:pi/30:2*pi;
y1=sin(x); y1=sin(x);
y2=exp(2*sin(x)); y2=exp(2*sin(x));
plot(x,y1,'r*:'); plot(x,y1, 'r*:',x,y2, 'bo--');
hold; legend('sin(x)','e^{2*sin(x)}');
plot(x,y2,'bo--');
legend('sin(x)','e^{2*sin(x)}');
hold komutunu kaldırsak ne olur?
Eğlenceli Bir Uygulama

Grafik9.m
clear;
x=[10,5,3,2,9,14,17,20,25,27,28,29,30,38,45,49,52,54,58,...
59,60,62,66,72,78,81,82,84,87,90,97,102,106,109,112,119,...
125,128,126,122,118,117,121,134,154,174,190,194,194,185];

y=[16,50,70,104,106,104,95,80,67,59,87,124,153,157,144,127,...
109,90,71,100,134,163,178,179,174,161,141,117,93,76,89,105,...
123,140,153,156,144,128,106,86,65,48,30,17,24,29,25,21,16,7];

plot(x,y);
UYGULAMALAR
Uygulama 10.1
1’er derecelik artışla 360°’ye kadar hesaplanan ‘sin’, ‘cos’ ve bunlar kullanılarak
oluşturulan ‘sin vs cos’ ve ‘cos vs sin’ grafiklerini MATLAB grafik komutlarını kullanarak
aşağıdaki çıktıyı üretecek şekilde oluşturunuz.
Bilgisayar Programlama
(11. Sunu)
REKÜRSİF FONKSİYONLAR
Şu ana kadar tanımladığımız fonksiyonlarda
hiyerarşik bir yapı içerisinde bir fonksiyon başka
bir fonksiyonu (alt/yardımcı fonksiyonu)
çağırabiliyordu.

Öte yandan fonksiyonların kendi kendilerini


çağırmalarının gerekli olduğu bazı uygulamalar
vardır.
Bu tür fonksiyonlara Rekürsif (recursive)
fonksiyonlar denir.
REKÜRSİF FONKSİYONLAR

REKÜRSİF REKÜRSİF ÜS REKÜRSİF


FAKTÖRİYEL ALMA ÇARPMA
7!=7.6! 46 = 4.45 4.6=4+4.5
6!=6.5! 45 = 4.44 4.5=4+4.4
5!=5.4! 44 = 4.43 4.4=4+4.3
4!=4.3! 43 = 4.42 4.3=4+4.2
3!=3.2! 42 = 4.41 4.2=4+4.1
2!=2.1! 41 = 4.40 4.1=4+4.0
1!=1 (Dur) 40 = 1 (Dur) 4.0=0 (Dur)
REKÜRSİF FONKSİYONLAR
 Bir rekürsif fonksiyonun 2 bileşeni vardır:
i. Temel durum (base case)
ii. Genel durum (general case)
 Rekürsif fonksiyonların kendi kendilerini çağırma
işlemini ne zaman sonlandıracaklarını bilmeleri
gerekir.
 Buna temel durum denir.
 Her rekürsif fonksiyon muhakkak bünyesinde bir
temel durum barındırır.
 Eğer temel durum şartı sağlanmazsa program
sonsuza kadar çalışır.
REKÜRSİF FONKSİYONLAR
 Rekürsif fonksiyonun kendi kendini çağırdığı
duruma ise genel durum adı verilir.

 Rekürsif fonksiyonların yardımına genellikle


eldeki problemin, mevcuda benzer küçük
(alt) problemlerin birleşimi şeklinde
tanımlanabildiği durumlarda başvurulur.
UYGULAMA 1: REKÜRSİF FAKTÖRİYEL HESABI
Kendisine parametre olarak aldığı bir n doğal sayısının (n ≥ 𝟎 )
faktöriyelini rekürsif olarak hesaplayan ve geriye döndüren bir MATLAB
fonksiyonunu FaktoriyeliRekursifHesapla.m adındaki fonksiyon m-
dosyasına yazalım.

function sonuc=FaktoriyeliRekursifHesapla(n)
if n<0
sonuc=0; %Hatalı Parametre Girişinin Çıkışı
elseif n<=1 %Temel Durum (n=0 veya n=1)
sonuc=1;
else
sonuc=n*FaktoriyeliRekursifHesapla(n-1); %Genel Durum
end
UYGULAMA 2: REKÜRSİF ÜS ALMA
Kendisine parametre olarak aldığı bir sayi1 doğal sayısı (sayi1 ≥ 𝟎) ile bir
sayi2 doğal sayısını (sayi2 ≥ 𝟎 ) kullanarak sayi1’in sayi2. üssünü
(sayi1sayi2 ) rekürsif olarak hesaplayan ve geriye döndüren bir MATLAB
fonksiyonunu RekursifUssunuAl.m adındaki fonksiyon m-dosyasına
yazalım.

function sonuc=RekursifUssunuAl(sayi1,sayi2)
if (sayi1>=0)&&(sayi2>=0)
if sayi2==0 %Temel Durum
sonuc=1;
else
%Genel Durum
sonuc=sayi1*RekursifUssunuAl(sayi1,sayi2-1);
end
else
sonuc=-1; %Hatalı Parametre Girişinin Çıkışı
end
UYGULAMA 3: REKÜRSİF ÇARPMA
Kendisine parametre olarak aldığı bir sayi1 doğal sayısı (sayi1 ≥ 𝟎) ile bir
sayi2 doğal sayısını (sayi2 ≥ 𝟎) kullanarak sayi1.sayi2 çarpımını rekürsif
olarak hesaplayan ve geriye döndüren bir MATLAB fonksiyonunu
IkiSayiyiRekursifCarp.m adındaki fonksiyon m-dosyasına yazalım.
Çözümümüzde örneğin 4.7 çarpma işleminin sonucunun 4+4.6 ile de
hesaplanabileceği ipucundan faydalanalım.

function sonuc=IkiSayiyiRekursifCarp(sayi1,sayi2)
if (sayi1>=0) && (sayi2>=0)
if sayi2==0 %Temel Durum
sonuc=0;
else
%Genel Durum
sonuc=sayi1+IkiSayiyiRekursifCarp(sayi1, sayi2-1);
end
else
sonuc=-1; %Hatalı Parametre Girişinin Çıkışı
end
DOSYA İŞLEME
 Şu ana kadar yazdığımız bütün MATLAB
programlarında, programların kullanacakları
verileri input komutu yardımıyla kullanıcıdan
klavye yardımıyla alıyorduk.
 Bu giriş verileri ile programlarımızın
hesapladığı/ürettiği çıktılar ise bilgisayarın kalıcı
olmayan hafızasında bir başka deyişle ana
belleğinde tutuluyordu.
Bilgisayar kapatıldığında veya MATLAB programı
sona erdirildiğinde bu veriler de kaybolur.
DOSYA İŞLEME
 Oysa pek çok uygulamada hem giriş verilerinin
ve hem de program çıktılarının daha sonra
tekrar tekrar kullanılmak üzere bilgisayarımızın
kalıcı hafızasında yani sabit diskinde saklanması
gerekir.
 Bunun için bütün programlama dilleri söz
konusu verileri bir dosyadan okuyabilmeye veya
çıktıları bir dosyaya kaydedebilmeye imkan
tanıyan yapılar/komutlar içerirler.
3 ADIMDA DOSYA YÖNETİMİ
1) İşleyeceğin dosyayı aç. (fopen)

2) Açtığın dosyadan veri oku ya da dosyaya veri


yaz. (fscanf, textscan, fprintf)

3) Açtığın dosyayı muhakkak kapat. (fclose)


fopen KOMUTU İLE DOSYALARIN
AÇILMASI
 Veri kaydetmek veya veri okumak için, var olan bir veri dosyasını
yazmaya/okumaya açar veya var olmayan bir dosyayı sıfırdan
oluşturur.

 Kullanım formatı:

dosyaDegiskeni=fopen('dosyaAdi', 'mod' );

• dosyaDegiskeni → Dosya kontrolünde kullanılan MATLAB değişkeni


• dosyaAdi → Verilerin kayedileceği/okunacağı dosyanın adı
• mod → Dosya işleme modunu: r, w, a, …, vs.
BAZI DOSYA İŞLEME MODLARI

MOD İŞLEV

'r' Dosyayı sadece okumaya açar. (read)

‘w' Var olan bir veri dosyasının içeriğini siler, dosya yoksa
oluşturur ve dosyayı yazmaya açar. (write)

‘a' Var olan bir veri dosyasını yazmak için açar, dosya
yoksa oluşturur ve girilecek bilgileri dosyanın sonuna
ekler. (append) Mevcut dosyanın içerisinde var olan
bilgiler silinmez. Yeni bilgilerin sona erdiği noktadan
itibaren dosyaya kaydedilir.
fclose KOMUTU İLE DOSYALARIN
KAPATILMASI
 Yazma ve/veya okumaya açılan dosyanın MATLAB ile ilişkisini
kesmeye (dosyayı kapatmaya) yarar. (Açılan bütün dosyalar
muhakkak kapatılmalıdır.)

 Kullanım formatı:

fclose(dosyaDegiskeni );

• dosyaDegiskeni → Bir veri dosyasının işlenmek üzere fopen


komutu ile açıldığı an ilişkilendirildiği MATLAB değişkenidir.
fprintf KOMUTU İLE BİR DOSYAYA BİLGİ
YAZMA/KAYDETME
 Bilgilerin ekrana basılmasında kullanılan fprintf fonksiyonu, aynı
zamanda fopen komutuyla açılmış bir dosyaya veri yazmak için de
kullanılır.

 fprintf komutunun bir dosyaya bilgi kaydetme amacıyla


Kullanım formatı:

fprintf(dosyaDegiskeni, '%format %format', degisken1, degisken2);

 Dosyaya bilgi yazmak için fprintf kullanımının ekrana bilgi yazmak


için kullanımından tek farkı dosyaDegiskeni olarak adlandırılan
MATLAB değişkeninin fonksiyon içerisinde ilk parametre olarak
kullanılmasıdır.
fscanf KOMUTU İLE BİR DOSYADAN BİLGİ
OKUMA
 Formatlanmış veriler içeren bir dosyadan bilgi okumaya yarar
 fscanf komutunun bir dosyadan bilgi okumak amacıyla
kullanım formatı:

[degisken sayi]=fscanf(dosyaDegiskeni, 'format', adet);

• adet → Dosyadan okunması istenilen bilgi miktarıdır.


• format → Dosyadan okunacak verinin türüdür
 Eğer dosyadaki verilerin tamamının okunması isteniyorsa adet
yerine MATLAB’de tanımlı inf (infinity) kullanılmalıdır.
 Bu durumda dosyadan okunan bilgi miktarına da sayı değişkeni üzerinden
ulaşılabilir.
 Dosyadan okunan bilgiler ise degisken içerisinde saklanır ve bu
değişkene dosyadan aktarılan bilgiler sütun vektörü formundadır.
textscan KOMUTU İLE BİR DOSYADAN BİLGİ OKUMA
 Bir dosya içerisinde belirli bir format çerçevesinde (dosyanın her bir
satırı birden fazla farklı veri tipinde sütunlardan oluştuğunda)
saklanan verileri/satırları/kayıtları bir hücre dizisine atamak için
kullanılır.
 textscan komutunun bir dosyadan bilgi okumak amacıyla en genel
kullanım formatı:

hucreDizisi=textscan(dosyaDegiskeni, 'format');

Bu kullanımda MATLAB’in varsayılan sütun ayracı (delimiter


character) boşluk(lar) ve yeni satır karakteridir.
 Eğer dosyanın her bir satırındaki sütunlar başka bir ayraç karakteri
ile birbirlerinden ayrılmışlarsa kullanım formatı şu şekle dönüşür:

hucreDizisi=textscan(dosyaDegiskeni, 'format', 'delimiter', 'ayracKarakteri');


UYGULAMA: textscan KOMUTU İLE BİR DOSYADAN BİLGİ OKUMA

 PersonelBilgileri.txt adlı bir düzyazı dosyasının içerisinde


yukarıdaki ekran çıktısı ile verilen bilgilerin saklı olduğunu kabul
edelim ve takip eden slayttaki ekran çıktısında verilen komutları
çalıştırarak textscan komutunun nasıl çalıştığını anlamaya
çalışalım.
UYGULAMA: textscan KOMUTU İLE BİR DOSYADAN BİLGİ OKUMA
UYGULAMA: BİR DOSYANIN İÇERİSİNİN RASTGELE TAM
SAYILARLA DOLDURULMASI
Kendisine parametre olarak aldığı Sayilar.txt adlı düzyazı dosyasını ‘w‘ modunda
yazmaya açan ve bu dosyanın içerisine yine kendisine parametre olarak aldığı pozitif
bir tam sayı adedince 1 ila 1000 aralığında değişen rastgele sayıları alt alta
kaydeden bir MATLAB fonksiyonunu DosyayaRastgeleSayilariKaydet.m adındaki
fonksiyon m-dosyasının içerisine yazalım. Yazacağımız fonksiyonun geriye hiçbir
değer döndürmeyeceğine dikkat edelim.

function DosyayaRastgeleSayilariKaydet(dosyaAdi,adet)
dosyaDegiskeni=fopen(dosyaAdi,'w'); %Dosyayı Yazmaya Aç
for i=1:adet
%Dosyaya Yaz
fprintf(dosyaDegiskeni,'%d\n',round(1+999*rand(1)));
end
fclose(dosyaDegiskeni); %Dosyayı Kapat
UYGULAMA: BİR DOSYANIN İÇERİSİNİN RASTGELE TAM
SAYILARLA DOLDURULMASI
UYGULAMALAR
Uygulama 11.1
Kendisine parametre olarak aldığı pozitif bir tam sayı değerini indis olarak kullanan ve bu
indisteki Fibonacci sayısını rekürsif olarak hesaplayarak geriye döndüren bir MATLAB
fonksiyonunu FibonacciSayisiniRekursifHesapla.m adındaki fonksiyon m-dosyasına
yazalım.

Örnek Komut Penceresi Çıktısı


Uygulama 11.2
PersonelBilgileri.txt adlı bir düzyazı dosyasının içerisine bir şirkette çalışan personele ait
bilgiler (her bir personele ait bilgi kaydı dosyanın bir satırında yer almak üzere) aşağıdaki
formatta kaydedilmiştir:
123 Ahmet DURAK 1975 Erzurum
257 Veli BULUT 1952 Trabzon
Dosyanın her bir satırında ilk sütun personelin kurum sicil numarasını, ikinci sütun
personelin adını, üçüncü sütun personelin soyadını, dördüncü sütun personelin doğum
yılını ve son sütun ise personelin doğum yerini temsil etmektedir. (Şirket personelinden
hiçbirinin ikinci bir isme sahip olmadığını kabul edebilirsiniz.) Bu dosyayı okuyan ve 2019
yılı itibariyle şirket çalışanlarının yaş ortalamasını hesaplayarak ekrana basan bir
MATLAB fonksiyonunu SirketinYasOrtalamasiniHesapla.m adındaki fonksiyon m-
dosyasına yazalım.

Örnek Komut Penceresi Çıktısı

You might also like