Bölüm 4 – Kontrol İfadeleri :1 .kısım
description
Transcript of Bölüm 4 – Kontrol İfadeleri :1 .kısım
Outline4.1 Giriş4.2 Algoritmalar4.3 Pseudocode4.4 Kontrol İfadeleri4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri 4.8 Algoritmaların Tasarımı : Örnek Çalışma 1(Sayaç - Kontrollü Döngüler) 4.9 Algoritmaların Tasarımı: Örnek Çalışma 2 (Sonlandırcı- Kontrollü Döngüler) 4.10 Algoritmaların Tasarımı: Örnek Çalışma 2 (İçiçe Kontrollü Yapılar)4.11 Birleşik Atama Operatörleri 4.12 Artırma ve Azaltma Operatörleri 4.13 İlkel Tipler
Bölüm 4 – Kontrol İfadeleri:1.kısım
4.1 Giriş
• Bu bölümde Kontrol İfadelerini öğreneceğiz.– Yapısal programlama prensibi
– Kontrol ifadeleri objelerin yapımına yardım eder. (Chapter 8)
4.2 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.
4.3 Pseudocode
• 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.
4.4 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çimli yapılar
• Döngüsel yapılar
• Akış diagramı– İş akışını modeller
• İşi tanımlayan semboller
• İş sırasını gösteren oklar
Fig 4.1 Sıralı akış diyagramı.
Notu toplama ekle
Sayacı 1 artır
Java karşılığı:toplam = toplam + not;
Java karşılığı:sayac = sayac + 1;
J ava Keywords abstract assert boolean break byte case catch char class continue default do double else extends final finally float for if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while Keywords that are reserved, but not currently used const goto Fig. 4.2 J ava keywords.
4.4 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.
4.5 if tek-seçimli durum
• Tek-giriş/tek-çıkış kontrol ifadeleri• Şart doğru (true) olduğu zaman komut çalışır.
Fig 4.3 if tek-seçimli durum iş iş akış diyagramı.
[not >= 60]
[not < 60]
print “Geçti”
4.6 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
Fig 4.4 if…else iki seçimli durumlar için akış diyagramı.
[not >= 60][not < 60]print “Kaldı” print “Geçti”
4.7 while Tekrarlama İfadeleri
• Şart doğru (true) olduğu müddetçe dögüye ait komutları çalıştır.
Fig 4.5 while tekrarlama ifadelerinin akış dyagramı.
[ü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;
4.8 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.java not ortalamasını hesaplar.– Döngüyü kontrol için sayaç kullanılır.
Toplam değişkenini sıfırlaSayaç değişkenine 1 ata
Syaç 10 ‘a eşit yada küçük olduğu müddetçeDiğer notu girToplamı not kadar artırSayacı 1 artır
Toplamı 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.
Average1.java gradeCounter
Line 21
1 // Fig. 4.7: Ortalama1.java2 // Class-average program with counter-controlled repetition.3 import javax.swing.JOptionPane;4 5 public class Ortalama1 {6 7 public static void main( String args[] ) 8 {9 int toplam; // sum of grades input by user10 int notSayaci; // number of grade to be entered next11 int not; // grade value12 int ortalama; // average of grades13 14 String notString; // grade typed by user15 16 // initialization phase17 toplam = 0; // initialize total18 notSayaci = 1; // initialize loop counter19 20 // processing phase21 while (notSayaci <= 10 ) { // loop 10 times22 23 // prompt for input and read grade from user24 notString = JOptionPane.showInputDialog(25 “Sayısal not girişi: " );26 27 // convert gradeString to int28 not = Integer.parseInt( notString );29
Declare variables; gradeCounter is the counter
Continue looping as long as gradeCounter is less than or
equal to 10
Average1.java
30 toplam = toplam + not; // add grade to total31 notSayaci = notSayaci + 1; // increment counter32 33 } // end while34 35 // termination phase36 ortalama = toplam / 10; // integer division37 38 // display average of exam grades39 JOptionPane.showMessageDialog( null, “Sınıf ortalaması" + ortalama,40 “Sınıf Ortlaması", JOptionPane.INFORMATION_MESSAGE );41 42 System.exit( 0 ); // terminate the program43 44 } // end main45 46 } // end class Average1
Ortalama1.java
4.9 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ı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çe Toplamı 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ır
else“Hiçbir not girilmedi” yazdır
Fig. 4.8 Pseudocode algoritması : sınıf ortalamasını bulmak için sonlandırıcı kontrollü döngüs kullanılır.
Average2.java
1 // Fig. 4.9: Ortalama2.java2 // Class-average program with sentinel-controlled repetition.3 import java.text.DecimalFormat; // class to format numbers4 import javax.swing.JOptionPane;5 6 public class Ortalama2 {7 8 public static void main( String args[] )9 {10 int toplam; // sum of grades11 int notSayaci; // number of grades entered12 int not; // grade value13 14 double ortalama; // number with decimal point for average15 16 String notString; // grade typed by user17 18 // initialization phase19 toplam = 0; // initialize total20 notSayaci = 0; // initialize loop counter21 22 // processing phase23 // 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
Average2.java
Line 31
Line 45
30 // loop until sentinel value read from user31 while ( not != -1 ) { 32 toplam = toplam + not; // add grade to total33 notSayaci = notSayaci + 1; // increment counter34 35 // get next grade from user 36 notString = JOptionPane.showInputDialog(37 " Not Girişi yada Çıkış için -1 :" );38 39 // convert gradeString to int 40 not = Integer.parseInt( notString ); 41 42 } // end while43 44 // termination phase45 DecimalFormat ikiDigit = new DecimalFormat( "0.00" );46 47 // if user entered at least one grade...48 if ( notSayaci != 0 ) {49 50 // calculate average of all grades entered51 ortalama = (double) toplam / notSayaci; 52 53 // display average with two digits of precision54 JOptionPane.showMessageDialog( null,55 “Sınıf Ortalaması " + ikiDigit.format( ortalama ),56 “Sınıf Ortalaması", JOptionPane.INFORMATION_MESSAGE );57 58 } // end if part of if...else59
loop until gradeCounter equals sentinel value (-1)
Format numbers to nearest hundredth
Ortalama2.java
60 else // if no grades entered, output appropriate message61 JOptionPane.showMessageDialog( null, “Not girişi yapılmadı",62 “Sınıf Ortalaması", JOptionPane.INFORMATION_MESSAGE );63 64 System.exit( 0 ); // terminate application65 66 } // end main67 68 } // end class Ortalama2
4.10 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ç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ırKaç kişi kaldığını yazdır
Eğer 8 kişiden fazla kişi geçmiş ise “Öğretim başarılı” yazdır
Fig 4.10 Pseudocode :sınav sonucu problemi için.
Analysis.java
Line 19
Line 29
1 // Fig. 4.11: Analysis.java2 // Analysis of examination results.3 import javax.swing.JOptionPane;4 5 public class Analysis {6 7 public static void main( String args[] ) 8 {9 // initializing variables in declarations10 int gecenler = 0; // number of passes 11 int kalanlar = 0; // number of failures12 int sayac = 1; // student counter 13 int sonuc; // one exam result14 15 String giris; // user-entered value16 String cikis; // output string17 18 // process 10 students using counter-controlled loop19 while ( sayac <= 10 ) {20 21 // prompt user for input and obtain value from user22 giris = JOptionPane.showInputDialog(23 "Enter result (1 = geç, 2 = kal)" );24 25 // convert result to int26 sonuc = Integer.parseInt( giris );27 28 // if result 1, increment passes; if...else nested in while29 if ( sonuc == 1 ) 30 gecenler = gecenler + 1;
Loop until student counter is greater than 10
Nested control structure
Analysis.java
31 32 else // if result not 1, increment failures 33 kalanlar = kalanlar + 1; 34 35 // increment studentCounter so loop eventually terminates36 sayac = sayac + 1; 37 38 } // end while39 40 // termination phase; prepare and display results41 cikis = “Geçenler: " + gecenler + "\nKalanlar: " + kalanlar;42 43 // determine whether more than 8 students passed44 if ( gecenler > 8 )45 cikis = cikis + "\nÖğretim Başarılı";46 47 JOptionPane.showMessageDialog( null, cikis,48 "Analysis of Examination Results",49 JOptionPane.INFORMATION_MESSAGE );50 51 System.exit( 0 ); // terminate application52 53 } // end main54 55 } // end class Analysis
4.11 Birleşik Atama Operatörleri
• 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
– Şu şekilde de yazılabilir• c += 3
Assignment operator
Sample expression
Explanation Assigns
Assume: int c = 3, d = 5, e = 4, f = 6, g = 12;
+= c += 7 c = c + 7 10 to c -= d -= 4 d = d - 4 1 to d *= e *= 5 e = e * 5 20 to e /= f /= 3 f = f / 3 2 to f %= g %= 9 g = g % 9 3 to g Fig. 4.12 Arithmetic assignment operators.
4.12 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
Operator Called Sample expression
Explanation
++ preincrement ++a Increment a by 1, then use the new value of a in the expression in which a resides.
++ postincrement a++ Use the current value of a in the expression in which a resides, then increment a by 1.
-- predecrement --b Decrement b by 1, then use the new value of b in the expression in which b resides.
-- postdecrement b-- Use the current value of b in the expression in which b resides, then decrement b by 1.
Fig. 4.13 The increment and decrement operators.
Increment.java
Line 13 postincrement
Line 21 preincrement
1 // Fig. 4.14: Increment.java2 // Preincrementing and postincrementing operators.3 4 public class Increment {5 6 public static void main( String args[] )7 {8 int c;9 10 // demonstrate postincrement11 c = 5; // assign 5 to c12 System.out.println( c ); // print 513 System.out.println( c++ ); // print 5 then postincrement14 System.out.println( c ); // print 6 15 16 System.out.println(); // skip a line17 18 // demonstrate preincrement19 c = 5; // assign 5 to c20 System.out.println( c ); // print 521 System.out.println( ++c ); // preincrement then print 622 System.out.println( c ); // print 6 23 24 } // end main25 26 } // end class Increment
556
566
Line 13 postincrements c
Line 21 preincrements c
Operators Associativity Type ++ -- right to left unary postfix ++ -- + - (type) right to left unary * / % left to right multiplicative + - left to right additive < <= > >= left to right relational == != left to right equality ?: right to left conditional = += -= *= /= %= right to left assignment Fig. 4.15 Bu zamana kadar öğrendiğimiz tüm operatörler.
4.13 İlkel Veri Tipleri
• Java da tüm değişkenlerin mutlaka bir veri tipi olması lazımdır.
• Java ilkel veri tipleri
Type Size in bits Values Standard boolean true or false
[Note: The representation of a boolean is specific to the Java Virtual Machine on each computer platform.]
char 16 '\u0000' to '\uFFFF' (0 to 65535)
(ISO Unicode character set)
byte 8 –128 to +127 (–27 to 27 – 1)
short 16 –32,768 to +32,767 (–215 to 215 – 1)
int 32 –2,147,483,648 to +2,147,483,647 (–231 to 231 – 1)
long 64 –9,223,372,036,854,775,808 to +9,223,372,036,854,775,807 (–263 to 263 – 1)
float 32 Negative range: –3.4028234663852886E+38 to –1.40129846432481707e–45 Positive range: 1.40129846432481707e–45 to 3.4028234663852886E+38
(IEEE 754 floating point)
double 64 Negative range: –1.7976931348623157E+308 to –4.94065645841246544e–324 Positive range: 4.94065645841246544e–324 to 1.7976931348623157E+308
(IEEE 754 floating point)
Fig. 4.16 The J ava primitive types.