X

while/for – Koşul ve Döngü İfadeleri (Deyimleri)

MATLAB’da belirli bir durumun sağlanması durumunu kontrol ederek buna göre bir sonuç veren yapılar “Koşul ve Döngü İfadeleri” olarak sınıflandırılabilir. Bu ve takip eden yazılarımızda bu ifadelerin kullanım biçimlerinden bahsedeceğiz.

 

Yazı İçeriği

while ifadesi

 

MATLAB’da kullanılan döngü ifadelerinden bir tanesi “while” deyimidir. Bunu kullanma amacını en temel olarak belirli bir koşulun sağlanmasına bağlı olarak devamlı olarak bir işlemin gerçekleşmesi için kullanılır.

 

 

Yukarıdaki akış şemasında “while” döngüsünün işleyişini daha rahat görebilirsiniz. Program akışı sırasında döngü ifadesine geldiğinde ilk olarak döngünün girişindeki koşulun doğru-yanlış durumunu kontrol etmektedir. Eğer koşul yanlış ise döngünün içine girmeyecek ve program döngünün dışından devam edecektir. Eğer koşul doğru ise döngünün içine girecek ve orada istenen komutları çalıştıracaktır. Ardından tekrar “while” ifadesinin başına gelecek tekrar doğru-yanlış durumunu kontrol edecektir. Bu süreç yanlış sonucu gelip döngünün dışından ilerleyene kadar devam edecektir.

 

“while” döngüsünün en temel yazım biçimi aşağıdaki gibidir.

 

...

while sart

    komutlar;

end

...

 

Temel örnekler ile konuya giriş yapalım. Ardından da biraz daha farklı örnekler ile pekiştirme yapalım.

 

sayi = 1;

while sayi <  5
    fprintf('Sayının Güncel Değeri: %d\n', sayi)
    sayi = sayi+1;
end

disp('Döngü Dışına Çıktı')

 

Sayının Güncel Değeri: 1
Sayının Güncel Değeri: 2
Sayının Güncel Değeri: 3
Sayının Güncel Değeri: 4
Döngü Dışına Çıktı

 

Görüldüğü gibi “sayi” değişkenine 1 değeri atanarak program akışı başladı.

  • İlk olarak sayının 5’ten küçük olma koşulu kontrol edildi. Ekrana yazdırıldı ve değeri 1 arttırılarak sayı değeri 2’ye eşitlendi.
  • Ardından bu devam ederek ekrana güncel değer yazılıp sonra değeri 1’er 1’er artırıldı.
  • Adım sonunda sayının güncel değeri 4 olduğu ekrana yazdırıldıktan sonra değeri 5 olarak güncellendi.
  • Sonra döngünün başına geldiği zaman koşul sağlanmadığı için program “Döngünün Dışına Çıktı” şeklinde döngü dışındaki ifade ile akışına devam etti.

 

“Burada önemli olan yapılması istenilen komutların yazıldığı sıradır. Bu duruma dikkat edilmelidir.”

Yukarıda bahsettiğimiz durumu daha iyi anlamak adına aynı örnekte sıralamayı değiştirip tekrar inceleyelim.

 

sayi = 1;

while sayi <  5
    sayi = sayi+1;
    fprintf('Sayının Güncel Değeri: %d\n', sayi)
end

disp('Döngü Dışına Çıktı')

 

Sayının Güncel Değeri: 2
Sayının Güncel Değeri: 3
Sayının Güncel Değeri: 4
Sayının Güncel Değeri: 5
Döngü Dışına Çıktı

 

Burada ise “sayi” değeri önce 1 arttırılıp ardından ekrana yazdırılmaktadır. İşlem adım sayısı olarak aynı sayıda işlem gerçekleşmesine rağmen sonuçlar farklı olmuştur.

Bu şekilde yapılacak küçük farklılıklar programın sonucuna etki ettiğinden dolayı dikkat edilmelidir.

 

for ifadesi

MATLAB’da kullanılan bir diğer döngü ifadesi de “for” deyimidir. Belirlenen komutların istenilen sayıda yapılması için kullanılır.

“while” ile “for” döngüsü arasında farklılık vardır. “while” döngüsünde komutların gerçekleşmesi ve sona ermesi belirli bir koşula bağlıdır. “for” döngüsünde işlem sayısı önceden belirlenmiştir ve bu sayıya ulaşıp ulaşmadığı kontrol edilerek program akışı devam eder.

“for” döngüsünün en temel yazım biçimi aşağıdaki gibidir.

 

...

for indeks = başlangıç : adim değeri : bitis
    komutlar;
end

...

 

“for”  döngüsündeki “indeks” ifadesini “sayac” veya “sayac_degiskeni” olarak da açıklayabiliriz. Döngünün temel değişkeni bu ifadedir. Başlangıç değerinden bitiş değerine kadar adım değeri miktarı boyunca program akışı devam eder. “Adım Değeri” değişkenini girmek zorunlu değildir. Girilmediği zaman bu değer sabit “1” olarak alınmaktadır.

Temel bir örnek ile konuya giriş yapalım

 

for i = 1:5
    fprintf('%d. Adım\n', i)
    disp('MATLAB Türkiye')
end

disp('Sayac Sonlandı')

  1. Adım

MATLAB Türkiye

  1. Adım

MATLAB Türkiye

  1. Adım

MATLAB Türkiye

  1. Adım

MATLAB Türkiye

  1. Adım

MATLAB Türkiye Sayac Sonlandı

 

Burada 1’den başlayarak 5’e kadar(5.Adım da dahil) ekrana yazı ve adım sayısını yazdırdık. “fprintf” komutu ekrana yazı ve sayıyı aynı anda yazdırmak için kullanılan hazır bir komut. Burada “while” döngüsünden farklı olarak “fprintf” komutunu “disp” komutunun da altına alınırsa da değişiklik olmayacaktır. Çünkü sayacın artışı döngünün içinde değil direkt olarak başlangıçta “for” tarafından otomatik olarak yapılmaktadır.

 

Yukarıda yapılan örneği bir de adım sayısı ekleyerek güncelleyelim.

 

for i = 1:2:10
    fprintf('%d. Adım\n', i)
    disp('MATLAB Türkiye')
end

disp('Sayac Sonlandı')

 

  1. Adım
MATLAB Türkiye
  1. Adım
MATLAB Türkiye
  1. Adım
MATLAB Türkiye
  1. Adım
MATLAB Türkiye
  1. Adım
MATLAB Türkiye

Sayac Sonlandı

 

Yukarıdaki örnekten farklı olarak sayaç 2’şer 2’şer olarak artmaktadır. Buna bağlı olarak da ekranda adım sayısı güncellenmektedir.

 

Örnekler

Yukarıda bahsettiğimiz konuları hazır fonksiyonları da kullanarak farklı örnekler ile pekiştirelim.

 

While Döngüsü İle Bölme İşlemi

Başlangıçta belirtilen sayının 3’e bölünmesini 5’ten büyük olduğu sürece gerçekleştirelim.

 

sayi1 = 68;

while sayi1 > 5
    sayi1 = sayi1/3;
    fprintf('Sayının Güncel Değeri: %f\n', sayi1)
end

disp('Döngü Dışına Çıktı')

 

Sayının Güncel Değeri: 22.666667
Sayının Güncel Değeri: 7.555556
Sayının Güncel Değeri: 2.518519

Döngü Dışına Çıktı

 

İlk başta belirlenen 68 değerini 3’e bölerek işlemi yapılmaktadır. Burada döngünün koşul ifadesi 5’ten büyük olma durumudur. Bu durum sağlandığı sürece bölme işlemi devam etmektedir. Koşul sağlanmadığı zaman program döngü dışından akışına devam etmektedir.

 

1’den 10’a Kadar Üslü İşlem For Döngüsü İle

 

sayi1 = 4;

for us = 1:10
    sonuc = sayi1 ^ us;
    fprintf('Sonucun Güncel Değeri: %d\n', sonuc)
end

disp('Sayac Sonlandı')

 

Sonucun Güncel Değeri: 4
Sonucun Güncel Değeri: 16
Sonucun Güncel Değeri: 64
Sonucun Güncel Değeri: 256
Sonucun Güncel Değeri: 1024
Sonucun Güncel Değeri: 4096
Sonucun Güncel Değeri: 16384
Sonucun Güncel Değeri: 65536
Sonucun Güncel Değeri: 262144
Sonucun Güncel Değeri: 1048576

Sayac Sonlandı

 

İlk başta belirlenen sayı değişkenini 4’e eşitledikten sonra 1’den 10’a kadar üssünü alarak sonucu ekrana “for” döngüsü ile yazdırıldı.

 

Geri Sayaç For Döngüsü

 

for sayac = 10:-1:3
    fprintf('Sayacın Güncel Değeri: %d\n', sayac)
end


disp('Sayac Sonlandı')

 

Sayacın Güncel Değeri: 10
Sayacın Güncel Değeri: 9
Sayacın Güncel Değeri: 8
Sayacın Güncel Değeri: 7
Sayacın Güncel Değeri: 6
Sayacın Güncel Değeri: 5
Sayacın Güncel Değeri: 4
Sayacın Güncel Değeri: 3

Sayac Sonlandı

 

Burada sayaç 10’dan başlayarak 3’e kadar 1’er 1’er azalmaktadır. Geriye doğru giderek yazılacak olan döngüde dikkat edilmesi gereken bir nokta geriye başlangıç ve bitiş değerlerini yazarken araya da azalış miktarının da yazılmasıdır. Yoksa “for” döngüsü çalışmayacak ve program döngü dışından akışına devam edecektir.

 

İç – İçe For Döngüsü

 

toplam = 0;

for sayac1 = 1:10
    for sayac2 = 1:15
        toplam = toplam + 1;
    end
fprintf('Toplam = %d\n', toplam)
end


disp('Sayac Sonlandı')

 

Toplam = 15
Toplam = 30
Toplam = 45
Toplam = 60
Toplam = 75
Toplam = 90
Toplam = 105
Toplam = 120
Toplam = 135
Toplam = 150

Sayac Sonlandı

Bu örnekte iç-içe for döngüsünü incelenmiştir.

  • Sayac1 ile 1’den 10’a kadar ve sayac2 ile 1’den 15’e kadar döngü ayarlanmıştır.
  • Sayac2 içinde toplam değişkeni 1’er 1’er arttırılarak toplanmıştır.
  • Ardından sayac1 değeri güncellendikten sonra tekrar sayac2 “for” döngüsüne girdikten sonra toplam işlemi tekrar yapılmıştır.
  • Bu şekilde sayac1 değeri de sonlanana kadar devam etmiştir.
  • Ardından da sayac1 ve sayac2 sonlandıktan sonra program akışına döngülerin dışından devam etmiştir.

 

For Döngüsü İle Satır Matrisi Genişletme

Verilen 1 satır, 4 sütunluk “a = [1 3 6 8]” matrisini her yeni satırda bir üstündeki sütunun devamı olacak şekilde genişletmek için bir örnek yapalım.

 

a = [1 3 6 8]


for i = 2:4
    a(i, :) = a(i-1, :) + 1
end


disp('Sayac Sonlandı')

 

a =
     1     3     6     8


a =
     1     3     6     8

     2     4     7     9


a =
     1     3     6     8

     2     4     7     9

     3     5     8    10


a =
     1     3     6     8

     2     4     7     9

     3     5     8    10

     4     6     9    11


Sayac Sonlandı

 

  • 3 yeni satır ile güncellemek için döngü bu şekilde ayarlanır.
  • a(i, :) = a değişkenin “i.” Satırına karşılık tüm sütunlarını ifade eder
  • i = 2 şeklinde başlama sebebi de bundan dolayıdır. 2. Satırdan başlamak için
  • a(i-1, :) ifadesi ise bir önceki satırın tüm sütunlarındaki elemanlarını ifade eder

 

For Döngüsü İle Sütun Matrisi Genişletme

 

b = [2; 3; 7]


for i = 2:4
    b(:, i) = 2 * b(:, i-1)
end


disp('Sayac Sonlandı')

 

b =
     2

     3

     7


b =
     2     4

     3     6

     7    14


b =
     2     4     8

     3     6    12

     7    14    28


b =
     2     4     8    16

     3     6    12    24

     7    14    28    56


Sayac Sonlandı

 

Bir önceki örnekten farklı olarak burada da sütun matrisini genişletme işlemi yapıldı.

  • b(:, i) = b değişkenin tüm satırlarına karşılık “i.” Sütununu ifade eder
  • Bir önceki sütunu 2 ile çarparak yeni sütun olarak eklendi.

 

İç – İçe For Döngüsü İle Matris İşlemi

İki matrisin elemanlarını çarpıp ardından 5 ile toplayarak yeni bir matris elde etme işlemi yapıldı.

 

a = [1 2 3; 4 5 6];
b = [7 8 9; 10 11 12];

[satir, sutun] = size(a);


for sayac1 = 1:satir
    for sayac2 = 1:sutun
        c(sayac1, sayac2) = a(sayac1, sayac2) * b(sayac1, sayac2) + 5
    end
end

disp('Sayac Sonlandı')

 

c =
    12


c =
    12    21


c =
    12    21    32


c =
    12    21    32

    45     0     0


c =
    12    21    32

    45    60     0


c =
    12    21    32

    45    60    77


Sayac Sonlandı

 

  • [satir, sutun] = size(a) ifadesinde bulunan “size” MATLAB içinde hazır bir fonksiyon olup ilgili değişkenin boyutlarını verir. Anlaşılması daha kolay olması adına da sırasıyla boyutun ilk elemanı “satır” ve ikinci elemanı da “sutun” değişkenine atandı.
  • Ardından a ve b matrisinin sırayla her bir satır ve sütunundaki elemanları arasında işlemler yapıldı.

Bu işlem tabii ki de daha kısa komutlarla yapılabilir. Buradaki amaç konuyu farklı örneklerle pekiştirmektedir.

ekremt: Mekatronik Mühendisi. MATLAB konusunda kendini geliştirmeye çalışan, öğrenmeye ve araştırmaya açık biri.