E N D
Karar ifadeleri ve Döngüler AlgoritmalarPseudocodeKontrol İfadeleriiftek-seçimli ifadelerif elseseçimli ifadelerwhiledö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 • 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ı) • 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 • 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çimliyapılar • Döngüsel yapılar • Akış diagramı • İş akışını modeller • İşi tanımlayan semboller • İş sırasını gösteren oklar
Java karşılığı:toplam = toplam + not; Sayacı 1 artır Notu toplama ekle Java karşılığı:sayac = sayac + 1; • Sıralı akış diyagramı.
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.
[not >= 60] [not < 60] print “Geçti” if tek-seçimli durum • Tek-giriş/tek-çıkışkontrol ifadeleri • Şart doğru (true) olduğu zaman komut çalışır. • iftek-seçimli durum iş iş akış diyagramı.
[not < 60] [not >= 60] print “Geçti” print “Kaldı” if…elseseç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çeif…elseifadeleri • if…elseiki seçimli durumlar için akış diyagramı.
birleşim karar [ürün <= 1000] Ürün değerinin 2 katını al [ürün > 1000] Java karşılığı:ürün = 2 * ürün; whileTekrarlama İfadeleri • Şart doğru (true) olduğu müddetçe döngüye ait komutları çalıştır. • whiletekrarlama ifadelerinin akış dyagramı.
Algoritmaların Tasarlanması: Örnek Çalışma 1 (Kontrollü Sayaç Döngüsü) • Sayaç • İfadelerin kaç defa tekrar ettiğini kontrol eden değişken • Ortalama1.javanot ortalamasını hesaplar. • Döngüyü kontrol için sayaç kullanılır.
Toplam değişkenini sıfırlaSayaç değişkenine 1 ataSyaç 10 ‘a eşit yada küçük olduğu müddetçeDiğer notu girToplamı not kadar artırSayacı 1 artırToplamı 10 ‘a bölerek sınıf ortalamasına ataSı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. Not sayacı 10’a eşit veya küçük olduğu müddetçe devam et. 1 // Ortalama1.java 2 // sayaç kontrollu,sınıf ortalaması bulma 3 import javax.swing.JOptionPane; 4 5 public classOrtalama1 { 6 7 public static void main( String args[] ) 8 { 9 int toplam; // not toplamı 10 intnotSayaci; // kaç not girildiğini sayacak 11 intnot; // not değeri 12 intortalama; // 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
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
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.javadö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ırlaSayaç 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çeToplamı not değeri kadar artırSayacı 1 artırYeni notu gir(sonlandırcı değer de mümkün)Eğer sayaç 0 eşit değilseOrtalamayı toplamı sayaca bölerek bulOrtalamayı yazdırelse “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 classOrtalama2 { 7 8 public static void main( String args[] ) 9 { 10 int toplam; // sum of grades 11 intnotSayaci; // number of grades entered 12 intnot; // grade value 13 14 doubleortalama; // 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şiyadaÇı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. Sayıyı ,ondalık kısmı iki basamaklı olacak şekilde yuvarla 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şiyadaÇı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
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ı) • İçiçe kontrol yapıları Gecenler ‘e 0 ilk değeri verKalanlar’ a 0 ilk değeri verOgrenci ‘ye 1 ilk değer ver Sayac 10 ‘a eşit yada küçük olduğu müddetçeSınav sonucu gir Eğer öğrenci geçmiş iseGecenlere 1 ekle elseKalanlara 1 ekle Sayacı 1 artır Kaç kişi geçtiğini yazdırKaç 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 İçiçe kontrol yapısı 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 intgecenler = 0; // geçen öğrencilerin sayısı 11 intkalanlar = 0; // kalan öğrenci sayısı 12 intsayac = 1; // öğrenci sayacı 13 intsonuc; // 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;
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 AtamaOperatörleri • Atama Operatörleri • Kısaltılmış atama operatörleri • Herhangi bir atama işlemi • değişken=değişkenoperatörifade; • Şu şekilde de yazılabilir • değişkenoperatör=ifade; • Örneğin toplam atama operatörü+= • c = c + 3 • Şu şekilde de yazılabilir • c += 3
ArtırmaAzaltma Operatörleri • Bir artırma (++) • Değer 1 artırır. • Bir azaltma (--) • Değeri 1 azaltır • Önceden artırma / önceden azaltmaoperatör • Sonradan artırma / sonradan-azaltma operatör
Bknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=postincrementBknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=preincrementBknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=postdecrementBknz: http://www.bilisim-kulubu.com/sozluk/sozluk.php?e=predecrement
Satır 13 , c yi yaz ve arttır Satır 21 ,c yi arttır ve yaz 1 /* Preincrementing (önce arttır), postincrementing (sonra arttır)2 operatörlerinin kullanımı 3 4 public classArttı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ır14 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 İngilizce-Türkçe Postincrement- sonra Arttır Preincrement- önce arttır 556566