PROGRAMLAMA DLLERNE GR Ders 2 Koula Gre lem

  • Slides: 24
Download presentation
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 2: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT

PROGRAMLAMA DİLLERİNE GİRİŞ Ders 2: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

if - else • Belirli bir koşula göre işlem yapılması istendiğinde en çok kullanılan

if - else • Belirli bir koşula göre işlem yapılması istendiğinde en çok kullanılan komut kümesi if -else yapısıdır: if (koşul) koşul doğru ise yapılacak işlem else koşul yanlış ise yapılacak işlem • Koşullar: büyük (>), küçük (<), büyük eşit (>=), küçük eşit (<=), eşit (==), eşit değil (!=) NOT: => ve =< şeklinde yazım yanlıştır

Akış Şeması Elemanları Başla / Bitir Ekrana Gösterme Veri Girişi Koşul Klavyeden Veri Girişi

Akış Şeması Elemanları Başla / Bitir Ekrana Gösterme Veri Girişi Koşul Klavyeden Veri Girişi Döngü İşlem Fonksiyon Çağırma Yazıcıdan Çıktı Doğrudan Erişimli Dosya Sıralı Erişimli Dosya Akış Yönü

Başarı Notu Hesabı Programı Başla static void Main(string[] args) { v byte v, f,

Başarı Notu Hesabı Programı Başla static void Main(string[] args) { v byte v, f, bn; Console. Write("Vize Notu : "); f ? v = Convert. To. Byte(Console. Read. Line()); bn=v*0. 3+f*0. 7+0. 5 Console. Write("Final Notu : "); f = Convert. To. Byte(Console. Read. Line()); bn bn = (byte)(v * 0. 3 + f * 0. 7 + 0. 5); Console. Write("Başarı Notu = " + bn); Evet bn>=60 if (bn >= 60) Hayır Console. Write(" (başarılı)"); "başarılı" "başarısız" else Console. Write(" (başarısız)"); Dur }

Koşul içinde mantıksal operatörler • Koşul bazen && (ve), || (veya), ! (değil) gibi

Koşul içinde mantıksal operatörler • Koşul bazen && (ve), || (veya), ! (değil) gibi mantıksal operatörleri içeren birleşik bir mantıksal ifade olabilir: if (bn >= 60 && bn < 70) Console. Write("(CC)"); if (bn >= 70 && bn < 80) Console. Write("(CB)"); if (bn >= 80 && bn < 90) Console. Write("(BB)"); if (bn >= 90 && bn < 95) Console. Write("(BA)"); if (bn >= 95) Console. Write("(AA)"); • VE yerine VEYA : if (bn >= 60 || bn < 70) … olsaydı ? ? ? – 60'tan büyük sayılar ile 70'ten küçük sayıların kesişim değil birleşim kümesi ele alınacağı için birleşik mantıksal ifade her zaman true olacaktı. Her zaman true üreten ifadeyi içeren bir koşulun kontrolünü yapmak mantıksız olacağı için bu if'in yazılması ile yazılmaması arasında fark yoktur.

else if • Önceki slaytta olduğu gibi koşul yanlış olduğunda yapılacak herhangi bir işlem

else if • Önceki slaytta olduğu gibi koşul yanlış olduğunda yapılacak herhangi bir işlem yoksa, else ifadesini kullanmayabiliriz. Peki aşağıdaki gibi yazarsak ne olur: if (bn >= 60 && bn < 70) Console. Write("(CC)"); else if (bn >= 70 && bn < 80) Console. Write("(CB)"); else if (bn >= 80 && bn < 90) Console. Write("(BB)"); else if (bn >= 90 && bn < 95) Console. Write("(BA)"); else if (bn >= 95) Console. Write("(AA)"); • Bu şekilde yazıldığında ilk koşul doğru ise diğer 4 koşulu kontrol etmez, ikinci koşul doğru ise altındaki 3 koşulu kontrol etmez, … Bu sayede program daha hızlı çalışır.

Dört İşlem Programı Geçen hafta yazılan dört işlem static void Main(string[] args) programında işlem

Dört İşlem Programı Geçen hafta yazılan dört işlem static void Main(string[] args) programında işlem seçimi { yoktu, iki sayı girildikten sonra int a, b, i; tüm işlemler gösteriliyordu. Bu Console. Write("İlk sayıyı girin : "); programda işlem seçilerek a = Convert. To. Int 32(Console. Read. Line()); sadece o işlemin sonucu Console. Write("İkinci sayıyı girin : "); gösteriliyor. b = Convert. To. Int 32(Console. Read. Line()); Console. Write. Line("1) Toplama, 2) Çıkarma, 3) Çarpma, 4) Bölme"); Console. Write("İşlemi Seçin : "); i = Convert. To. Int 32(Console. Read. Line()); if (i == 1) Console. Write. Line("Toplam : " + (a + b)); else if (i == 2) Console. Write. Line("Fark : " + (a - b)); else if (i == 3) Console. Write. Line("Çarpım : " + (a * b)); else if (i == 4) Console. Write. Line("Bölüm : " + (a / b)); } Yazılmasa da program çalışır ama gereksiz yere tüm if’ler kontrol edilir

Dört İşlem Programının Akış Şeması Başla Akış şemalarında genellikle "İlk sayıyı girin", "İkinci sayıyı

Dört İşlem Programının Akış Şeması Başla Akış şemalarında genellikle "İlk sayıyı girin", "İkinci sayıyı girin", "İşlemi seçin" gibi ekranda kullanıcıyı bilgilendirme amaçlı çıktılara yer verilmez. Veri girişi, işlem ve sonuç çıktıları gösterilmesi yeterlidir. a b i i=1 Evet a+b Hayır i=2 Evet a-b Evet a*b Evet a/b Hayır i=3 Hayır i=4 Hayır Dur Koşul (Karar) ifadelerinde "==" kullanmak gerekli değildir. Basic, Pascal gibi farklı dillerde karşılaştırma için "==" değil "=" kullanılır. Akış şemaları belirli bir dile göre yazılmadığı için "=" kullanımı daha uygundur.

Key. Char ile Dört İşlem Programı static void Main(string[] args) Read. Key() fonksiyonu {

Key. Char ile Dört İşlem Programı static void Main(string[] args) Read. Key() fonksiyonu { basılan tuşun değerini int a, b; char i; Console. Key. Info olarak Console. Write("İlk sayıyı girin : "); döndürür (ENTER a = Convert. To. Int 32(Console. Read. Line()); basılmasını gerektirmez). Console. Write("İşlemi Seçin : "); ". Key. Char" ile bu değeri i = Console. Read. Key(). Key. Char; karaktere çevirip i değişkenine atadık. Console. Write("nİkinci sayıyı girin : "); b = Convert. To. Int 32(Console. Read. Line()); if (i == '+') Console. Write. Line("Toplam : " + (a + b)); else if (i == '-') Console. Write. Line("Fark : " + (a - b)); else if (i == '*') Console. Write. Line("Çarpım : " + (a * b)); else if (i == '/') Console. Write. Line("Bölüm : " + (a / b)); } i karakter türünde olduğu için atama ve karşılaştırmalarda tek tırnak kullanılır (if (i == /) yazılamaz). String türü için ise çift tırnak kullanılmalıdır.

Klavyeden girilen 2 sayıdan birincisi büyük ise ikisini çarpan, değilse ikisini toplayan ve sonucu

Klavyeden girilen 2 sayıdan birincisi büyük ise ikisini çarpan, değilse ikisini toplayan ve sonucu ekranda gösteren program static void Main(string[] args) Başla { X int X, Y, S; Console. Write("X : "); Y X>Y Evet X = Convert. To. Int 32(Console. Read. Line()); S=X*Y Console. Write("Y : "); Hayır Y = Convert. To. Int 32(Console. Read. Line()); S=X+Y if (X > Y) S = X * Y; S else S = X + Y; Console. Write("S = " + S); Dur }

Kod Bloğu • PASCAL ve C gibi yapısal programlama dillerinde program kodu bloklara ayrılır.

Kod Bloğu • PASCAL ve C gibi yapısal programlama dillerinde program kodu bloklara ayrılır. PASCAL’da kod bloğu begin ile başlar end ile biter. C, C++, C# ve JAVA gibi dillerde ise { ile başar } ile biter. • Şimdiye kadar bu işaretleri Main() fonksiyonunun başını ve sonunu belirtmek için kullandık. Bazı durumlarda bir fonksiyonun içinde de bir kod bloğu oluşturmamız gerekebilir. Örneğin belirtilen koşul sağlandıysa (yada sağlanmadıysa) yapılacak iş birden fazla komutu içerdiği durumlarda blok içinde yazmamız gerekir: if (koşul) { koşul doğru ise yapılacak işlemler } else { koşul yanlış ise yapılacak işlemler }

Önceki Program (Farklı Çözüm) Başla X Y X>Y Evet S=X*Y Hayır S=X+Y S S

Önceki Program (Farklı Çözüm) Başla X Y X>Y Evet S=X*Y Hayır S=X+Y S S Dur static void Main(string[] args) { int X, Y, S; Console. Write("X : "); X = Int 32. Parse(Console. Read. Line()); Console. Write("Y : "); Y = Int 32. Parse(Console. Read. Line()); if (X > Y) { S = X * Y; Console. Write("X * Y = " + S); } else { S = X + Y; Console. Write("X + Y = " + S); } } Okunabilirliği arttırmak için kod bloğunun iç satırları dışındaki satırlardan 1 tab (~4 karakter) sağdan başlar.

Girilen 3 sayıdan en büyük olanı bulma Başla a, b, c a>b Evet Hayır

Girilen 3 sayıdan en büyük olanı bulma Başla a, b, c a>b Evet Hayır b>c Hayır En büyük sayı c’dir Dur Evet static void Main(string[] args) { int a, b, c; Console. Write ("a : "); a = Int 32. Parse(Console. Read. Line()); Console. Write ("b : "); Evet En büyük a>c b = Int 32. Parse(Console. Read. Line()); sayı a’dır Console. Write ("c : "); Hayır c = Int 32. Parse(Console. Read. Line()); En büyük if (a sayı > b) b’dir if (a > c) Console. Write("en büyük sayı a'dır"); else Console. Write("en büyük sayı c'dir"); else if (b > c) Console. Write("en büyük sayı b'dir"); else Console. Write("en büyük sayı c'dir"); } if-else yapılarında blok açma/kapatma yok, sorun olur mu?

switch-case Koşul Deyimi • Çok seçenekli işlemlerde (menü gibi) birçok if / else if

switch-case Koşul Deyimi • Çok seçenekli işlemlerde (menü gibi) birçok if / else if kullanmak yerine switch-case yapısı tercih edilebilir: switch (i) { case 1: …; break; case 2: …; break; case 3: …; break; case 4: …; break; … default: … }

switch-case ile Dört İşlem Programı static void Main(string[] args) { int a, b, i;

switch-case ile Dört İşlem Programı static void Main(string[] args) { int a, b, i; Console. Write("ilk sayiyi girin : "); a = Convert. To. Int 32(Console. Read. Line()); Console. Write("ikinci sayiyi girin : "); b = Convert. To. Int 32(Console. Read. Line()); Console. Write. Line("1) Toplama, 2) Çıkarma, 3) Çarpma, 4) Bölme"); secim: Console. Write. Line("İşlemi Seçiniz"); i = Convert. To. Int 32(Console. Read. Line()); switch (i) { case 1: Console. Write. Line("Toplam : " + (a + b)); break; case 2: Console. Write. Line("Fark : " + (a - b)); break; case 3: Console. Write. Line("Çarpım : " + (a * b)); break; case 4: Console. Write. Line("Bölüm : " + (a / b)); break; default: goto secim; } }

Go. To • Goto komutunun kullanılabilmesi için program içinde yönlendirilecek olan satırdan önce bir

Go. To • Goto komutunun kullanılabilmesi için program içinde yönlendirilecek olan satırdan önce bir etiket (label) tanımlanmalıdır. Bizim programımızda bu etiketin adı secim'dir. Etiket tanımı ; ile değil : ile biter. • Farklı etiketler tanımlanabileceği gibi, aynı etikete birden çok yerden goto ile geri dönmek mümkün olabililir, fakat fazla goto kullanımı program akışının takibini zorlaştırır ve okunabilirliğini azaltır (spagetti kod adı verilen duruma neden olur). • Bir sonraki dersimizde goto ile yapılan bu işi while döngüsü nasıl yapabileceğimizi göreceğiz (ve yapısal programlama kavramının gereği olarak, bundan sonra goto deyimini kullanmamaya gayret edeceğiz).

Programa Açıklama Satırı Ekleme • Yazdığımız program kodunda değişkenleri, fonksiyonları, döngüleri, vs. ne için

Programa Açıklama Satırı Ekleme • Yazdığımız program kodunda değişkenleri, fonksiyonları, döngüleri, vs. ne için kullandığımızı açıkladığımız ilave satırlar yer alabilir. Bu satırları derleyicinin dikkate almaması için satırın başında // kullanırız (genellikle kod editörleri açıklama satırını farklı renkte gösterirler). • Eğer açıklamamız kısa ise, yeni bir satır açmak yerine önceki satırın sonuna // ilave ederek açıklamayı yazmamız mümkündür (derleyici iki bölü işaretine yanyana gördüğü yerden itibaren satır sonuna kadar yazılanı göz ardı eder). char islem; // işlem seçimi için kullanılacak • Eğer birkaç satır uzunluğunda açıklama yazmak istiyorsak her satırın başına // koymak yerine ilk satırın başında /* ile başlayıp, son satırın sonunda */ ile bitirebiliriz. Yazdığımız programın bazı satırlarının göz ardı edilmesini istersek o satırları işaretleyip simgesi ile satırların başına // ekleyebilir simgesi ile de bunları kaldırabiliriz.

Vücut kitle indeksi programı /* Vücut kitle indeksi (VKİ), vücut ağırlığının (kg), // //

Vücut kitle indeksi programı /* Vücut kitle indeksi (VKİ), vücut ağırlığının (kg), // // boy uzunluğunun (m) karesine bölünmesiyle hesaplanır */ static void Main(string[] args) { float boy, kilo, vki; // float ile Single aynıdır Console. Write("Boyunuz (cm) : "); boy = Single. Parse(Console. Read. Line()); Console. Write("Ağırlığınız (kg) : "); kilo = Single. Parse(Console. Read. Line()); vki = kilo / (boy * boy / 10000); neden "/ 10000" ? Console. Write("Vücut kitle ind. : " + vki); if (vki < 20) Console. Write("(zayıf)"); else if (vki >= 20 && vki < 25) Console. Write("(normal)"); else if (vki >= 25 && vki < 30) Console. Write("(kilolu)"); else if (vki >= 30 && vki < 35) Console. Write("(şişman)"); else Console. Write("(obez)"); }

static void Main(string[] args) { int sayi, tahmin, sayac = 1; Random rastgele =

static void Main(string[] args) { int sayi, tahmin, sayac = 1; Random rastgele = new Random(); // Rastgele sayı üretmek için // yeni bir sınıf tanımladık. sayi = rastgele. Next(1, 100); // Tanımladığımız sınıfın Next // yöntemi ile 100 // arasında bir sayı ürettik. Console. Write. Line("1 -100 arasında tuttuğum sayıyı tahmin et"); tahmin: Console. Write("{0}. tahmin : ", sayac); tahmin = Int 32. Parse(Console. Read. Line()); if (sayi > tahmin) { Console. Write. Line("tuttuğum sayı daha büyük"); sayac++; goto tahmin; } else if (sayi < tahmin) { Console. Write. Line("tuttuğum sayı daha küçük"); sayac++; goto tahmin; } else Console. Write("Tebrikler " + sayac + " denemede buldun"); } Sayı tahmin etme oyunu

Ödev 1 • Not Hesaplama Programını değiştirin: – Notlar 0 -100 arasında girilmezse uyarı

Ödev 1 • Not Hesaplama Programını değiştirin: – Notlar 0 -100 arasında girilmezse uyarı mesajı görüntülenecek ve hatalı girilen vize yada final notu kullanıcıdan tekrar istenecek. – Öğrencinin Başarı Notu 60’tan az ise başarı notunun yanında sadece "Başarısız" değil, "Final sınavından en az … almalıydı" mesajı da görüntülenecek. – Programın sonunda “Devam ? [ E / H ]” sorusu sorulacak, eğer kullanıcı e yada E tuşuna basarsa program başa dönecek, başka bir tuşa basarsa program sonlanacak.

Ödev 2 • Dört işlem programını değiştirin: – Ondalıklı sayılar ile işlem yapılabilsin. –

Ödev 2 • Dört işlem programını değiştirin: – Ondalıklı sayılar ile işlem yapılabilsin. – Önce işlem seçimi yapılsın, sonra sayılar girilsin. – 5 numaralı işlem “çıkış” olarak tanımlansın. Kullanıcı 5’i seçmedikçe program başa dönerek çalışmaya devam etsin. – Programı hem if-else hem de switch-case ifadelerini kullanarak iki farklı şekilde yazın.

Ödev 3 • Vücut kitle indeksi programını değiştirin: – Eğer girilen boy ve ağırlığa

Ödev 3 • Vücut kitle indeksi programını değiştirin: – Eğer girilen boy ve ağırlığa göre "zayıf" sonucu çıktıysa vki = 20 olması için alınması gereken kilo miktarı da yazılsın. – Eğer girilen boy ve ağırlığa göre normalin üzerinde bir sonuç çıktıysa vki = 24. 9 olması için verilmesi gereken kilo miktarı da yazılsın.

Ödev 4 • Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen programı yazın. •

Ödev 4 • Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen programı yazın. • Sonraki slaytta yer alan soldaki akış şemasına göre (kontrol ifadesiyle olan) çözümü yazınız. • Programda goto kullanmanız gerekecektir. Önümüzdeki hafta döngüler anlatıldığında for döngüsü ile nasıl yapılacağı (sağdaki akış şemasına göre çözüm) gösterilecektir.

Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen akış şeması Kontrol İfadesiyle Döngü İfadesiyle

Girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen akış şeması Kontrol İfadesiyle Döngü İfadesiyle Başla i=1, eb=0 i, 1, 10, 1 sayı Evet i=i+1 sayı>eb Hayır Evet i<10 eb Dur Evet eb=sayı>eb Hayır i eb Dur eb=sayı