Karar ifadeleri ve Döngüler Algoritmalar Pseudocode Kontrol İfadeleri if tek-seçimli ifadeler if else seçimli ifadeler while döngü ifadeleri Algoritmaların Tasarımı : Örnek Çalışma 1(Sayaç - Kontrollü Döngüler) Algoritmaların Tasarımı: Örnek Çalışma 2 (Sonlandırcı- Kontrollü Döngüler) Algoritmaların Tasarımı: Örnek Çalışma 2 (İçiçe Kontrollü Yapılar) Birleşik Atama Operatörleri Artırma ve Azaltma Operatörleri
Algoritmalar Algoritma Program kontrolü Belli bir sırada takip edilen işler İşler gerçekleştirilir. Sıra, hangi işin gerçekleştireceğini tespit eder. Program kontrolü Kontrol ifadeleri bu sıranın oluşumuna yardım eder.
Pseudocode (Program tasarımı) Algoritma geliştirmek için kullanılan esnek bir dil Bilgisayarda çalıştırılamaz Algoritmayı yapanlara kurallardan bağımsız ifade etmeyi sağlar.
Kontrol İfadeleri Sıralı çalışma Kontrolün transferi Akış diagramı Program kodları baştan başlayıp satır satır çalışır. Kontrolün transferi 3 tip kontrol ifadesi bu kodlar arasında transfer sağlar. Sıralı yapılar Seçimli yapılar Döngüsel yapılar Akış diagramı İş akışını modeller İşi tanımlayan semboller İş sırasını gösteren oklar
Sıralı akış diyagramı. Java karşılığı: toplam = toplam + not; Notu toplama ekle Sayacı 1 artır Java karşılığı: toplam = toplam + not; Java karşılığı: sayac = sayac + 1; Sıralı akış diyagramı.
Java sıralı akışa sahiptir. Java 3 farklı seçim komutu sağlar. Kontrol İfadeleri Java sıralı akışa sahiptir. Java 3 farklı seçim komutu sağlar. if If…else switch Java 3 farklı döngü komutu sağlar. while do…while do Bu komutların herbiri ayrılmış kelimelerdir.
Tek-giriş/tek-çıkış kontrol ifadeleri if tek-seçimli durum Tek-giriş/tek-çıkış kontrol ifadeleri Şart doğru (true) olduğu zaman komut çalışır. [not >= 60] [not < 60] print “Geçti” if tek-seçimli durum iş iş akış diyagramı.
Şart doğru (true) olduğu zaman komut çalışır. if…else seçimli durum Şart doğru (true) olduğu zaman komut çalışır. Şart yanlış (false) olduğu zaman başka bir komut çalışır. Şart operatörü (?:) İçiçe if…else ifadeleri [not >= 60] [not < 60] print “Kaldı” print “Geçti” if…else iki seçimli durumlar için akış diyagramı.
while Tekrarlama İfadeleri Şart doğru (true) olduğu müddetçe döngüye ait komutları çalıştır. [ürün <= 1000] [ürün > 1000] Ürün değerinin 2 katını al birleşim karar Java karşılığı: ürün = 2 * ürün; while tekrarlama ifadelerinin akış dyagramı.
Algoritmaların Tasarlanması: Örnek Çalışma 1 (Kontrollü Sayaç Döngüsü) İfadelerin kaç defa tekrar ettiğini kontrol eden değişken Ortalama1.java not ortalamasını hesaplar. Döngüyü kontrol için sayaç kullanılır.
Toplam değişkenini sıfırla Sayaç değişkenine 1 ata Syaç 10 ‘a eşit yada küçük olduğu müddetçe Diğer notu gir Toplamı not kadar artır Sayacı 1 artır Toplamı 10 ‘a bölerek sınıf ortalamasına ata Sınıf ortalamasını yazdır Fig. 4.6 Pseudocode algoritması : sınıf ortalamasını bulmak için kontrollü sayaç döngüsü kullanılır.
Değişken tanımlama; notSayaci bir sayaçtır. 1 // Ortalama1.java 2 // sayaç kontrollu,sınıf ortalaması bulma 3 import javax.swing.JOptionPane; 4 5 public class Ortalama1 { 6 7 public static void main( String args[] ) 8 { 9 int toplam; // not toplamı 10 int notSayaci; // kaç not girildiğini sayacak 11 int not; // not değeri 12 int ortalama; // not ortalaması 13 14 String notString; // kullanıcıdan alınacak not 15 16 // initialization phase 17 toplam = 0; // initialize total 18 notSayaci = 1; // initialize loop counter 19 20 // processing phase 21 while (notSayaci <= 10 ) { // 10 defa işlenecek 22 23 // prompt for input and read grade from user 24 notString = JOptionPane.showInputDialog( 25 “Sayısal not girişi: " ); 26 27 // convert gradeString to int 28 not = Integer.parseInt( notString ); 29 Değişken tanımlama; notSayaci bir sayaçtır. Not sayacı 10’a eşit veya küçük olduğu müddetçe devam et.
30 toplam = toplam + not; // add grade to total 31 notSayaci = notSayaci + 1; // increment counter 32 33 } // end while 34 35 // termination phase 36 ortalama = toplam / 10; // integer division 37 38 // display average of exam grades 39 JOptionPane.showMessageDialog( null, “Sınıf ortalaması" + ortalama, 40 “Sınıf Ortlaması", JOptionPane.INFORMATION_MESSAGE ); 41 42 System.exit( 0 ); // terminate the program 43 44 } // end main 45 46 } // end class Average1
Ortalama1.java
Ortalama2.java döngünün sayısı belli değil Algoritmaların Tasarlanması: Örnek Çalışma 2 (Sonlandırıcı-Kontrollü Döngüler) Sonlandırıcı değer Veri girişini sonlandırmak amaçlı kullanılır. Ortalama2.java döngünün sayısı belli değil Kullanıcı sonlandırıcı değere (-1) basarak döngüyü bitiriyor.
Toplam değişkenini sıfırla Sayaç değişkenine 1 ata İlk not girişi yap (sonlandırıcı değer de mümkün) Kullanıcı sonlandırıcı değer girmediği müddetçe Toplamı not değeri kadar artır Sayacı 1 artır Yeni notu gir(sonlandırcı değer de mümkün) Eğer sayaç 0 eşit değilse Ortalamayı toplamı sayaca bölerek bul Ortalamayı yazdır else “Hiçbir not girilmedi” yazdır Pseudocode algoritması : sınıf ortalamasını bulmak için sonlandırıcı kontrollü döngüs kullanılır.
1 // Ortalama2.java 2 // sınıf ortalamsı programıı, kullanıcı kontrollu. 3 import java.text.DecimalFormat; // class to format numbers 4 import javax.swing.JOptionPane; 5 6 public class Ortalama2 { 7 8 public static void main( String args[] ) 9 { 10 int toplam; // sum of grades 11 int notSayaci; // number of grades entered 12 int not; // grade value 13 14 double ortalama; // number with decimal point for average 15 16 String notString; // grade typed by user 17 18 // initialization phase 19 toplam = 0; // initialize total 20 notSayaci = 0; // initialize loop counter 21 22 // processing phase 23 // get first grade from user 24 notString = JOptionPane.showInputDialog( 25 “Not Girişi yada Çıkış için -1 :" ); 26 27 // convert gradeString to int 28 not = Integer.parseInt( notString ); 29
Not değeri -1 olana kadar döngüyü çalıştır. 30 31 while ( not != -1 ) { 32 toplam = toplam + not; // add grade to total 33 notSayaci = notSayaci + 1; // increment counter 34 35 // bir sonraki notu kullanıcan iste 36 notString = JOptionPane.showInputDialog( 37 " Not Girişi yada Çıkış için -1 :" ); 38 39 // notu string ten int 2e çevir 40 not = Integer.parseInt( notString ); 41 42 } // end while 43 44 45 DecimalFormat ikiDigit = new DecimalFormat( "0.00" ); 46 47 // en az 1 not girilip girilmediğini kontol et ( sıfıra bölme hatası) 48 if ( notSayaci != 0 ) { 49 50 // tüm notların ortalaması hesapla 51 ortalama = (double) toplam / notSayaci; 52 53 // sonucu ,ondalıklı kısmı 2 basamak olacak şekilde göster 54 JOptionPane.showMessageDialog( null, 55 “Sınıf Ortalaması " + ikiDigit.format( ortalama ), 56 “Sınıf Ortalaması", JOptionPane.INFORMATION_MESSAGE ); 57 58 } // end if Not değeri -1 olana kadar döngüyü çalıştır. Sayıyı ,ondalık kısmı iki basamaklı olacak şekilde yuvarla
60 else // eğer not girişi yapılmamışsa bilgi ver 61 JOptionPane.showMessageDialog( null, “Not girişi yapılmadı", 62 “Sınıf Ortalaması", JOptionPane.INFORMATION_MESSAGE ); 63 64 System.exit( 0 ); // terminate application 65 66 } // end main 67 68 } // end class Ortalama2
Algoritmaların Tasarlanması: Örnek Çalışma 3 (İçiçe Kontrol Yapıları) Gecenler ‘e 0 ilk değeri ver Kalanlar’ a 0 ilk değeri ver Ogrenci ‘ye 1 ilk değer ver Sayac 10 ‘a eşit yada küçük olduğu müddetçe Sınav sonucu gir Eğer öğrenci geçmiş ise Gecenlere 1 ekle else Kalanlara 1 ekle Sayacı 1 artır Kaç kişi geçtiğini yazdır Kaç kişi kaldığını yazdır Eğer 8 kişiden fazla kişi geçmiş ise “Öğretim başarılı” yazdır Pseudocode :sınav sonucu problemi için.
Öğrenci sayacı 10dan küçük ve eşit olduğu müddetçe döngüyü çalıştır 1 // Analiz.java 2 // sınav sonuçlarını analiz eden program. 3 import javax.swing.JOptionPane; 4 5 public class Analysis { 6 7 public static void main( String args[] ) 8 { 9 // geişken tanumlama ve ilk değer atama 10 int gecenler = 0; // geçen öğrencilerin sayısı 11 int kalanlar = 0; // kalan öğrenci sayısı 12 int sayac = 1; // öğrenci sayacı 13 int sonuc; // sınav sonuç değişkeni 14 15 String giris; // kullanıcıdan alınan değer 16 String cikis; // çıktıda gösterilecek yazı 17 18 // 10 tane öğrenci için döngüyü çalıştır 19 while ( sayac <= 10 ) { 20 21 // kullanıcıdan öğrenci sınav sonucunu al 22 giris = JOptionPane.showInputDialog( 23 “sınav sonucunu giriniz (1 = geç, 2 = kal)" ); 24 25 // kullanıcıdan alınan string i int e çevir 26 sonuc = Integer.parseInt( giris ); 27 28 // eğer sonuc 1 ise geçen öğrenci sayısını 1 arttır 29 if ( sonuc == 1 ) 30 gecenler = gecenler + 1; Öğrenci sayacı 10dan küçük ve eşit olduğu müddetçe döngüyü çalıştır İçiçe kontrol yapısı
31 // sonuç 1 değilse kalan öğrenci sayısını 1 arttır 32 else 33 kalanlar = kalanlar + 1; 34 35 // öğrenci sayacını 1 arrtır ki, sonsuz döngüye dönüşmesin 36 sayac = sayac + 1; 37 38 } // while sonu 39 40 // çıktıda görünecek yazıyı düzenle 41 cikis = “Geçenler: " + gecenler + "\nKalanlar: " + kalanlar; 42 43 // geçen öğrenci sayısının 8 den fazla olup olmadığına karar ver 44 if ( gecenler > 8 ) 45 cikis = cikis + "\nÖğretim Başarılı"; else 45 cikis = cikis + "\nÖğretim Başarısız"; 46 47 JOptionPane.showMessageDialog( null, cikis, 48 “sınav sonuç analizi :", 49 JOptionPane.INFORMATION_MESSAGE ); 50 51 System.exit( 0 ); // uygulamayı sonlandır 52 53 } // main metod sonu 54 55 } // analiz sınıf sonu
Birleşik Atama Operatörleri Kısaltılmış atama operatörleri Herhangi bir atama işlemi değişken = değişken operatör ifade; Şu şekilde de yazılabilir değişken operatör = ifade; Örneğin toplam atama operatörü += c = c + 3 c += 3
Artırma Azaltma Operatörleri Bir artırma (++) Değer 1 artırır. Bir azaltma (--) Değeri 1 azaltır Önceden artırma / önceden azaltma operatör Sonradan artırma / sonradan-azaltma operatör
Bknz: http://www. bilisim-kulubu. com/sozluk/sozluk. php Bknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=postincrement Bknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=preincrement Bknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=postdecrement Bknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=predecrement
Postincrement- sonra Arttır Preincrement- önce arttır 1 /* Preincrementing (önce arttır), postincrementing (sonra arttır) 2 operatörlerinin kullanımı 3 4 public class Arttırma { 5 6 public static void main( String args[] ) 7 { 8 int c; 9 10 // postincrement örneği 11 c = 5; // c ye 5 ata 12 System.out.println( c ); // 5 yazar 13 System.out.println( c++ ); // 5 yazar sonra arttır 14 System.out.println( c ); // 6 yazar 15 16 System.out.println(); // 1 satır atla 17 18 // preincrement örneği 19 c = 5; // c ye 5 ata 20 System.out.println( c ); // 5 yazar 21 System.out.println( ++c ); // önce attırır sonra 6 yazar 22 System.out.println( c ); // 6 yazar 23 24 } // main metodu sonu 25 26 } // Attırma class sonu Satır 13 , c yi yaz ve arttır İngilizce-Türkçe Postincrement- sonra Arttır Preincrement- önce arttır Satır 21 ,c yi arttır ve yaz 5 5 6 5 6 6