Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

 2006 Pearson Education, Inc. All rights reserved. 1 5 5 Kontrol İfadeleri: 2. Bölüm.

Benzer bir sunumlar


... konulu sunumlar: " 2006 Pearson Education, Inc. All rights reserved. 1 5 5 Kontrol İfadeleri: 2. Bölüm."— Sunum transkripti:

1  2006 Pearson Education, Inc. All rights reserved. 1 5 5 Kontrol İfadeleri: 2. Bölüm

2  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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 for ve do…while tekrar 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  2006 Pearson Education, Inc. All rights reserved. 4 5.1 Giriş 5.2 Sayaç Kontrollü Tekrar Yapısının Temelleri 5.3 for Tekrar İfadesi 5.4 for İfadesini Kullanan Örnekler 5.5 do … while Tekrar İfadesi 5.6 switch Çoklu-seçim ifadesi 5.7 break and continue İfadeleri 5.8 Mantıksal Operatörler 5.9 Eşitlik ( == ) ve Atama ( = ) Operatörleri 5.10 Yapı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.12 Genel Tekrar

5  2006 Pearson Education, Inc. All rights reserved. 5 5.1 Giriş Yapısal programlama incelememize devam edelim. – C++’ın geriye kalan kontrol yapıları : for, do … while, switch

6  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 7 Outline fig05_01.cpp (1 of 1) Kontrol değişkeninin adı sayac ‘tır ve ilk değeri 1 dir. Buradaki koşul, sayac’ın son değerine gelip gelmediğini test eder. Sayac değerini 1 artır

8  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 9 Hatalardan Sakınma İpucu 5.1 Sayaç kontrollü döngüleri integer değerler ile kontrol edin.

10  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 13 5.3 for Tekrar İfadesi for tekrar ifadesi – Sayaç kontrollü tekrar yapısının tüm detaylarını tek satırda belirler.

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

15  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 16 Fig. 5.3 | for ifadesi başlığının bileşenleri.

17  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 18 5.3 for Tekrar İ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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 20 Uyumluluk İpucu 5.1 -

21  2006 Pearson Education, Inc. All rights reserved. 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 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  2006 Pearson Education, Inc. All rights reserved. 22 5.3 for Tekrar İ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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 27 Fig. 5.4 | Fig. 5.2 deki for ifadesi için UML akış diyagramı.

28  2006 Pearson Education, Inc. All rights reserved. 28 5.4 for İfadesini kullanan örnekler for ifadesi ö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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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 ( int sayi = 2; // ilk değer atama sayi <= 20; // döngü-devamlılık koşulu toplam += sayi, sayi += 2 ) // toplam ve // artırma ; // boş ifade (Hiçbir işlem yapma)

32  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 34 5.4 for İfadesini Kullanan Örnekler (Devam.) std::pow standart kütüphane fonksiyonu – Üs hesaplar – Örnek pow( x, y ) – X ‘in Y ‘nci kuvetini alır. x y – Kütüphane dosyasını gerektirir.

35  2006 Pearson Education, Inc. All rights reserved. 35 Outline fig05_06.cpp (1 of 2) C++ kayan-noktalı sayıları double olarak tanır. setw stream değiştiricisi bir alan genişliği atayacak. pow stardart kütüphane fonksiyonu kütüphane dosyası içerisindedir. Bir sonraki çıktı, (“Para miktarı”) 21 karakterlik alanda sağdan sola doğru yazılacaktır.

36  2006 Pearson Education, Inc. All rights reserved. 36 Outline fig05_06.cpp (2 of 2) For ifadesi içerisinde miktarı hesapla Alan genişliğini ayarlamak için setw stream değiştiricisini kullan 21 karakter

37  2006 Pearson Education, Inc. All rights reserved. 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 kütüphanesi)

38  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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. – fixed ve setprecision komutları Ayarlar kalıcıdır – Bir sonraki değişikliğe kadar geçerliliklerini sürdürürler.

40  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 42 5.5 do … while Döngü İfadesi do…while ifadesi – while ifadesine 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  2006 Pearson Education, Inc. All rights reserved. 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  2006 Pearson Education, Inc. All rights reserved. 44 Outline fig05_07.cpp (1 of 1) Kontrol değişkeni sayac’ı tanımla ve ilk değerini ata. do…while döngüsü sayac’ın değerini sayac- devamlılık koşulunu test etmeden önce görüntüler.

45  2006 Pearson Education, Inc. All rights reserved. 45 Fig. 5.8 | Fig 5.7 deki do...while tekrar ifadesinin yapısını gösteren UML akış diyagramı.

46  2006 Pearson Education, Inc. All rights reserved. 46 5.6 switch Çoklu seçim ifadesi switch ifadesi – Ç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

47  2006 Pearson Education, Inc. All rights reserved. 47 Outline fig05_09.cpp (1 of 1) Her not kategorisi için not sayaç değişkeni.

48  2006 Pearson Education, Inc. All rights reserved. 48 Outline fig05_10.cpp (1 of 5) Tüm sayaç değerlerine ilk değer olarak 0 ver.

49  2006 Pearson Education, Inc. All rights reserved. 49 Outline fig05_10.cpp (2 of 5)

50  2006 Pearson Education, Inc. All rights reserved. 50 Outline fig05_10.cpp (3 of 5) Döngü koşulu, daha fazla veri girişi olup olmadığını belirlemek için cin.get fonksiyonunu kullanır. switch ifadesi 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.

51  2006 Pearson Education, Inc. All rights reserved. 51 Outline fig05_10.cpp (4 of 5) default durumu geçersiz karakterler içindir. Whitespace karakterleri görmezden gel ve herhangi bir hata mesajı görüntüleme

52  2006 Pearson Education, Inc. All rights reserved. 52 Outline fig05_01.cpp (5 of 5)

53  2006 Pearson Education, Inc. All rights reserved. 53 5.6 switch Çoklu-Seçim İfadesi (Devam.) Karakter Okuma – cin.get() fonksiyonu Klavyeden bir karakter okur – Karakterin tamsayı karşılığı static_cast ( character ) – ASCII karakter dizisi Karakterler ve onların sayısal karşılıklarının tablosu – EOF (Dosya-Sonu karakteri) d UNIX/Linux sistemlerinde z Windows sistemlerinde

54  2006 Pearson Education, Inc. All rights reserved. 54 Uyumluluk İpucu 5.2 EOF karakterinin girişi sistemlere göre farklılık gösterir.

55  2006 Pearson Education, Inc. All rights reserved. 55 Uyumluluk İpucu 5.3 Dosya sonu karakterini test ederken EOF sabitini kullanmak -1 değerini kullanmaktan daha iyidir. C++ ‘ın uyumlu olduğu ANSI/ISO C standartları EOF nin negatif tamsayıya karşılık olduğunu belirtir ( sadece -1 değil). Bundan dolayı EOF sabiti farklı sistemlerde farklı değerler alabilir.

56  2006 Pearson Education, Inc. All rights reserved. 56 5.6 switch Çoklu-Seçim İfadesi (Devam.) switch ifadesi – Kontrol ifadesi switch anahtar kelimesinden sonraki parantezler içerisinde belirtilen ifadedir. – case etiketleri Case etiketleri kontrol ifadesi ile karşılaştırılır. Eşlenen case etiketini takip eden ifadeler işletilir. – case etiketindeki çoklu ifadelerin küme parantezleri içerisine alınması mecburi değildir. – break ifadesi, program akışını switch ifadesinin sonuna aktarır. Break ifadesinin yazılmaması, sonraki eşlenmeyen case ifadelerinin de işletilmesi problemine yol açacaktır.

57  2006 Pearson Education, Inc. All rights reserved. 57 5.6 switch Çoklu-Seçim İfadesi (Devam.) switch İfadesi (Devam.) – default durumu Eğer eşlenen hiçbir case etiketi bulunmazsa işletilir. Opsiyoneldir – Eğer hiçbir eşlenen olmaz ve default durumu oluşmazsa Program kontrolü switch ifadesinden sonraki adım ile devam eder.

58  2006 Pearson Education, Inc. All rights reserved. 58 Genel Programlama Hatası 5.8 switch ifadesinde, break ifadesinin gereken yerlere konulmaması bir mantık hatasıdır.

59  2006 Pearson Education, Inc. All rights reserved. 59 Genel Programlama Hatası 5.9 switch ifadesi içerisinde case kelimesi ile yanına yazılacak olan tamsayı değeri arasında bir boşluk bırakılmasının unutulması bir mantık hatasıdır. Örneğin : case 3: yazmak yerine case3: yazılmasının case3 adında kullanılmayan bir etiket oluşturmak dışında başka bir anlamı yoktur. (Bu konu Appendix E 'de daha ayrıntılı ele alınmıştır. ) Bu durumda switch ifadesi, kontrol ifadesi 3 değerini aldığında uygun işlemi gerçekleştirmeyecektir.

60  2006 Pearson Education, Inc. All rights reserved. 60 İyi Programlama Örneği 5.10 switch ifadelerinde bir default durumu tanımlayın. default durumu yoksayılırsa, diğer durumlar açıkça test edilmemiş olacaktır. Default durumunun eklenmesi, programcıyı istisnai durumlarda yapılacak işlemlere yoğunlaştırır. default işlemini gerektirmeyen bazı haller de vardır. Not :case ve default durum ifadelerin sırası önemli olmamasına rağmen programcılar default ifadesini genelde en sona yerleştirirler.

61  2006 Pearson Education, Inc. All rights reserved. 61 İyi Programlama Örneği 5.11 default kelimesinin sonda bulunduğu switch ifadelerinde, break ifadesinin kullanılması şart değildir. Ancak, bazı programcılar diğer case ifadeleri ile simetriyi sağlamak ve netlik amacıyla break’ı default durumunun sonuna yerleştirirler.

62  2006 Pearson Education, Inc. All rights reserved. 62 Genel Programlama Hatası 5.10 Karakter okurken, newline ve diğer white-space karakterlerinin işletilmemesi mantık hatasına neden olur.

63  2006 Pearson Education, Inc. All rights reserved. 63 Outline fig05_11.cpp (1 of 2)

64  2006 Pearson Education, Inc. All rights reserved. 64 Outline fig05_11.cpp (2 of 2) Geçersiz not girildiğinde bir hata mesajı görüntülenir.

65  2006 Pearson Education, Inc. All rights reserved. 65 Genel Programlama Hatası 5.11 Switch ifadesindeki case etiketlerinde değişken içeren ifadelerin (örn., a + b ) bulunması bir yazım hatasıdır.

66  2006 Pearson Education, Inc. All rights reserved. 66 Fig. 5.12 | break ifadesi içeren bir switch çoklu-seçim ifadesinin UML akış diyagramı

67  2006 Pearson Education, Inc. All rights reserved. 67 Genel Programlama Hatası 5.12 switch ifadesinde birbirinin aynısı olan durum etiketleri belirlemek bir derleme hatasıdır. Birbirinden görünüşte farklı ancak sonuçta aynı olan durum etiketlerinin tanımlanması da bir derleme hatasıdır. Örn : switch ifadesi içinde case 4+1: ve case 3+2: durum etiketlerinin tanımlanması bir derleme hatasıdır. Çünkü bu iki etiketin eşiti case 5: tir.

68  2006 Pearson Education, Inc. All rights reserved. 68 5.6 switch Çoklu-Seçim İfadesi(Devam.) Integer( tamsayı) veri tipleri – short short int ‘in kısaltılmış halidir. En düşük aralık -32,768 ile 32,767 aralığıdır. – long long int ‘in kısaltılmış halidir. En düşük aralık -2,147,483,648 ile 2,147,483,647 aralığıdır. – int Birçok bilgisayarda short ya da long tipinin eşitidir. – char Küçük tamsayıları temsil etmek için kullanılabilir.

69  2006 Pearson Education, Inc. All rights reserved. 69 Uyumluluk İpucu 5.4 Eğer programınızın birden fazla değişik bilgisayarda düzgün çalışabilmesini ve yapacağınız işlemlerdeki sayıların –32,768 ile 32,767 aralığını geçebileceğini tahmin ediyorsanız int yerine long kullanın. int veri tipi değişik sistemlerde değişik aralıklara karşılık gelebilir.

70  2006 Pearson Education, Inc. All rights reserved. 70 Performans İpucu 5.3 Hafızada daha çok yer kazanmak istiyorsanız, gereğinden büyük tamsayı tiplerini kullanmamaya özen gösterin. Örn: Sınavdan alınan notların girişi için kullanılacak olan değişkenin long olarak tanımlanması gereksiz hafıza kullanımına yol açar.

71  2006 Pearson Education, Inc. All rights reserved. 71 Performans İpucu 5.4 -

72  2006 Pearson Education, Inc. All rights reserved. 72 5.7 break ve continue İfadeleri break / continue ifadeleri – Kontrol akışını değiştirirler break ifadesi – Kontrol yapılarından çıkışı sağlarlar. – while, for, do…while veya switch ifadelerinde kullanılır. continue ifadesi – Döngü vücudunda kendisinden sonraki ifadeleri işlemeden bir sonraki adıma geçer. for döngüsünde artırma ve döngü koşulu kontrolünü gerçekleştirir. while / do…while döngüsünde döngü koşulu kontrolünü yapar. – Ve bir sonraki adımı gerçekleştirir. (eğer döngüden çıkılmıyorsa) – while, for veya do…while ifadelerinde kullanılır.

73  2006 Pearson Education, Inc. All rights reserved. 73 Outline fig05_13.cpp (1 of 1) Döngü 10 adımda tamamlansın Sayac = 5 olduğunda break ile for ifadesinden çık.

74  2006 Pearson Education, Inc. All rights reserved. 74 Outline fig05_14.cpp (1 of 1) 10 kere dön Sayac = 5 olduğunda 14. Satırı atla ve 9. satırdan devam et.

75  2006 Pearson Education, Inc. All rights reserved. 75 İyi Programlama Örnegi 5.12 Bazı programcılar break ve continue ifadelerinin yapısal programlama mantığına uymadığını düşünürler. Bu ifadelerin işlevler ileride öğreneceğimiz bazı yapısal programlama teknikleri kullanılarak da yerine getirilebilir. Bundan dolayı, bu programcılar break ve continue ifadelerini kullanmazlar. Fakat çoğu programcı break ifadesinin switch içerisinde kullanımının uygun olduğunda hemfikirdir.

76  2006 Pearson Education, Inc. All rights reserved. 76 Performans İpucu 5.5 break ve continue ifadeleri düzgün kullanıldıklarında, bahsi geçen yapısal programlama tekniklerinden daha iyi performans sağlarlar.

77  2006 Pearson Education, Inc. All rights reserved. 77 Yazılım Mühendisliği Görüşü 5.2 Yazılım mühendisliğinin kaliteli bir şekilde kullanıldığı yazılımın mı yoksa en iyi performansa sahip yazılımın mı daha iyi olduğu hep tartışılır. Genellikle, bu hedeflerden birini gerçekleştirmek için diğerinden feragat etmek gerekir. Biz şu kuralı uygulamanızı öneriyoruz : İlk önce programınızı doğru sonuçlar verecek şekilde basitçe kodlayın, daha sonra kodu ufaltmak ve hızlandırmak ile ilgilenin (eğer gerekliyse)

78  2006 Pearson Education, Inc. All rights reserved. 78 5.8 Mantıksal Operatörler Mantıksal Operatörler – Bileşik koşulların tanımlanmasını sağlar. Basit koşulları birleştirerek bileşik çoklu koşullar haline getirir. C++ mantıksal operatörleri – && (mantıksal VE) – || (mantıksal VEYA) – ! (mantıksal DEĞİL)

79  2006 Pearson Education, Inc. All rights reserved. 79 5.8 Logical Operators (Cont.) Mantıksal VE ( && ) Operatörü – Aşağıdaki if ifadesini inceleyin, if ( cinsiyet == 1 && yas >= 65 ) yasliKadinlar++; – Eğer iki koşul da doğru ise bileşik koşul doğrudur ( true ) – Eğer koşulların ikisi veya herhangi birisi yanlış ise bileşik koşul yanlıştır( false )

80  2006 Pearson Education, Inc. All rights reserved. 80 Genel Programlama Hatası 5.13 3 < x < 7 koşulu matematiksel olarak doğru olmasına rağmen, C++ ‘da bu şekilde bir koşul kullanılamaz. Bunun yerine, ( 3 < x && x < 7 ) bileşik koşulunu kullanın.

81  2006 Pearson Education, Inc. All rights reserved. 81 Fig. 5.15 | && (mantıksal VE) operatörü doğruluk tablosu.

82  2006 Pearson Education, Inc. All rights reserved. 82 5.8 Mantıksal Operatörler (Devam.) Mantıksal VEYA ( || ) Operatörü – Aşağıdaki if ifadesini inceleyelim, if ( ( donemOrtalamasi >= 90 ) || ( final >= 90 ) cout << “Ogrenci Notu: A dir” << endl; – Eğer iki koşul da doğru ise bileşik koşul doğrudur ( true ) – Eğer koşulların ikisi veya herhangi birisi yanlış ise bileşik koşul yanlıştır( false )

83  2006 Pearson Education, Inc. All rights reserved. 83 Fig. 5.16 | || (Mantıksal VEYA) Operatörü doğruluk tablosu.

84  2006 Pearson Education, Inc. All rights reserved. 84 5.8 Mantıksal Operatörler (Devam.) Bileşik koşullarda sonuca kısa yoldan varılabilir. – && veya || içeren bileşik koşuldaki koşullar, bileşik koşulun doğru veya yanlış olduğu bilinene kadar işleme alınır. Eğer bileşik koşulun sonucunun ne olacağı belli ise, içerisindeki tüm koşulları değerlendirmeye gerek yoktur. – Örnek ( cinsiyet == 1 ) && ( yas >= 65 ) – Eğer cinsiyet 1 değilse, bu bileşik ifadenin sonucu yanlış tır. ( yas>=65) koşulunu test etmeye gerek yoktur. Sol taraf yanlış olduğundan dolayı tüm ifade yanlış tır.

85  2006 Pearson Education, Inc. All rights reserved. 85 Performans İpucu 5.6 && operatörünü kullanan bileşik koşullarda, her koşul diğerlerinden bağımsız ise, yanlış olma ihtimali en yüksek olan koşulu en sola yerleştirin. || operatörünü kullanan bileşik koşullarda ise, doğru olma ihtimali yüksek olan koşulu en sola yerleştirin. Bu şekilde bileşik koşulların değerlendirilme sürelerini azaltabilirsiniz.

86  2006 Pearson Education, Inc. All rights reserved. 86 5.8 Mantıksal Operatörler (Devam.) Mantıksal DEĞİL ( ! ) Operatörü – Tek karakterlik operatördür. – İşlenen(operand) değeri doğru olduğunda yanlış, yanlış olduğunda doğru döndürür. – Örnek if ( !( not == gozcuDegeri ) ) cout << “Girilen Not Degeri: " << not << endl; aşağıdaki ifade ile aynı anlamdadır: if ( not != gozcuDegeri ) cout << “Girilen Not Degeri " << not << endl; boolalpha komutu – bool değerlerini “true” veya “false” olarak görüntüler.

87  2006 Pearson Education, Inc. All rights reserved. 87 Fig. 5.17 | ! (mantıksal DEĞİL) Operatörü doğruluk tablosu.

88  2006 Pearson Education, Inc. All rights reserved. 88 Outline fig05_18.cpp (1 of 2) boolalpha komutu bool değerlerin “true” veya “false” olarak görüntülenmesini saplar. Mantıksal VE doğruluk tablosunu yazdır. Mantıksal VEYA doğruluk tablosunu yazdır. Mantıksal DEĞİL doğruluk tablosunu yazdır. boolalpha komutunu cout içerisinde kullanın.

89  2006 Pearson Education, Inc. All rights reserved. 89 Outline fig05_18.cpp (2 of 2)

90  2006 Pearson Education, Inc. All rights reserved. 90 Fig. 5.19 | Operator öncelik ve etkinlikleri.

91  2006 Pearson Education, Inc. All rights reserved. 91 5.9 Eşitlik ( == ) ve Atama ( = ) Operatörlerinin karıştırılması. == (eşitlik) ve = (atama) operatörlerinin yanlış kullanımı. – Genel Hata Atama ifadeleri bir değer üretirler ( atanacak değer) Bir değere sahip ifadeler karar verme işleminde kullanılabilirler. – Sifir = false, SifirOlmayan = true – Yazım hatasına neden olmaz. Bazı derleyiciler, == konulması beklenen bir yerde = kullanıldığında uyarı verebilir.

92  2006 Pearson Education, Inc. All rights reserved. 92 5.9 Eşitlik ( == ) ve Atama ( = ) Operatörlerinin karıştırılması.(Devam.) Örnek if ( odemeKodu == 4 ) cout << “Bonus kazandiniz !" << endl; – Eğer odemeKodu 4 ise bonus verilir. Eğer == operatörü = ile değiştirilirse. if ( odemeKodu = 4 ) cout << "Bonus kazandiniz !" << endl; – odemeKodu 4’e eşitlenir. (Önceki değerinin ne olduğu önemli değil) – Koşul her zaman doğrudur (çünkü 4 sıfır değildir.) Ödül, odemeKodu’ nun değerine bakılmaksızın herkese verilir.

93  2006 Pearson Education, Inc. All rights reserved. 93 Genel Programlama Hatası 5.14 == operatörünün atama için ve = operatörünün de eşitlik değerlendirilmesi için kullanılması bir mantık hatasıdır.

94  2006 Pearson Education, Inc. All rights reserved. 94 Hatalardan Sakınma İpucu 5.3 Normalde programcılar koşulları sabit değerler sağa, değişken isimleri sola gelecek şekilde x==7 gibi yazarlar. Bu koşulun 7==x şeklinde yazılması daha uygundur. Böylece programcı yanlışlıkla == operatörünü = ile değiştirirse yani 7=x yaparsa, sabit bir sayı değiştirilemeyeceği için derleyici tarafından hata üretilecektir. Aksi takdirde, koşul içerisinde x=7 ifadesinin kullanımı mantıksal hata olduğundan, derleyici tarafından herhangi bir hata üretilmeyecektir).

95  2006 Pearson Education, Inc. All rights reserved. 95 5.9 Eşitlik ( == ) ve Atama ( = ) Operatörlerinin karıştırılması.(Devam.) SolDeğerler – Eşitliğin sol tarafında bulunabilecek ifadeler. – Değiştirilebilir (örn : değişkenler) x = 4; SağDeğerler – Eşitliğin sağ tarafında bulunurlar. – Sayı sabitleri gibi sabitler.(örn: 4 = x; yazamazsınız) SolDeğerler, SağDeğerler olarak kullanılabilirler, fakat tersi mümkün değildir.

96  2006 Pearson Education, Inc. All rights reserved. 96 Hataları Önleme İpucu 5.4 Yazı editörünüze tüm = operatörlerini arattırın, ve bulunan yerlerde atama ya da mantıksal işlemlerinizi doğru yapıp yapmadığınızı kontrol edin.


" 2006 Pearson Education, Inc. All rights reserved. 1 5 5 Kontrol İfadeleri: 2. Bölüm." indir ppt

Benzer bir sunumlar


Google Reklamları