Kontrol Yapıları
Giri
Algoritmalar
Pseudocode
Kontrol Yapıları
if Seçme Yapısı
if/else Seçme Yapısı
while Tekrar Yapısı
Algoritma Düzenleme : Örnek Çalı ma 1 (Sayaç Kontrollü Tekrar)
Algoritma Düzenleme : Örnek Çalı ma 2 (Sentinel Kontrollü Tekrar)
Algoritma Düzenleme : Örnek Çalı ma 3 ( çiçe Kontrol Yapısı)
Atama Operatörleri
Artırma ve Azaltma Operatörleri
Giri
• Program yazmaya ba lamadan önce
– Problemi anlayın
– Çözüm için bir yakla ım dü ünün
– Yapılandırılacak blokları anlayın
1
Algoritmalar
• Prosedür
– Bir programın gerçekle tirece i i lemlerdir
– lemlerin gerçekle tirilece i sıradır
– Algoritma olarakta adlandırılır
• Program kontrol
– Bilgisayarın do ru bir ekilde i lemleri gerçekle tirebilmesi
için görevlerin sıralanmasıdır
Pseudocode (Kaba kod)
• Pseudocode
– Yapay ve günlük dil kullanır
– Programcıya algoritmayı planlamasında yardımcı olur
– Gerçek bir programlama dili de ildir
– C# koduna basit bir ekilde çevrilir
2
Kontrol Yapıları
• Program kontrolü
– Program bir deyimden (statement) bir sonraki deyime
geçerek çalı ır
• Sıralı çalı ma (Sequential execution)
– Bir sonraki satırdan ba ka bir satırı çalı tırmak için kontrol
yapıları kullanılır
• Seçme Yapısı (Selection structure)
– if ve if/else deyimleri
– goto deyimi
• Kesinlikle gerekmedikçe kullanılmamalıdır
• Programın okunmasında problemler olu turabilir
• Tekrar Yapısı (Repetition structure)
– while ve do/while döngüleri (loops)
– for ve foreach dögüleri
Kontrol Yapıları
• Akı emaları (Flow carts)
– Programın haritalanması için kullanılır
– Sırayla gelecek olayları gösterir
• Dikdörtgen bir i lemi gösterir (Toplama, Yazdırma v.b.)
• Oval ba lama ve biti gösterimlerinde kullanılır
• Daireler ba lantılar için kullanılır
• Paralel kenar karari lemlerini gösterir
– Kontrol yapılarının birle tirilmesi
• Yı ın
– Birinden di erine geçer
• çiçe
– Birisini di erinin içine ekler
3
Kontrol Yapıları
add grade total total = total + grade;
add 1 to counter counter = counter + 1;
Fig. 4.1 Flowcharting C#’s sequence structure.
Kontrol Yapıları
abstract as base bool break
byte case catch char checked
class const continue decimal default
delegate do double else enum
event explicit extern false finally
fixed float for foreach get
goto if implicit in int
interface internal is lock long
namespace new null object operator
out override params private protected
public readonly ref return sbyte
sealed set short sizeof stackalloc
static string struct switch this
throw true try typeof uint
ulong unchecked unsafe ushort using
value virtual void volatile while
4
if Seçme Yapısı
• if yapısı
– Programın seçme yapmasını sa lar
– Belirtilen arta göre i lem yapar
• bool türünde bir ifadeyi de erlendirir
• True: i lemi yapar
• False: i lemi atlar
– Noktalı virgül gerektirmez
if Seçme Yapısı
true
Grade >= 60 print “Passed”
false
Fig. 4.3 Flowcharting a single-selection if structure.
5
if/else seçme yapısı
• if/else yapısı
– Birden fazla durumun test edilmesinde kullanılır
– ({) parantezi kullanılarak birden fazla satır i lem yapılabilir
if/else seçme yapısı
false true
Grade >= 60
print “Failed” print “Passed”
Fig. 4.4 Flowcharting a double-selection if/else structure.
6
art operatörü (?:)
• art operatörü (?:)
– C#’ın tek üç parçalı operatörüdür
– if/else yapısına benzer
– Yazımı öyledir:
• (boolean value ? if true : if false)
while tekrar yapısı
• Tekrar yapısı
– Tekrarlı yapılan i lemleri ifade eder
• While deyimi do ru (true) oldu u sürece i lem tekrarlanır
• While deyimi yanlı (false) oldu unda i lem biter
– Bir satır veya paranteze alınmı bir blo u içerir
• artın mutlaka sonlandırılmı olması gerekir
– Sonlandırılmamı artlarda sonsuz dögüye girer
7
while tekrar yapısı
true
Product <= 1000 Product = 2 * product
false
Fig. 4.5 Flowcharting the while repetition structure.
Algoritmanın düzenlenmesi: Örnek Çalı ma 1
(Sayaç Kontrollü Tekrar)
• Sayaç (Counter) Kontrollü Tekrar
– Bir zamanda bir bilgi giri inde kullanılır
– Sayaç döngünün ne zaman bitece ini belirlemek için
kullanılır
– Sayaç bir belirlenen de ere ula tı ında i lemler bitirilir
8
Algoritmanın düzenlenmesi: Örnek Çalı ma 1
(Sayaç Kontrollü Tekrar)
total de i kenini sıfır yap
grade sayacını bir yap
grade sayacı 10’a e it veya küçük ise
Bir sonraki grade de erini gir
grade de erini total de erine ekle
grade sayacını bir artır
total de erini 10’a bölerek average de erini bul
average de erini ekrana yaz
Fig. 4.6 Sınıf ortalaması probleminin sayaç kontrollü çözümü
1 // Fig. 4.7: [Link]
2 // Class average with counter-controlled repetition.
3
4 using System;
5
6 class Average1
7 {
8 static void Main( string[] args )
9 {
10 int total, // sum of grades
11 gradeCounter, // numbertotal
of grades entered
de i kenini 0 olarak ba lat (initiliaze)
12 gradeValue, // grade value
13 average; // average of all grades
14 gradeCounter de erini 1 olarak ba lat
15 // initialization phase
16 total = 0; // clear total
17 gradeCounter = 1; while
// prepare to loop döngüsü 10 defa çalı ır ve 10
18
19 // processing phase
ö rencinin notunu alır
20 while ( gradeCounter <= 10 ) // loop 10 times
21 {
22 // prompt for input and read grade from user
23 [Link]( "Enter integer grade: " ); grade de eri giri i için kullanıcı beklenir
24
25 // read input and convert to integer
26 gradeValue = [Link]( [Link]() );
27
28 // add gradeValue to total 10 adet grade de eri toplanır
29 total = total + gradeValue;
30 Sayaca 1 eklenir ve 10 dan büyük olunca döngüden çıkılır
31 // add 1 to gradeCounter
32 gradeCounter = gradeCounter + 1;
33 }
9
34
35 // termination phase
36 average = total / 10; // integer division
37
38 // display average of exam grades
39 [Link]( "\nClass average is {0}", average );
40
41 } // end Main total de i kenin de eri 10 ile
42
43 } // end class Average1 bölünür ve ortalam de er bulunur
Sonuç ekrana yazılır
Enter integer grade: 100
Enter integer grade: 88
Enter integer grade: 93
Enter integer grade: 55
Enter integer grade: 68
Enter integer grade: 77
Enter integer grade: 83
Enter integer grade: 95
Enter integer grade: 73
Enter integer grade: 62
Class average is 79
Algoritmanın düzenlenmesi: Örnek Çalı ma 2
(Sentinel Kontrollü Tekrar)
• Sentinel kontrollü tekrar
– stenen sayıda tekrarlanır
– Sentinel de er
• döngüden çıkmayı sa lar
10
Algoritmanın düzenlenmesi: Örnek Çalı ma 2
(Sentinel Kontrollü Tekrar)
total de eri sıfır olarak ba lat
sayacı sıfır olarak ba lat
ilk grade de erini gir (sentinel de er olabilir)
kullanıcı sentinel de er girmediyse
grade de erini total de erine ekle
grade sayacına bir ekle
bir sonraki grade de erini gir (sentinel olabilir)
If sayaç de eri sıfır de ilse
total de erini sayaca bölerek average de erini bul
average de erini ekrana yaz
Else
average de eri girilmedi ini ekrana yaz
Fig. 4.8 Sınıf ortalaması probleminin sentinel kontrollü döngüyle çözümü
1 // Fig. 4.9: [Link]
2 // Class average with sentinel-controlled repetition.
3
4 using System;
5
6 class Average2
7 {
8 static void Main( string[] args )
9 {
10 int total, // sum of grades average de i keni double türünde
11 gradeCounter, // number of grades entered
12 gradeValue; // grade value
tanımlandı
13
14 double average; // average of all grades
15
16 // initialization phase gradeCounter ve total de i kenleri 0
17 total = 0; // clear total
18 gradeCounter = 0; // prepare to loop olarak ba latıldı
19
20 // processing phase
21 // prompt for input and convert to integer
22 [Link]( "Enter Integer Grade, -1 to Quit: " );
23 gradeValue = [Link]( [Link]() );
24 gradeValue de i keni için
kullanıcıdan bir de er alındı
11
25 // loop until a -1 is entered by user gradeValue de i keni -1
26 while ( gradeValue != -1 ) de erinden farklı oldu u
27 {
28 // add gradeValue to total sürece döngüyü çalı tırır
29 total = total + gradeValue;
30 Grade de erlerini toplar
31 // add 1 to gradeCounter
32 gradeCounter = gradeCounter + 1;
33
Ö renci sayısını belirlemek
34 için sayaca bir
// prompt for input and read grade from user ekle
35 // convert grade from string to integer
36 [Link]( "Enter Integer Grade, -1 to Quit: " );
37 gradeValue = [Link]( [Link]() );
38
39 } // end while
40
41 // termination phase Kullanıcının ba ka bir grade
42 if ( gradeCounter != 0 ) de eri girmesi beklenir
43 {
44 average = ( double ) total / gradeCounter;
45 Girilen grade de erinin 0
46 // display average of exam grades
47 [Link]( "\nClass average is {0}", average ); olmadı ı kontrol edilir
48 }
49 else average de eri hesaplanır
50 {
51 [Link]( "\nNo grades were entered" );
52 }
53
54 } // end method Main
55 average de eri ekrana yazılır
56 } // end class Average2
grade de eri girilmediyse
kullanıcı bilgilendirilir
Enter Integer Grade, -1 to Quit: 97
Enter Integer Grade, -1 to Quit: 88
Enter Integer Grade, -1 to Quit: 72
Enter Integer Grade, -1 to Quit: -1
Class average is 85.6666666666667
12
Algoritmanın düzenlenmesi: Örnek Çalı ma 2
( çiçe Kontrollü Tekrar)
• çiçe Kotrol
– Bir kontrol yapısı di erinin içerisinde yer alır
• Çoklu dögü (Multiple loops)
• if deyimleri ile döngüler
Algoritmanın düzenlenmesi: Örnek Çalı ma 2
( çiçe Kontrollü Tekrar)
passes de i kenini sıfır yap
failures de i kenini sıfır yap
student de i kenini bir yap
Ö renci sayacı 10’a e it veya küçükse
Yeni sınav sonucu gir
If ö renci geçtiyse
passes de i kenine bir ekle
Else
failures de i kenine bir ekle
ö renci sayacına bir ekle
Geçen ö renci sayısını ekrana yaz
Kalan ö renci sayısını ekrana yaz
Sekiz ö renciden fazla ö renci geçtiyse
Ekrana “Good results” yaz
Fig. 4.10 Pseudocode ile sınav sonuçları programı
13
1 // Fig. 4.11: [Link]
2 // Analysis of Examination Results.
3
4 using System;
5
6 class Analysis
7 {
8 static void Main( string[] args )
9 { passes ve failures de i kenlerini 0,
10 int passes = 0, // number of passes
11 failures = 0,
ö renci sayacını 1 yap
// number of failures
12 student = 1, // student counter
13 result; // one exam result
14 While döngüsü 10 defa çalı acaktır
15 // process 10 students; counter-controlled loop
16 while ( student <= 10 )
17 {
18 [Link]( "Enter result (1=pass, 2=fail): " );
19 result = [Link]( [Link]() );
20
21 if ( result == 1 )
çiçe if deyimiyle hangi sayaca
22 passes = passes + 1; ekleme yapılaca ı belirlenir
23
24 else
25 failures = failures + 1; Kullanıcı 1 girerse passes
26 de i kenine bir ekle
27 student = student + 1;
28 }
29 Kullanıcı 1 girerse failures de i kenine bir ekle
Toplam ö renci sayısına bir ekle
30 // termination phase
31 [Link]();
32 [Link]( "Passed: " + passes );
33 [Link]( "Failed: " + failures );
34
35 if ( passes > 8 )
36 [Link]( “Good results\n" ); Sonuçları ekrana yaz
37
38 } // end of method Main
39
40 } // end of class Analysis
Toplam geçen sayısı 8’den büyükse
kullanıcıya bildir
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 2
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Passed: 9
Failed: 1
Good results
14
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 2
Enter result (1=pass, 2=fail): 2
Enter result (1=pass, 2=fail): 2
Enter result (1=pass, 2=fail): 2
Enter result (1=pass, 2=fail): 2
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Enter result (1=pass, 2=fail): 1
Passed: 5
Failed: 5
Atama Operatörleri
• Atama operatörleri
– Kod boyutunu azaltabilir
• x += 2 ile x = x + 2 aynıdır
• ++, -=, *=, /=, and %=
15
Atama Operatörleri
!
int c = 3, d = 5,
e = 4, f = 6, g =
12;
+= c += 7 c = c + 7 c 10 olur
-= d -= 4 d = d - 4 d 1 olur
*= e *= 5 e = e * 5 e 20 olur
/= f /= 3 f = f / 3 f 2 olur
%= g %= 9 g = g % 9 g 3 olur
"
Artırma ve Azaltma Operatörleri
• Artırma operatörü
– De i kene bir ekler
– x++ ile x = x + 1 aynıdır
• Azaltma operatörü
– De i kenden bir çıkarır
– y--
• Pre-increment ve post-increment
– x++ veya x--
• Önce i lem yapılır daha sonra de i kene bir eklenir / çıkarılır
– ++x veya --x
• Önce de i kene bir eklenir / çıkarılır daha sonra i lem yapılır
16
Artırma ve Azaltma Operatörleri
++ preincrement ++a Önce a de i keni 1 artırılır daha sonra
yeni de eri kullanılır.
++ postincrement a++ Önce a de i keninin de eri kullanılır daha
sonra bir artırılır.
-- predecrement --b Önce b de i keni 1 azaltılır daha sonra
yeni de eri kullanılır.
-- postdecrement b-- Önce b de i keninin de eri kullanılır daha
sonra bir azaltılır.
"#
1 // Fig. 4.14: [Link]
2 // Preincrementing and postincrementing
3
4 using System;
5
6 class Increment
7 {
8 static void Main(string[] args)
9 {
10 int c; c de i keni tanımlanır
11
12 c = 5; c de i kenine 5 atandı
13 [Link]( c ); // print 5
14 [Link]( c++ ); // print 5 then postincrement
15 [Link]( c ); // print 6
16 Ekrana c (6) olarak yazılır
17 [Link](); // skip a line
18
19 c = 5; c ye 5 atandı
20 [Link]( c ); // print 5 Ekrana c (5) olarak yazıldı
21 [Link]( ++c ); // preincrement then print 6
22 [Link]( c ); // print 6 1 eklendi ve ekrana c (6) olarak yazıldı
23
24 } // end of method Main Ekrana c (6) olarak yazıldı
25
26 } // end of class Increment
5
5
6
5
6
6
17