1 / 95

Kontrol İfadeleri : 2 . Bölüm

5. Kontrol İfadeleri : 2 . Bölüm. Not everything that can be counted counts, and not every thing that counts can be counted. Albert Einstein. Who can control his fate? William Shakespeare. The used key is always bright. Benjamin Franklin.

nero
Download Presentation

Kontrol İfadeleri : 2 . Bölüm

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. 5 • Kontrol İfadeleri: • 2. Bölüm

  2. Not everything that can be counted counts, and not every thing that counts can be counted. Albert Einstein • Who can control his fate? • William Shakespeare • The used key is always bright. • Benjamin Franklin • Intelligence… is the faculty of making artificial objects, especially tools to make tools. • Henri Bergson • Every advantage in the past is judged in the light of the final issue. • Demosthenes

  3. Amaçlar Bu bölümde öğrenilecek konular: • Sayaç kontrollü tekrar yapısının temelleri. • Programdaki ifadeleri tekrarlı olarak işletmek için forvedo…whiletekrar ifadelerinin kullanımı. • switch seçim ifadesini kullanarak çoklu seçim yapılması. • Program kontrol akışının değiştirilmesi için break ve continue program kontrol ifadelerinin kullanılması. • Birleşik (complex) koşul ifadelerini oluşturmak için mantıksal operatörlerin kullanımı. • Eşitlik (==) ve atama (=) operatörlerinin karıştırılmasından doğacak zararlardan sakınma.

  4. 5.1Giriş • 5.2Sayaç Kontrollü Tekrar Yapısının Temelleri • 5.3forTekrar İfadesi • 5.4forİfadesini Kullanan Örnekler • 5.5do…whileTekrar İfadesi • 5.6switchÇoklu-seçim ifadesi • 5.7break and continueİfadeleri • 5.8Mantıksal Operatörler • 5.9Eşitlik (==) ve Atama (=) Operatörleri • 5.10Yapısal Programlama Özeti • 5.11 (Opsiyonel) Yazılım Mühendisliği Çalışması: Nesne durumlarının tanımlanması ve ATM sisteminin yapısı • 5.12Genel Tekrar

  5. 5.1 Giriş • Yapısal programlama incelememize devam edelim. • C++’ın geriye kalan kontrol yapıları : • for, do…while, switch

  6. 5.2 Sayaç Kontrollü Tekrar ‘ın temelleri • Sayaç kontrollü tekrar gereksinimleri: • Kontrol değişkeninin ( döngü sayacının) adı. • Kontrol değişkeninin ilk değeri • Kontrol değişkeninin ulaşması gereken son değere gelip gelmediğinini test eden döngü devamlılık koşulu. • Her tekrarda (adımda) , kontrol değişkeninin artırılması veya azaltılması.

  7. Outline Kontrol değişkeninin adı sayac ‘tır ve ilk değeri 1 dir. fig05_01.cpp (1 of 1) Buradaki koşul, sayac’ın son değerine gelip gelmediğini test eder. Sayac değerini 1 artır

  8. Genel Programlama Hatası 5.1 • Kayan-noktalı sayılar, gerçek sayıları temsil eden birer yaklaşımdır(approximation). Bundan dolayı, sayaç kontrollü döngülerin kayan-noktalı sayılarla kontrol edilmesi doğru olmayan sonuçlara sebep verebilir.

  9. Hatalardan Sakınma İpucu 5.1 • Sayaç kontrollü döngüleri integer değerler ile kontrol edin.

  10. İyi Programlama Örneği 5.1 • Programınızın okunurluğunu artırmak için, her kontrol ifadesinden önce ve sonra birer boş satır bırakın .

  11. İyi Programlama Örneği 5.2 • Çok fazla iç-içe ifadenin(nested) kullanılması programın anlaşılmasını zorlaştırır. İç-içe üç ifadeden daha fazla kullanmamaya çalışın.

  12. İyi Programlama Örneği 5.3 • Kontrol ifadelerinden önce ve sonra birer boş satır bırakılması ve kontrol ifadesinin gövde kısmının girintili yazılması, programa okunurluğu artıran iki-boyutlu bir görünüm kazandırır.

  13. 5.3 forTekrar İfadesi • fortekrar ifadesi • Sayaç kontrollü tekrar yapısının tüm detaylarını tek satırda belirler.

  14. Outline fig05_02.cpp (1 of 1) sayac ‘ı bir artır Buradaki koşul , sayacın son değerine ulaşıp ulaşmadığını kontrol eder. Kontrol değişkeninin adı sayac, ve ilk değeri 1 dir.

  15. Genel Programlama Hatası 5.2 • İlişki operatörünün (< > <= != vb.) yanlış kullanılması , ya da while/for ifadelerinde döngü devamlılık koşulunda son değerin yanlış belirlenmesi bir-fazlalık/eksiklik hatasına neden olabilir. • Örn : 1 .. 5 için (sayac=1 ; sayac < 5 ; sayac++) ifadesi yanlış olacaktır. • Bunun yerine ; • (sayac=1 ; sayac < 6 ; sayac++) • Ya da ; • (sayac=1 ; sayac <=5 ; sayac++)

  16. Fig. 5.3| forifadesi başlığının bileşenleri.

  17. İyi programlama örneği 5.4 • while ya da for ifadelerinin döngü-devamlılık koşullarında döngü sayacının ulaşacağı son değerin belirlenmesi ve <= ilişki operatörünün kullanılması “bir fazlalık/eksiklik hatası” nı önlemeye yardımcı olur. • Örneğin, 1 den 10 a kadar olan sayıları ekrana yazdıran bir döngüde, döngü-devamlılık koşulu "sayac < 10" yerine "sayac <= 10" ya da "sayac < 11 " olmalıdır. • Birçok programcı sıfır-tabanlı saymayı tercih eder. Bu durumda,döngü içinde 10 işlem yapılması istendiğinde sayac'ın başlangıc değeri 0 , ve döngü-devamlılık koşulu da "sayac < 10" olarak belirlenmelidir.

  18. 5.3 forTekrar İfadesi (Devam.) • for ifadesinin genel yapısı • for ( ilk değer atama; döngü-devamlılık koşulu; artırma)ifade; • Bu ifadeyi while ile yazacak olursak: • İlk değer atama;while ( döngü-devamlılık koşulu) {ifade;artırma; } • Eğer kontrol değişkeni ilk değer atama bölümünde tanımlandıysa, bu değişken for ifadesinin dışında kullanılamaz.

  19. Genel Programlama Hatası 5.3 • for ifadesinin kontrol değişkeni “ilk değer atama” bölümünde tanımlanmış ise, bu değişkenin for döngüsünün vücut bölümünün dışında kullanılması derleme hatasına sebep olur . • Örn: • for(int sayac=0;sayac<=10;sayac++) { • .... • //sayac burada kullanılabilir • } • //sayac burada kullanılamaz ! Derleme Hatası.

  20. Uyumluluk İpucu 5.1 • -

  21. İyi Programlama Örneği 5.5 • Kontrol değişkeni ile alakalı ifadeleri for ifadesinin ilk-değer-atama veya artırma bölümlerine yerleştirin. Diğer değişkenler üzerinde yapılacak değişiklikler ya döngüden önce ( sadece bir kere işletilecek ifadeler: ilk değer atama ifadeleri gibi.) ya da döngü vücudunda (her tekrarda <adımda> işletilecek ifadeler: artırma ya da azaltma işlemleri gibi) yapılmalıdır. • int carpan; • for ( i=0;i<100;i++){ • carpan = 100; //Bu ifadeyi döngüden önce yazın. • Cout << “Sonuc :”<< carpan*i <<endl; • }

  22. 5.3 forTekrar İfadesi (Devam.) • İlk değer atama ve artırma ifadeleri, virgül ile ayrılmış liste halinde verilebilir. Örn : for( x=0 , y=10 ; x < 10 ; x++ , y-- ) • Bu virgüller , virgül operatörleridir. • Virgül operatörleri, diğer operatörler arasında en düşük önceliğe sahiptir. • İfadeler soldan sağa doğru işletilir. • Tüm listenin değeri ve tipi, en sağdaki ifadenin değeri ve tipidir.

  23. Genel Programlama Hatası 5.4 • for başlığında gerekli olan iki noktalı-virgülün(;) yerine virgülün kullanılması bir yazım hatasıdır. • Örnek : • for( x=0 , x < 10 , x++ )

  24. Genel Programlama Hatası 5.5 • For başlığının sağ parantezinin “ ) “ ardından noktalı virgül konulması, for ifadesinin gövdesindeki ifadelerin işletilmemesine yol açar. Bu genellikle bir mantık hatasıdır.

  25. Yazılım Mühendisliği Görüşü 5.1 • Bazen döngü gecikmesi oluşturmak için for ifadesinin başlığından hemen sonra noktalı virgül konulur. Gövdesinde hiçbir işlem bulunmayan bu çeşit bir döngü, sayma işleminden başka hiç birşey yapmadan belirlenen sayıda döner. Örneğin , programımızın ekrana bir sayfa yazı yazması ve okunması için bir süre bekledikten sonra diğer sayfayı yazması gerekiyor. Sayfa geçişlerini yavaşlatmak için bu tip bir gecikme yöntemi kullanılabilir. • Not: Bu tip bir yavaşlatmanın süresi bilgisayarın işlemci hızına göre bilgisayardan bilgisayara farklılık gösterir. Bir bilgisayarda 1 dakika bekleyen program daha hızlı olan diğer bilgisayarda 5 saniye bekleyebilir.

  26. Hatadan Sakınma İpucu 5.2 • Kontrol değişkeninin değeri for ifadesinin gövdesinde değiştirilebilmesine rağmen, bunu yapmaktan sakının. Çünkü, bu durum güç farkedilebilen mantık hatalarına debep olabilir.

  27. Fig. 5.4| Fig. 5.2 deki for ifadesi için UML akış diyagramı.

  28. 5.4 for İfadesini kullanan örnekler • forifadesi örnekleri • Kontrol değişkenini 1 den 100’ e kadar 1 ‘er artırarak değiştir. • for ( int i = 1; i <= 100; i++ ) • Kontrol değişkenini 100 den 1’ e kadar 1 ‘er azaltarak değiştir. • for( int i = 100; i >= 1; i-- ) • Kontrol değişkenini 7 den 77 ye kadar 7 şer artırarak değiştir. • for( int i = 7; i <= 77; i += 7 ) • Kontrol değişkenini 20 den 2 ye kadar 2 şer azaltarak değiştir. • for( int i = 20; i >= 2; i -= 2 ) • Kontrol değişkenini : 2, 5, 8, 11, 14, 17, 20şeklinde değiştir. • for( int i = 2; i <= 20; i += 3 ) • Kontrol değişkenini : 99, 88, 77, 66, 55, 44, 33, 22, 11, 0şeklinde değiştir. • for( int i = 99; i >= 0; i -= 11 )

  29. Genel Programlama Hatası 5.6 • Aşağı doğru sayan bir döngünün döngü-devamlılık koşulundaki ilişki operatörünün doğru kullanılmaması ( örn : yukarıdan 1’e doğru inen bir döngüde i>=1 yerine i<=1 kullanılması) , genellikle yanlış sonuçlar doğuran mantık hatalarına neden olur.

  30. Outline fig05_05.cpp(1 of 1) “sayi” ‘yı 2 den 20 ye kadar 2 şer artır. “sayi” ‘nın şu anki değerini toplam ‘a ekle.

  31. 5.4 for İfadesini Kullanan Örnekler (Devam.) • Virgülle ayrılmış ifadeler listesinin kullanımı. • Fig. 5.5 deki 12 ve 13. satırlar aşağıdaki biçimde yazılabilir : for ( intsayi = 2; // ilk değer atamasayi <= 20; // döngü-devamlılık koşulutoplam += sayi, sayi += 2 ) // toplam ve // artırma ; // boş ifade (Hiçbir işlem yapma)

  32. İyi Programlama Örneği 5.6 • for ifadesinden önce gelen ifadeler ve for ifadesinin vücudundaki ifadeler for başlığının içine yerleştirilebilirler, fakat bu işlem programın okunmasını , değiştirilmesini , devamlılığının sağlanmasını ve hataların giderilmesini zorlaştırır.

  33. İyi Programlama Örneği 5.7 • Eğer mümkünse, kontrol ifadelerinin (for,while) başlık bölümlerini tek satırda belirtin. • for ( x=0; • x<=10; • x++) • Yerine • for (x=0 ; x<=10; x++)

  34. 5.4 for İfadesini Kullanan Örnekler (Devam.) • std::powstandart kütüphane fonksiyonu • Üs hesaplar • Örnek • pow( x, y ) • X ‘in Y ‘nci kuvetini alır. xy • <cmath> Kütüphane dosyasını gerektirir.

  35. Outline setwstream değiştiricisi bir alan genişliği atayacak. fig05_06.cpp (1 of 2) powstardart kütüphane fonksiyonu<cmath> kütüphane dosyası içerisindedir. C++ kayan-noktalı sayıları double olarak tanır. Bir sonraki çıktı, (“Para miktarı”) 21 karakterlik alanda sağdan sola doğru yazılacaktır.

  36. Outline For ifadesi içerisinde miktarı hesapla fig05_06.cpp (2 of 2) Alan genişliğini ayarlamak için setw stream değiştiricisini kullan 21 karakter

  37. Genel Programlama Hatası 5.7 • Genel olarak, standart kütüphane fonksiyonlarını kullanırken ona uygun olan kütüphane dosyasının eklenmesinin unutulması bir derleme hatasıdır.( Örn: matematik ile ilgili fonksiyonları kullanırken <cmath> kütüphanesi)

  38. İyi Programlama Örneği 5.8 • Para ile ilgili hesaplamalarda float ya da double tipindeki değişkenleri kullanmayın. Kayan-noktalı sayıların gerçek sayılardan farklılığı hatalı sonuçlara sebep olabilir. Örneklerde parasal hesaplamaların integer kullanarak nasıl yapıldığı anlatılmaktadır. • Not: Bazı sağlayıcılar para ile ilgili hesaplamalarda kesin sonuçlar veren • kütüphaneler satmaktadırlar. Bunlardan bazılarının internet adresleri Appendix I da verilmiştir.

  39. 5.4 for İfadesini Kullanan Örnekler (Cont.) • Sayısal çıktıların düzenlenmesi • Setw Fonksiyonu • Alan genişliğini ayarlar • Varsayılan olarak sağa dayalıdır. • Sadece bir sonraki çıktı değerine etki eder. • fixedvesetprecisionkomutları • Ayarlar kalıcıdır • Bir sonraki değişikliğe kadar geçerliliklerini sürdürürler.

  40. Performans İpucu 5.1 • Değeri değişmeyecek olan ifadeleri( değişkenleri) döngülerin içerisinde tanımlamayın. Bunu yapsanız bile günümüzün akıllı derleyicileri optimizasyon sağlamak için kaynak kodunu makina diline çevirirken bu tip ifadeleri döngü dışına taşıyacaktır. • Örn : for ( i=0;i<100;i++){ • int carpan = 100; // Bu ifadeyi döngünün dışında tanımlayın. Cout << “Sonuc :”<< carpan*i <<endl; • }

  41. Performans İpucu 5.2 • Günümüzde birçok derleyici yazdığınız kodun performansını artırmak amacıyla optimizasyon(en iyi hale getirme) yaparlar. Fakat, siz yine de kodunuzu yazarken performans faktörünü göz önünde bulundurun.

  42. 5.5 do…whileDöngü İfadesi • do…whileifadesi • whileifadesine benzer • Döngü devamlılık koşulu testini döngü vücudunun sonunda gerçekleştirir. • Döngü vücudundaki kodlar en az bir kere işletilecektir.

  43. İyi Programlama Örneği 5.9 • do ... while döngüsünde küme parantezlerinin kullanımı, tek ifade içeren while ile do...while ifadelerinin karıştırılmasını engeller. • do • counter++; • while(counter==50); • counter--; • while(counter>40) • counter--; • do • counter--; • while(counter>10); • while(counter<40) • counter++;

  44. Outline Kontrol değişkeni sayac’ı tanımla ve ilk değerini ata. fig05_07.cpp(1 of 1) do…whiledöngüsü sayac’ın değerini sayac-devamlılık koşulunu test etmeden önce görüntüler.

  45. 5.6 switchÇoklu seçim ifadesi • switchifadesi • Çoklu seçim için kullanılır • Bir değişken ya da ifadeyi test eder. • Yapacağı işleme karar verirken , karşılaştırma için sabit tamsayı değerleri kullanır • Sabit bir tamsayı değeri ile karşılaştırılan herhangi bir karakter ya da tamsayı değeri

  46. Outline fig05_09.cpp(1 of 1) Her not kategorisi için not sayaç değişkeni.

  47. Outline fig05_10.cpp(1 of 5) Tüm sayaç değerlerine ilk değer olarak 0 ver.

  48. Outline fig05_10.cpp(2 of 5)

  49. Outline Döngü koşulu, daha fazla veri girişi olup olmadığını belirlemek için cin.get fonksiyonunu kullanır. fig05_10.cpp(3 of 5) switchifadesi hangi case (durum) etiketinin çalıştırılacağını buradaki ifadeye bakarak belirler. Kontrol edilecek değer not ‘dur. A notu etiketi Break ifadesi kontrolü switch ifadesinin sonuna iletir.

  50. Outline fig05_10.cpp(4 of 5) Whitespace karakterleri görmezden gel ve herhangi bir hata mesajı görüntüleme defaultdurumu geçersiz karakterler içindir.

More Related