1 / 81

Bölüm 2 – Kontrol Yapıları

Outline 2.1 Giriş 2.2 Algorit malar 2.3 Pseudocode 2.4 Kontrol Yapıları 2.5 if Seçim Yapısı 2.6 if/else Seçim Yapısı 2.7 while Tekrar Yapısı 2.8 Algoritma Formülasyonu : Durum 1 ( Sayaç kontrollu tekrar )

trista
Télécharger la présentation

Bölüm 2 – Kontrol Yapıları

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Outline 2.1 Giriş 2.2 Algoritmalar 2.3 Pseudocode 2.4 Kontrol Yapıları 2.5 if Seçim Yapısı 2.6 if/else Seçim Yapısı 2.7 while Tekrar Yapısı 2.8 Algoritma Formülasyonu: Durum 1 (Sayaç kontrollu tekrar) 2.9 Algoritma Formülasyonu:Tepeden aşağı adımsal sadeleştirme: Durum 2 (Sentinel-kontrollü tekrar) 2.10 Algoritma Formülasyonu:Tepeden aşağı adımsal sadeleştirme: Durum 3 (içiçe kontrol yapıları) 2.11 Atama Operatörü 2.12 Artırma ve Azaltma opratörü 2.13 Sayaç kontrollü yapının özellikleri 2.14 for Tekrar yapısı 2.15 for yapısı ile örnekler Bölüm 2 – Kontrol Yapıları

  2. Bölüm 2 – Kontrol Yapıları Outline 2.16 switch Çoklu seçim yapısı 2.17 do/while Tekrar Yapısı 2.18 break and continue Deyimleri 2.19 Mantık (Lojik) Operatörleri 2.20 Eşitlik (==) ve Atama (=) Operatörlerinin karıştırılması 2.21 Yapısal-Programlama Özeti

  3. 2.1Giriş • Bir program yazmadan önce • Problem iyi anlaşılmalı • Çözüm için dikkatli bir plan yapılmalı • Bir programı yazarken • Çözüm bloklara ayrılıp, blokların içinde ne olacağı iyi belirlenmeli • İyi programlama prensipleri kullanılmalı

  4. 2.2 Algoritmalar • Hesaplama işlemleri • Sırayla birtakım hesaplar yapılarak asıl problem çözülür • Algoritma • Yürütülecek işlemleri belirler • İşlemlerin sırasını belirler • Örnek: reçete • Program kontrolü • O sırada hangi işlemin yürütüleceğini belirler

  5. 2.3 Pseudocode • Pseudocode • Yapay, informal dil,algoritma geliştirmek için kullanılır. • Konuşma ingilizcesine benzer. • Bilgisayarda çalıştırılamaz • Program kodunu yazmadan programı tasarlamaya yarar • Kolayca C++ programına çevrilir. • Sadece yürütülecek deyimler yazılır • Değişken tanımlamaya gerek yoktur

  6. 2.4 Kontrol yapıları • Sıralı yürütme • Deyimler sırayla yürütülür • Kontrol transferi • Sıradaki deyimin değilde başka deyimin çalıştırılmasını sağlar • 3 kontrol yapısı (Bohm ve Jacopini) • Sıralı yapı • Programlar yürütülürken içindeki sıra takip edilir • Seçim yapısı • if, if/else, switch • Tekrar yapısı • while, do/while, for

  7. 2.4 Kontrol yapıları • C++ keywords • Değişken ismi olarak kullanılamazlar

  8. 2.4 Kontrol yapıları • Akış Diyagramı • Algoritmanın grafiksel gösterimi • Bazı şekillerin oklarla birleştirilmesinden oluşur • Dikdörtgen (işlem) • Herhangi bir işlem • Oval şekil • Programın başlangıç veya bitişini gösterir, daire şekli bölüm başlangıcını veya bitişini gösterir

  9. 2.5 if Yapısı • Seçim Yapısı • Karşılaştırmanın sonucuna göre farklı işlemleri yapmayı sağlar • Pseudocode örneği: Eğeröğrencinin notu 60 dan büyük veya eşitse “Geçti” yaz • Eğer koşul doğru ise (true) • Yazdırma işlemi yapılır, program bir sonraki komuttan devam eder. • Eğer koşul yanlış ise (false) • Yazdırma işlemi atlanıp diğer komuttan devam edilir. • Boşluklar programın okunmasını kolaylaştırır • C++ da boşlukların etkisi olmaz

  10. 2.5 if Yapısı • Örnek Pseudocode’un C++ a çevrilmesi Eğeröğrencinin notu 60 dan büyük veya eşitse “Geçti” yaz if ( not >= 60 ) cout << “Geçti"; • Baklava şekli • Karar verme işlemi yapılacağını gösterir • Doğru veya yanlış olabilen bir önerme içerir • Koşul test edilip uygun yol takip edilir. • ifyapısı • Tek giriş / tek çıkış

  11. 2.5 if Yapısı • Örnek pseudocode ‘un akış diyagramı Herhangi bir ifadeye göre de karar verilebilir sıfır - yanlış(false) Sıfırdan farklı – doğru (true) Örnek: 3 - 4true

  12. 2.6 if/elseYapısı • if • Eğer koşul doğruysa ilgili komutu çalıştırır • if/else • Koşul doğruysa ilgili komutu, yanlışsa başka komutu çalıştırır • Pseudocode Eğeröğrencinin notu 60 dan büyük veya eşitse “Geçti” yaz else “Kaldı” yaz • C++ kodu if ( not >= 60 ) cout << “Geçti";else cout << “Kaldı";

  13. Koşul Doğruysa yapılacak Yanlışsa yapılacak 2.6 if/elseYapısı • Üçlü karşılaştırma operatörü (?:) • Üç argümanı vardır (koşul, doğruysa yapılacak işlem, yanlışsa yapılacak işlem) • Kod aşağıdaki gibi olur: cout << ( not >= 60 ? “Geçti” : “Kaldı” );

  14. 2.6 if/elseYapısı

  15. 2.6if/elseYapısı • içiçeif/elseyapısı • Birçok durum birden test edilir • if koşulu doğruysa, else’deki komut atlanır if öğrenci notu 90 dan büyük veya eşitse “A” yaz else if öğrenci notu80 den büyük veya eşitse“B” yaz else if öğrenci notu70 den büyük veya eşitse Print “C” else if öğrenci notu60 dan büyük veya eşitse Print “D” else Print “F”

  16. 2.6if/elseYapısı • Örnek if ( notu >= 90 ) // 90 ve üstü cout << "A";else if ( notu >= 80 ) // 80-89 cout << "B";else if ( notu >= 70 ) // 70-79 cout << "C"; else if ( notu >= 60 ) // 60-69 cout << "D";else // 60 dan az cout << "F";

  17. 2.6if/elseYapısı • Birleşik deyim • Komutların küme içinde guruplanması if ( notu >= 60 ) cout << “Gecti.\n"; else { cout << “Kaldı.\n"; cout << “Bu dersi yeniden almak zorundasın.\n";} • Küme parantezi olmasaydı, cout << " Bu dersi yeniden almak zorundasın.\n"; Her zaman çalıştırılacaktı. • Blok • Küme parantezleri ile bloklanmış bir grup komutdan oluşur.

  18. 2.7 while yapısı • Tekrar yapısı • Bir koşul doğru kaldığı sürece aynı işlemler tekrar tekrar yapılır. • Psuedocode while alışveriş listem bitmediği sürece devam et listede sırası geleni al ve üzerini çiz • whiledöngüsü koşul yanlış olana kadar devam eder • Örnek int carpim = 2; while ( carpim <= 1000 ) carpim = 2 * carpim;

  19. 2.7 while yapısı

  20. 2.8 sayaç kontrollü döngü • Sayaç kontrollü döngü • Sayaç belli bir sayıya ulaşana kadar döngü tekrar edilir • Kesin döngü • Döngü sayısı bilinir. • Örnek 10 öğrencinin katıldığı bir quizde notlar 0 ile 100 arasındadır. Quizin ortalamasını bulunuz.

  21. 1 // Fig. 2.7: fig02_07.cpp 2 // sayac kontrollu döngü ile ortalama bulman program. 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 10 int main() 11 { 12 int toplam; // girilen notların toplamı 13 intsayac; // notların sayacı 14 intnotu; // öğrencinin notu 15 intortalama; // notların ortalaması 16 17 18 toplam = 0; 19 sayac = 1; 20 fig02_07.cpp(1 of 2)

  22. 21 22 while ( sayac <= 10 ) { // 10 kere dönecek 23 cout << “Notu girin: "; 24 cin >> notu; // kullanıcıdan not okunur 25 toplam = toplam + notu; 26 sayac = sayac + 1; // sayac bir arttırılır 27 } 28 29 30 ortalama = toplam / 10; // tamsayı bölme 31 32 // sonucun görüntülenmesi 33 cout << “Sınıf ortalaması : " << ortalama << endl; 34 35 return0; 36 37 } fig02_07.cpp(2 of 2)fig02_07.cppoutput (1 of 1) Notu girin: 98 Notu girin: 76 Notu girin: 71 Notu girin: 87 Notu girin: 83 Notu girin: 90 Notu girin: 57 Notu girin: 79 Notu girin: 82 Notu girin: 94 Sınıf ortalaması :81

  23. 2.9 Gözcü kontrollü döngü • Problemi değiştirelim: Not ortalaması bulan programı sayısı belli olmayan öğrenciler için hesaplayacak şekilde yazın. • Öğrenci sayısı belli değil • Program son öğrenci girildiğini nasıl anlayacak? • Gözcü değer • Bilgi girişinin sonuna gelindiğini gösterir. • Gözcü değer girildiğinde döngü durur • Giriş değerleri ile karıştırılmayacak bir gözcü değer seçilir. • Bu problem için -1

  24. 2.9 Gözcü kontrollü döngü • Programların genelde üç bölümü vardır • Başlangıç • Program değişkenlerine ilk değerleri verilir • İşlem • Bilgi girişi, değişkenlerin ayarlanması,döngülerin kurulması • Son • Hesaplamaların yapılmasıve sonucun ekrana yazılması

  25. 1 // Fig. 2.9: fig02_09.cpp 2 // Gözcü kontrolü ile ortalama hesaplanması 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 using std::fixed; 9 10 #include <iomanip> // parameterized stream manipulators 11 12 using std::setprecision; // ekrana yazdırırken formatın ayarlanması 13 14 15 int main() 16 { 17 int toplam; //notların toplamı 18 intsayac; // not sayacı 19 intnotu; // öğrencinin notu 20 21 doubleortalama; // ortalama (gerçel sayı olarak) 22 23 // başlangıç 24 toplam = 0; 25 sayac = 0; fig02_09.cpp(1 of 3)

  26. 26 27 // işlem bölümü 28 // ilk notun kullanıcıdan alınması 29 cout << “Notu girin, cıkıs icin -1 : "; 30 cin >> notu; 31 32 // gözcü değer girilene kadar tekrar eden döngü 33 while ( notu != -1 ) { 34 toplam = toplam + notu; 35 sayac = sayac + 1; 36 37 cout << " Notu girin, cıkıs icin -1 : "; 38 cin >> notu; // sıradaki not 39 40 } // while sonu 41 42 // son bölüm 43 // eğer kullanıcı en azından bir not girdiyse ... 44 if ( sayac != 0 ) { 45 46 // girilen tüm notların ortalamasının bulunması 47 ortalama = static_cast< double >( toplam ) / sayac; 48 static_cast<double>()toplamı geçici olarak double olarak alır İki tamsayının bölünmesi durumunda ondalık kısmı silinir sayacdeğişkeniint olmasına rağmen bu kezdouble olarak alınır. fig02_09.cpp(2 of 3)

  27. 49 // ortalamanın virgülden sonra iki hane ile gösterilmesi 50 cout << “Sınıf ortalaması : " << setprecision( 2 ) 51 << fixed<< ortalama << endl; 52 53 } // if/else ‘ in if kısmının sonu 54 55 else// hiç not girilmediyse, mesaj yazılır 56 cout << “Hiç not girlmedi.." << endl; 57 58 return0; 59 60 } fixedsonucun sabit noktalı formatta verilmesini sağlar (bilimsel gösterimde değil). Fixed<iostream>in içindedir setprecision(2)noktadan sonra 2 rakam yazılmasını sağlar. Yuvarlanmıştır. Setprecision ı kullanmak için<iomanip>include edilmelidir fig02_09.cpp(3 of 3)fig02_09.cppoutput (1 of 1) Notu girin, cıkıs icin -1 : 75 Notu girin, cıkıs icin -1 : 94 Notu girin, cıkıs icin -1 : 97 Notu girin, cıkıs icin -1 : 88 Notu girin, cıkıs icin -1 : 70 Notu girin, cıkıs icin -1 : 64 Notu girin, cıkıs icin -1 : 83 Notu girin, cıkıs icin -1 : 89 Notu girin, cıkıs icin -1 : -1 Sınıf ortalması : 82.50

  28. 2.10 İçiçe kontrol yapıları • Problem Bir sınıfın test sonuçları geçti-kaldı şeklindedir ve 10 öğrenci için analiz yapılacaktır. (1 = geçti, 2 = kaldı) Sonuçları analiz eden bir program yazın. Eğer 8 den fazla öğrencigeçtiyse “Maaşı yükselecek“ yazılacaktır. • Dikkat edilecekler • Programda 10 öğrencinin sonucu işlenecek • Sabit sayı, sayac kontrollü döngü kullanılacak • İki sayac kullanılacak • Biri geçenler için • Diğeri kalanlar için • Her test sonucu 1 veya 2 dir • Eğer 1 değilse 2 kabul edilir.

  29. 2.10 İçiçe kontrol yapıları 10 test sonucunu gir ve geçenleri kalanları say (While)öğrenci sayacı 10 dan küçük ve eşit ikenBir sonraki test sonucunu girin (If)Eğer öğrenci geçtiyse Geçenler sayacına bir ekle(Else)değilse Kalanlar sayacına bir ekle Öğrenci sayacına bir ekle

  30. 1 // Fig. 2.11: fig02_11.cpp 2 // Test sonuçları analizi. 3 #include <iostream> 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 10 int main() 11 { 12 13 int gecen = 0; // geçenlerin sayısı 14 int kalan = 0; // kalanların sayısı 15 int ogrenci = 1; // öğrenci sayacı 16 int sonuc; // test sonucu 17 18 // sayac kontrollü döngü kullanarak 10 sonuc incelenecek 19 while ( ogrenci <= 10 ) { 20 21 // mesaj yazıp kullanıcıdan test sonucu iste 22 cout << “Sonucu girin (1 = gecti, 2 = kaldı): "; 23 cin >> sonuc; 24 fig02_11.cpp(1 of 2)

  31. 25 // sonuc 1 ise, gecen sayacı artacak 26 if ( sonuc == 1 ) // while içinde if/else 27 gecen = gecen + 1; 28 29 else// Eğer sonuc 1 değilse kalan artacak 30 kalan = kalan + 1; 31 32 // öğrenci sayacı bir artacak ki 10 olduğunda döngü sona ersin 33 ogrenci = ogrenci + 1; 34 35 } // while’ın sonu 36 37 // gecen ve kalan sayaclarının ekrana yazdırılması 38 cout << “Gecti " << gecen << endl; 39 cout << “Kaldi " << kalan << endl; 40 41 42 if ( gecen > 8 ) 43 cout << “Maasi yukseltilecek " << endl; 44 45 return0; 46 47 } fig02_11.cpp(2 of 2)

  32. Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 2 Sonucu girin (1 = gecti, 2 = kaldı): 2 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 2 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 2 Gecti 6 Kaldi 4 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 2 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Sonucu girin (1 = gecti, 2 = kaldı): 1 Gecti 9 Kaldi 1 Maasi yukseltilecek fig02_11.cppoutput (1 of 1)

  33. 2.11 Atama operatörleri • Atama ifadesinin kısa yazılması • Toplama atama operatörü c = c + 3; Kısaltılmış atama c += 3; • Kısaltmanın formatı değişken = değişken operatör ifade; Kısaltılmış ifade: değişken operatör= ifade; • Diğer atama opratörleri d -= 4 (d = d - 4) e *= 5 (e = e * 5) f /= 3 (f = f / 3) g %= 9 (g = g % 9)

  34. 2.12 Artırma ve azaltma operatörleri • Artırma operatörü (++), c+=1yerine kullanılabilir • Azaltma operatörü (--), c-=1 yerine kullanılabilir • Ön artırma • Değişkenin önüne operatör yazılır (++cveya--c) • Önce değişken artırılır sonra işleme konur. • Son artırma • Operatör değişkenden sonra yazılır (c++veyac--) • Önce işlem yapılır sonra değişken artırılır.

  35. 2.12 Artırma ve azaltma operatörleri • Artırma operatörü (++) • Değişkeni bir artırır • c++ • c+=1 ile aynıdır • Azaltma operatörü (--) • Değişkeni bir azaltır • c-- • C-=1 ile aynıdır

  36. 2.12 Artırma ve azaltma operatörleri • Eğerc = 5, ise • cout << ++c; • cnin değeri6oldu, şimdi yazılır • cout << c++; • önce5olur (coutartırmadan önce çalıştırılır). • csonra 6olur

  37. 2.12 Artırma ve azaltma operatörleri • Değişken işlem içinde değilse • Ön artırma ve son artırma etkisi aynıdır ++c; cout << c; ve c++; cout << c; aynıdır

  38. 1 // Fig. 2.14: fig02_14.cpp 2 // Ön artırma ve son artırma. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 9 int main() 10 { 11 int c; 12 13 // son artırma 14 c = 5; // c ye 5 atama 15 cout << c << endl; // print 5 16 cout << c++ << endl; // print 5 sonra artır 17 cout << c << endl << endl; // print 6 18 19 // ön artırma 20 c = 5; // c ye 5 atama 21 cout << c << endl; // print 5 22 cout << ++c << endl; // önce artır sonra print 6 23 cout << c << endl; // print 6 fig02_14.cpp(1 of 2)

  39. 24 25 return0; 26 27 } fig02_14.cpp(2 of 2)fig02_14.cppoutput (1 of 1) 5 5 6 5 6 6

  40. 2.13 Sayac kontrollü döngülerin kuralları • Sayac kontrollü döngüde olması gerekenler • Sayac ismi • Sayacın ilk değeri • Sayacın son değerini test eden koşul • Döngü sırasında sayacın artırılması veya azaltılması

  41. 1 // Fig. 2.16: fig02_16.cpp 2 // Sayac kontrollü döngü 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 9 int main() 10 { 11 intsayac = 1; // ilk değer 12 13 while ( sayac <= 10 ) { // sayac son değer koşulu 14 cout << sayac << endl; // sayacı ekrana yaz 15 ++sayac; // sayacın arttırılması 16 17 } // while sonu 18 19 return0; 20 21 } fig02_16.cpp(1 of 1)

  42. 1 2 3 4 5 6 7 8 9 10 fig02_16.cppoutput (1 of 1)

  43. 2.13 Sayac kontrollü döngülerin kuralları • Tanımlamanın sağladıkları int sayac = 1; • isimverilmesi sayac • sayacın ‘integer’ olması • sayac için bellekte yer ayrılması • sayac ailk değer olarak1verilmesi

  44. 2.14 for döngüsü • fordöngüsünün genel formatı for ( ilk deger; döngü devam koşulu;artım ) ifade; • Örnek for( int c = 1; c <= 10; c++ ) cout << c << endl; • 1den 10 a kadar olan sayıları yazar. For satırının sonuna ; konulmaz

  45. 1 // Fig. 2.17: fig02_17.cpp 2 // Sayaç kontrollü döngü. for ile. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int main() 9{ 10for ( int c = 1; c <= 10; c++ ) 11 cout << c << endl; 12 13return0; 14 15} fig02_17.cpp(1 of 1)

  46. 1 2 3 4 5 6 7 8 9 10 fig02_17.cppoutput (1 of 1)

  47. 2.14 for döngüsü • fordöngüleriwhileile yazılabilir İlk değer; while ( Döngü devam koşulu){ ifade artım; } • İlk değer ve artım • Birden fazla değişken için virgül ayıracı kullanılır for (int i = 0, j = 0; j + i <= 10; j++, i++) cout << j + i << endl;

  48. 2.14 for döngüsü

  49. 1 // Fig. 2.20: fig02_20.cpp 2 // for ile toplama. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 int main() 10 { 11 int toplam = 0; 12 13 for ( int num = 2; num <= 100; num += 2 ) 15 toplam += num; 16 17 cout << “Toplam : " << toplam << endl; 18 return0; 19 20 } fig02_20.cpp(1 of 1)fig02_20.cppoutput (1 of 1) Toplam : 2550

  50. 2.15 for ile örnekler • Birleşik faiz hesabı • Bir kişi hesabına %5 faiz ile 1000.00 $ koyuyor. Her yıl için biriken faizi ekrana yazarak 10 yıllık bir tablo yazınız. Faiz hesabı için aşağıdaki formül kullanılacaktır. a = p(1+r) • panapara • ryıllık faiz oranı • nyılları gösteren sayac • aanaparaya faiz eklendikten sonran.yıldakidurum n

More Related