3. KOŞUL YAPILARI 3.1. IF YAPISI 2 if yapısı bir şartın (condition) gerçekleşmesi / gerçekleşmemesi durumunda yapılacak işlemleri (statement) belirler. Buna örnek olarak bir sayının belli bir değerden büyük / küçük / eşit olup olmadığı şartları olabilir. if komutunun Matlab da 3 farklı kullanımı vardır. a- if yapısı if kosul komut _n Kosul doğru ise,,..., komut_n, ile belirtilen komutlar grubu icra edilir ve programın kontrolü i izleyen komute geçer; kosul yanlış ise bu durumda komut1, komut2,..., komut_n ile belirtilen komutlar grubu icra edilmeden kontrol i izleyen komuta geçecektir. b- if- yapısı if kosul komut _n komut_n+2 komut _n+m Kosul dogru ise komut1,,..., komut_n, ile belirtilen komutlar grubu icra edilir ve programin kontrolü i izleyen komute geçer; kosul yanlış ise bu durumda da sadece i izleyen, komut1_n+1, komut_n+2,..., komut_m ile belirtilen komutlar grubu icra edilecek ve kontrol i izleyen komuta geçecektir. c- if-if- yapısı if kosul1 if koşul_2 if koşul_3 komut_3... if kosul_n komut_n 2 Bu başlıktaki bilgiler http://www.matlabakademi.com/dersler/programlama/if-komutu/ internet adresinden ve Istanbul Üniversitesi Bilgisayar Mühisligi Bölümü tarafından verilen Bilgisayar Destekli Kontrol Sistemleri Ders Notlarından faydalanılarak hazırlanmıştır. 18
Bu yapı içerisinde kontrol edilen koşullardan herhangi biri doğru ise onunla ilişkili komut icra edilir ve kontrol i izleyen komuta geçer. Koşulların hepsi de yanlışsa, kontrol i izleyen e geçer ve bu komut de icra edildikten sonra kontrol i izleyen komuta geçecektir. Örnek: Matlab ekranından öğrencinin notu sorulsun. Kullanıcı ekrandan öğrencinin notunu girsin. Eğer öğrenci 60 ve 60 dan yukarı not almış ise o zaman Öğrenci sınavı geçti. mesajı versin. sinav_notu = input( Ögrencinin notunu giriniz ); if sinav_notu >= 60 disp( Ögrenci sinavi gecti ) If komutunun yanındaki şart (condition) doğru olduğunda bu 1 sinyali üretecektir. Yanlış olduğunda ise 0 sinyalı üretecektir. if komutu, yanındaki ifade doğru olduğunda (1 sinyalı ürettiğinde), if ile arasındaki ifadeleri gerçekleştirecektir. Yukarıdaki örnekte, kullanıcı tarafından girilen öğrenci notu 50 ve 50 den büyük ise Ögrenci sinavi gecti mesajı verecektir. Eğer değil ise hiç bir işlem gerçekleştirmeyecektir. Örnek : Şimdi ise kullanıcı ekrandan öğrencinin notunu girsin. Eğer öğrenci 50 ve 50 den yukarı not almış ise o zaman Öğrenci sınavı geçti., eğer değil ise Öğrenci sınavdan kaldı mesajı versin. sinav_notu = input( Ögrencinin notunu giriniz ); if sinav_notu >= 50 disp( Ögrenci sinavı gecti ) disp( Ögrenci sinavdan kaldi ) If komutunun yanındaki şart (condition) doğru olduğunda (1 sinyalı ürettiğinde) altındaki (if ile arasındaki ) ifadeleri gerçekleştirdiğini bir önceki örnekte göstermiştik. Ancak bir önceki örnekte şart gerçekleşmez ise (0 sinyali ürettiğinde) program hiç bir işlem gerçekleştirmemişti. Şimdi bu Matlab koduna ifadesi ekleyerek, mevcut şartların hiç biri gerçekleşmez ise programa ne yapacağını belirtiyoruz. Bundan dolayı ifadesinin yanına hiçbir zaman bir şart ifadesi yazmıyoruz. Çünkü hiçbir koşulun gerçekleşmediği durumda yapılacak ifadeyi belirtir. Kisi yeni bir şart getirmez. Yeni bir şart işlemini if ifadesi ile getiririz. Onun için if ile ifadeleri karıştırılmamalıdır. Yukarıdaki örnekte kullanıcı tarafından girilen sınav notunun 50 ve 50 den büyük olmaması durumda ne yapılacağı ( Öğrenci sınavdan kaldı mesajının verilmesi) ile belirtilmiştir. Örnek: Şimdiki örneğimizde ise kullanıcının girdiği sınav notuna göre bunu zayıf orta iyi pekiyi şeklinde sınıflandıralım. 0-49 Zayıf 0 69 Orta 70-84 İyi 85-100 Pekiyi sinav_notu = input( Ögrencinin notunu giriniz ); if sinav_notu > 84 disp( Pekiyi ) if sinav_notu > 69 disp( iyi ) if sinav_notu > 49 19
disp( orta ) disp( zayif ) If if - yapısında program sırasıyla şartları sınar, sırasıyla sınadığı şartlardan herhangi birisi doğru olduğunda (1 sinyali ürettiğinde ) geri kalan şartları sınamaz, onların doğru olup olmadığını kontrol etmez. Misal verecek olursak, kullanıcı tarafından sınav notu 90 olsun. Bu hem 84 den büyük olma, hem 69 dan büyük olma, hem de 49 dan büyük olma şartlarını sağlar. Ancak program çalışırken 84 den büyük olma koşulunu sağlar ve Pekiyi mesajını yazdırır. Bu koşulu sağladı ve gerekli ifadeyi gerçekleştirdiği için diğer ifadeleri sınamaz. Yani iyi ve orta mesajlarını VERMEZ. Bir önceki örnekte de vurguladığımız gibi ifadesinin yanında bir şart ifadesi bulunmaz. Else geriye kalan tüm olasılıklar demektir. Bu da bu program için 0 ila 49 arasında bulunma durumudur. 3.2. Karşılaştırma Operatörleri Aritmetik karşılaştırma operatörleri şunlardır: a > b : a değeri b değerinden büyük müdür? a >= b : a değeri b değerinden büyük ve eşit midir? a < b : a değeri b değerinden küçük müdür? a <= b : a değeri b değerinden küçük ve eşit midir? a == b : a değeri b değerine eşit midir? a ~= b : a değeri b değerine eşit değil midir? Birden fazla koşulun bir arada kullanılması gerektiği durumlarda mantıksal karşılaştırma operatörleri kullanılır. Bunlar a && b : a koşulu ve b koşulu aynı anda sağlanıyor mu? a b : a koşulu veya b koşullarından en az birisi doğru mudur? Atama operatörü = ile iki eşitliğin yan yana ve aralarında boşluk bırakılmadan yazılmasıyla oluşturulan eşitlik karşılaştırma operatörü == nü karıştırmamaya dikkat ediniz. Örnek: Bir öğrencinin bir dersi geçebilmesi için hem final notunun 45 den büyük olması hem de dönem sonu ortalamasının 50 den büyük olması gerekir. Buna göre öğrencinin final notunu ve ortalamasını kullanıcıdan alan ve geçme durumunu belirleyen bir program yazınız. final=input( Final Notunu giriniz = ); ort=input( Dönem Sonu Notunu giriniz= ); if (final>=45) && (ort>=50) disp( geçti ); disp( Kaldı ); 3.3. SWICTH- CASE Yapısı İkiden fazla durumu kontrol etmek için, if if yapısına alternatif olarak kullanılan bir kontrol yapısıdır. İfadenin değeri kontrol edilir ve buna göre farklı bir komut veya komutlar grubu icra edilir. 20
switch (ifade) case değer_1 case değer_2... case deger_n komut_n otherwise Örneğin, ifadenin değeri deger1 ise, icra edilir ve kontrol i izleyen komuta geçer. İfadenin değeri, deger2 e eşitse bu durumda icra edilir ve kontrol i izleyen komuta geçer. İfadenin değeri, case lerle kontrol edilen değerlerden hiç birine eşit değilse bu durumda da otherwise sözcüğünü izleyen icra edilecektir. Örnek: Haftanin kaçinci gününün ne oldugunu bulan basit bir program asagida incelenebilir. gun=input( Haftanın kaçıncı günü = ); switch gun case 1 disp( Pazartesi ); case 2 disp( Salı ); case 3 disp( Çarşamba ); case 4 disp( Perşembe ); case 5 disp( Cuma ); case 6 disp( Cumartesi ); case 7 disp( Pazar ); otherwise disp( Böyle Bir Gün Yok ); 3.4. Alıştırmalar 1. Kullanıcıdan aldığı A ve B sayılarını karşılaştırarak - A > B ise A Büyüktür - B > A ise B Büyüktür yazdıran programı 2. Girilen bir sayının negatif mi, pozitif mi ya da sıfıra eşit mi testini yapan bir program 3. Kullanıcıdan aldığı üç sayıdan (a, b, c) en büyüğünü en küçüğünü bulan bir program 21
4. Bir üçgenin kenar değerlerini okuyarak (a,b,c) üçgenin çeşidini (Eşkenar, İkizkenar, Çeşitkenar) belirleyen bir program 5. Kullanıcıdan aldığı üç sayıyı (a, b, c) büyükten küçüğe doğru sıralayan bir program 6. Kullanıcının gireceği Ay nosuna göre Ay ismini ekrana yazdıran bir program Örnek: Ay=2 ise ekrana Şubat yazılacak. 7. Kullanıcıdan alacağı işlem numarasına (islem) göre aşağıdaki işlemleri yapan bir program - islem =1 ise bir karenin çevresini hesaplayan program (karenin bir kenarı (a) kullanıcıdan alınmalı ) - islem=2 ise bir dikdörtgenin çevresini hesaplayan program (dikdörtgenin iki kenarı (a,b) kullanıcıdan alınmalı) - islem =3 ise bir üçgenin çevresini hesaplayan program (üçgenin üç kenarı (a,b,c) kullanıcıdan alınmalı) 8. Kullanıcıdan alacağı işlem numarası(islem)na göre iki sayı (a,b) üzerinde; - İslem =1 ise toplama ( a + b ) - İslem =2 ise çıkarma ( a - b ) - İslem =3 ise çarpma ( a * b ) - İslem =4 ise bölme ( a / b ) - İslem =5 ise mod alma ( a % b ) - Bunların dışında bir işlem numarası girilirse «Gecersiz İslem Numarası» yazan programı 9. Kullanıcının gireceği 0-50 arasındaki bir sayının hangi 10 luk basamağa karşılık geldiğini bulan bir program Örneğin, Sayi=35 ise ekrana «Otuzluk Bir Sayı» yazdırılsın. 10. Kullanıcı tarafından girilen bir sayı - 2 ye bölünüyorsa ekrana «2 nin katı» - 3 e bölünüyorsa ekrana «3 un katı» - 5 e bölünüyorsa ekrana «5 in katı» - 7 e bölünüyorsa ekrana «7 nin katı» bir program yazınız. 11. Üç hane uzunluğunda iki sayı (A, B) kullanıcıdan alınarak «Dost» sayı olup olmadıklarını bulan bir program A ve B sayılarının «Dost» sayı olması için aşağıdaki şartı sağlamalı - A sayısının haneleri çarpımı X olsun - B sayısının haneleri çarpımı Y olsun - Eğer X=Y ise «A ve B Dost Sayılardır» Örneğin A=624 ve B=238 olsun. X=6*2*4=48 ve Y=2*3*8=48 dir X=Y olduğu için «A ve B Dost Sayılardır» 12. Bir işadamı yaptığı bir işin kazancı üzerinden aşağıdaki durumları dikkate alarak vergi hesaplayan bir program - Kazancının 10000 TL lik kısmı için %15 - Kazancının 10000-25000 TL kısmı için %20 - Kazancının 25000-50000 TL lik kısmı için %25 - Kazancının 50000 den büyük olan kısmı için %30 vergi uygulanmaktadır. 22