Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

 2006 Pearson Education, Inc. All rights reserved. 1 4 4 Kontrol Yapıları: 1.Bölüm.

Benzer bir sunumlar


... konulu sunumlar: " 2006 Pearson Education, Inc. All rights reserved. 1 4 4 Kontrol Yapıları: 1.Bölüm."— Sunum transkripti:

1  2006 Pearson Education, Inc. All rights reserved Kontrol Yapıları: 1.Bölüm

2  2006 Pearson Education, Inc. All rights reserved. 2 AMAÇLAR Bu bölümde öğrenecekleriniz:  Basit problem çözme teknikleri.  Adım adım çözümleme (stepwise refinement) işlemi sayesinde algoritmalar geliştirme.  Alternatif işlemler arasında seçim yapabilmek için if ve if... else ifadelerinin kullanılması.  Bir programdaki ifadelerin tekrarlı olarak işletilmesi için while ifadesinin kullanılması.  Sayaç kontrollü tekrar, ve gözcü kontrollü tekrar.  Artırma, azaltma ve atama operatörlerinin kullanılması.

3  2006 Pearson Education, Inc. All rights reserved Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol Yapıları 4.5 if Seçim ifadesi 4.6 if...else Seçim ifadesi 4.7 while Tekrar ifadesi 4.8 Algoritmaları biçimlendirme:Sayaç kontrollü tekrar 4.9 Algoritmaları biçimlendirme:Gözcü kontrollü tekrar 4.10 Algoritmaları biçimlendirme:İç içe Kontrol ifadeleri 4.11 Atama Operatörleri 4.12 Artırma ve Azaltma Operatörleri 4.13 (Opsiyonel) Yazılım Mühendisliği Çalışması : ATM sistemindeki sınıf özelliklerini tanımlama.

4  2006 Pearson Education, Inc. All rights reserved Giriş Program yazmaya başlamadan önce – Problemin ne olduğu 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ı

5  2006 Pearson Education, Inc. All rights reserved Algoritmalar Algoritmalar – Yürütülecek işlemleri belirler – İşlemlerin sırasını belirler Program kontrolü – Bir programdaki işlemlerin yürütülme sırasını belirler. – C++ da program kontrolü, kontrol ifadeleriyle yapılır.

6  2006 Pearson Education, Inc. All rights reserved Pseudocode Pseudocode – Algoritma geliştirmek için kullanılan yapay, sade dil. Kodlama işleminden önce programın planlanması için kullanılır. – C++ programına kolayca çevrilebilir. – Konuşma diline benzer Sadece yürütülecek deyimler yazılır – Değişken tanımlamaya gerek yoktur – Bilgisayarlarda çalıştırılmazlar.

7  2006 Pearson Education, Inc. All rights reserved. 7 Fig. 4.1 | Fig. 2.5 deki toplama programı için Pseudocode.

8  2006 Pearson Education, Inc. All rights reserved Kontrol yapıları Sıralı yürütme – İfadeler sırayla yürütülür Kontrol transferi – Bir sonraki adımda yürütülecek ifade, sıradaki ifade değildir. İfadeler sırasız yürütülür. Yapısal programlama – Goto ifadelerini ortadan kaldırmıştır.

9  2006 Pearson Education, Inc. All rights reserved Kontrol yapıları(Devam.) Sadece üç kontrol yapısına ihtiyaç vardır. – 3 kontrol yapısı (Böhm ve Jacopini) Sıralı yapı – Programlar sıralı bir biçimde yürütülürler. Seçim yapısı – if, if…else, switch Tekrar yapısı – while, do…while, for – goto ifadesi kullanılmaz – goto’ların yok edilmesiyle yapısal proglamlamayı (structured programming) mümkün kılan sistem Böhm ve Jacopini tarafından ispatlanmıştır.

10  2006 Pearson Education, Inc. All rights reserved Kontrol yapıları(Devam.) UML Akış Diyagramı – İşlem akışını modeller İşlem durum sembolleri – Yuvarlak köşeli dikdörtgen Ufak daireler – İçi dolu daire başlangıç durumunu gösterir. – İçi boş daire içindeki dolu daire bitiş durumunu gösterir. Bağlantı okları – İşlemlerin akışını gösterir. Yorum notları – Diyagrama noktalı çizgi ile bağlanır.

11  2006 Pearson Education, Inc. All rights reserved. 11 Fig. 4.2 | Sıralı-yapı akış diyagramı

12  2006 Pearson Education, Inc. All rights reserved Kontrol Yapıları (Devam.) Tek giriş / tek çıkış kontrol ifadeleri – Kontol ifadelerinin üç çeşidi vardır Sıralı ifadeler Seçim ifadeleri Tekrar ifadeleri – Aşağıdaki iki yoldan biri ile bu ifadeler birleştirilebilirler. Kontrol ifadelerini yığın haline getirme. – Bir ifadenin çıkışını, kendisinden sonra gelecek olan ifadenin girişine bağlama. Kontrol ifadelerini iç içe yerleştirme.

13  2006 Pearson Education, Inc. All rights reserved. 13 Fig. 4.3 | C++ keywords.

14  2006 Pearson Education, Inc. All rights reserved. 14 Genel Programlama Hatası 4.1 Anahtar kelimelerin(keywords), tanımlayıcı ( değişken, fonksiyon, sınıf ismi.... ) olarak kullanılması bir yazım hatasıdır.

15  2006 Pearson Education, Inc. All rights reserved. 15 Genel Programlama Hatası 4.2 Anahtar kelimelerin içinde büyük harf kullanılması bir yazım hatasıdır.Tüm C++ anahtar kelimeleri küçük harflidir.

16  2006 Pearson Education, Inc. All rights reserved. 16 Yazılım Mühendisliği Görüşü 4.1 Yedi değişik kontrol ifadesi vardır : sıralama, if, if... else, switch, while, do... while, for Bu ifadelerin birleştirilmesi için iki yol vardır : Yığın haline getirme ve İç-içe yerleştirme Yazacağımız tüm C++ programlar, bu yedi kontrol ifadesinin belirtilen iki yol ile birleşiminden oluşturulabilir.

17  2006 Pearson Education, Inc. All rights reserved if Seçim ifadesi Seçim İfadeleri – Alternatif bir dizi işlem arasından birinin seçimi 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ır ve program devam eder. – Girintili yazma(indentation) programın okunurluğunu artırır. Girintili yazmada kullanılan tab ve boşluk karakterleri C++ derleyicisi tarafından yoksayılır.

18  2006 Pearson Education, Inc. All rights reserved if Seçim ifadesi (Devam.) Seçim İfadeleri (Devam.) – Örnek Pseudocode’un C++ a çevrilmesi Eğer öğrencinin notu 60 dan büyük veya eşitse “Geçti” yaz if ( notu >= 60 ) cout << “Geçti"; – Koşul olarak herhangi bir ifade kullanılabilir. Eğer koşul yanlış ise karşılaştırma sonucunda false değeri döndürülür. UML Modellemedeki Baklava şekli – Karar verme işlemini ifade eder. – Kontrol edilecek koşulları içerir Koşulun doğru olup olmadığını kontrol et. Sonuca göre doğru yolu izle.

19  2006 Pearson Education, Inc. All rights reserved. 19 İyi Programlama Örneği 4.1 Program yazarken girintili yazma tekniğini devamlı olarak uygulamanız programın okunurluğunu ciddi bir şekilde artırır. Her girinti için üç boşluk bırakmanız önerilir. Bazıları tab kullanmayı tercih eder,ancak tab karakteri ile bırakılan boşluk sayısı editörden editöre farklılık gösterebilir.

20  2006 Pearson Education, Inc. All rights reserved. 20 Fig. 4.4 | Tek-seçimlik if ifadesinin akış diyagramı

21  2006 Pearson Education, Inc. All rights reserved. 21 Uyumluluk ipucu 4.1 Doğru/yanlış değerleri için tamsayı kullanan önceki C versiyonları ile uyumluluğu sağlamak için, true yerine 0 dışındaki herhangi bir değer (genellikle 1 kullanılır), ve false için 0 (sıfır) kullanılabilir.

22  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi 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 değilse “Kaldı” yaz C++ kodu – if ( notu >= 60 ) cout << “Geçti"; else cout << “Kaldı";

23  2006 Pearson Education, Inc. All rights reserved. 23 İyi Programlama Örneği 4.2 if... else ifadesi içerisindeki ifadeleri yazarken girinti kullanın. if ( notu >= 60 ) cout << “Geçti"; else cout << “Kaldı";

24  2006 Pearson Education, Inc. All rights reserved. 24 İyi Programlama Örneği 4.3 Eğer birden çok girinti seviyesi varsa, her seviyenin girintisi aynı miktarda boşluk içermelidir.

25  2006 Pearson Education, Inc. All rights reserved. 25 Fig. 4.5 | if...else ikili seçim ifadesinin akış diyagramı

26  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Devam.) Üçlü Koşul 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 yazılabilir: – cout = 60 ? “Geçti” : “Kaldı” ); KoşulDoğruysa yapılacak işlem Yanlışsa yapılacak işlem

27  2006 Pearson Education, Inc. All rights reserved. 27 Hatalardan sakınma 4.1 Birden çok koşulun kullanıldığı ifadelerde, öncelik problemini önlemek ve okunabilirliği artırmak için parantez kullanın. Örn: if( (notu>=60) && (notu<70) ) printf(“C”);

28  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Devam.) İç-içe if…else ifadeleri – Bir ifade diğerinin içindedir, birden fazla koşulu kontrol ederler. – Bir koşul doğrulandığında, diğerleri atlanır. – Örnek eğer öğrenci notu 90 dan büyük veya eşitse “A” yaz değilse eğer öğrenci notu 80 den büyük veya eşitse “B” yaz değilse eğer öğrenci notu 70 den büyük veya eşitse “C” yaz değilse eğer öğrenci notu 60 dan büyük veya eşitse “D” yaz değilse “F” yaz

29  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Devam.) İç-içe if…else ifadeleri (Devam.) – C++ Kodu if ( notu >= 90 ) cout = 80 ) cout = 70 ) cout = 60 ) cout << "D"; else cout << "F";

30  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Devam.) İç-İçe if…else ifadeleri (Devam.) – C++ Kodu (Farklı girinti yöntemiyle) if ( notu >= 90 ) cout = 80 ) cout = 70 ) cout = 60 ) cout << "D"; else cout << "F";

31  2006 Pearson Education, Inc. All rights reserved. 31 Performans ipucu 4.1 Bir iç-içe if... else ifadesi, ard arda sıralanmış tek seçimlik if ifadelerinden daha hızlı işletilebilir. Bunun nedeni, iç-içe if... else ifadelerinden herhangi birinin doğru olması halinde diğer koşulların değerlendirilmeye alınmamasıdır. Aksi takdirde, bir koşul doğrulansa bile diğer tüm koşulların kontrolü yapılacak ve bu da zaman kaybına neden olacaktır.

32  2006 Pearson Education, Inc. All rights reserved. 32 Performans ipucu 4.2 Bir iç-içe if... else ifadesinde, doğru olması diğerlerinden daha muhtemel olan koşulları başa, doğru olma ihtimali çok düşük olanları da sona yerleştirin. Böylece, iç-içe if... else ifadesi daha hızlı çalışacaktır.

33  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Cont.) Yeri belli olmayan else problemi – Derleyici bu else ‘i kendisinden önce gelen ilk if ifadesiyle eşleştirir. – Örnek: else hangi if için konulmuş ? if ( x > 5 ) if ( y > 5 ) cout 5"; else cout << "x is <= 5"; – Derleyici else ‘i aşağıdaki gibi algılar. if ( x > 5 ) if ( y > 5 ) cout 5"; else cout << "x is <= 5";

34  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi Yeri belli olmayan else problemi(Devam.) – Küme parantezlerini kullanın ( {} ) if ( x > 5 ) { if ( y > 5 ) cout 5"; } else cout << "x is <= 5"; – Küme parantezleri, ikinci if ifadesinin birinci if ‘in doğru olması halinde işletilecek ifade olacağını ve else ifadesinin de ilk if ifadesinin yanlış olması halinde işletileceğini belirtir.

35  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Devam.) Birleşik ifade – Blok olarak da adlandırılırlar. Küme parantezleri arasında bununan ifadeler kümesi. Birden fazla ifadenin if ’in gövdesine yerleştirilmesini sağlar. – Örnek if ( notu >= 60 ) cout << “Geçti.\n"; else { cout << “Kaldı.\n"; cout << “Bu dersi tekrar almalısınız.\n"; } – Küme parantezleri olmasaydı, cout << " Bu dersi tekrar almalısınız.\n"; ifadesi koşulun doğru olup olmadığına bakılmaksızın her zaman çalıştırılacaktı.

36  2006 Pearson Education, Inc. All rights reserved. 36 Yazılım Mühendisliği Görüşü 4.2 Bir blok küme parantezi ile gruplanmış bir veya birden çok ifadeden oluşur. Bir blok, tek bir ifadenin yerleştirilebileceği her yere yerleştirilebilir.

37  2006 Pearson Education, Inc. All rights reserved. 37 Genel Programlama Hatası 4.3 Bir bloğu belirleyen küme parantezlerinden bir veya ikisinin konulmasının unutulması, yazım ya da mantık hatalarına neden olabilir.

38  2006 Pearson Education, Inc. All rights reserved. 38 İyi Programlama Örneği 4.4 Küme parantezlerinin if... else ifadelerinin ya da herhangi bir kontrol ifadesinin içine yerleştirilmesi, bazı ifadelerin çalıştırılmadan atlanması gibi sorunların önüne geçer.Bu sorun genellikle, if ifadesinin gövdesine sonradan bir ifade ekleme ile ortaya çıkar. Bazı programcılar,bu atlama soru ile karşılaşmamak için, başlangıç ve bitiş küme parantezlerini daha blok içerisindeki ifadeleri yazmadan önce yerleştirmeyi alışkanlık edinirler.

39  2006 Pearson Education, Inc. All rights reserved if…else İkili seçim ifadesi (Devam.) Boş ifade – Bir ifadenin gelmesi gereken yere noktalı virgül (;) konulması. – Hiçbir işlem yapmaz

40  2006 Pearson Education, Inc. All rights reserved. 40 Genel Programlama Hatası 4.4 Bir tekli-if ifadesinden sonra noktalı virgülün kullanılması mantık hatasına, if.. else ikili seçim ifadesinin içinde kullanılması ise yazım hatasına neden olur(gövdede herhangi bir ifade olduğunda).

41  2006 Pearson Education, Inc. All rights reserved while Tekrar İfadesi Tekrar ifadesi – Bir koşul doğru kaldığı sürece aynı işlemler tekrar tekrar yapılır. – Pseudocode while alışveriş listem bitmediği sürece devam et listede sırası geleni al ve üzerini çiz – while döngüsü koşul yanlış olana kadar devam eder – Örnek int carpim = 3; while ( carpim <= 100 ) carpim = 3 * carpim;

42  2006 Pearson Education, Inc. All rights reserved. 42 Genel Programlama Hatası 4.5 while döngüsünün içerisine belli bir süre sonra while koşulunun yanlış olmasını sağlayacak bir ifade sağlanmazsa, döngü içindeki ifadelerin hiç bir zaman durmayacağı bir sonsuz döngü içerisine girilir. Bu durumda, program eğer ekrana programın o anki durumunu bildiren bir mesaj yazmıyorsa, program herhangi bir işlem yapmıyor gibi gözükür. Örnek: while ( carpim < 100 ) carpim = 10;

43  2006 Pearson Education, Inc. All rights reserved while Tekrar ifadesi (Devam.) UML Birleştirme(merge) Sembolü – Birden fazla işlem akışını birleştirerek tek bir işlem akışı haline getirir. – Baklava şekli ile temsil edilir. Karar sembolünden farkı: – Birden fazla yönlü ok, dışarıdan içeriye doğru gelir. – Sadece bir tane ok dışarıya çıkar. Herhangi bir koşul içermez. – C++ kodunda herhangi bir karşılığı yoktur.

44  2006 Pearson Education, Inc. All rights reserved. 44 Fig. 4.6 | while tekrar ifadesi için UML akış diyagramı.

45  2006 Pearson Education, Inc. All rights reserved. 45 Performans İpucu 4.3 Bu sunumda bahsedilen ve ufak performans artışı sağlayan bir çok ipucu okuyucu tarafından göz ardı edilebilir, ancak bu ufak performans artışlarının döngülerde çok büyük performans artışlarına karşılık geleceğini unutmayınız.

46  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Sayaç Kontrollü Tekrar Problem sorusu: 10 kişilik bir sınıfta quiz yapılıyor.Öğrencilerin aldığı arası notlar size sağlanmış durumda. Notların toplamını ve ortalamasını hesaplayın. Sayaç kontrollü tekrar – Döngü, sayaç belirlenen bir değere gelinceye kadar devam eder. – “Kesin döngü” olarak da bilinir. Tekrar sayısının ne olacağı önceden bilinir.

47  2006 Pearson Education, Inc. All rights reserved Algoritmaları biçimlendirme:Sayaç Kontrollü Tekrar(Devam.) Sayaç kontrollü tekrar(Devam.) – Sayaç değişkeni Saymak için kullanılır – Örnekte, 10 öğrencinin hangisinin notunun o an girildiğini işaret eder. – Toplam değişkeni Değerlerin toplamının bulunması için kullanılır. İşlem başlamadan önce sıfıra eşitlenir. – Aksi takdirde, hafızada bu değişken için ayrılan yerd saklı olan istenmeyen değerleri içerecektir.

48  2006 Pearson Education, Inc. All rights reserved. 48 Yazılım Mühendisliği Görüşü 4.3 Bir problemi çözmenin en zor tarafı, çözüm için bir algoritma geliştirmektir. Doğru algoritma tanımlandıktan sonra çalışan bir C++ programın yazılması çok kolaydır.

49  2006 Pearson Education, Inc. All rights reserved. 49 Fig. 4.7 | Sınıf ortalaması problemini çözmek için sayaç kontrollü tekrarı kullanan Pseudocode

50  2006 Pearson Education, Inc. All rights reserved. 50 Outline fig04_08.cpp (1 of 1) sinifOrtalamasiBul() fonksiyonu pseudocode’ da tanımlananan algoritmayı uygular.

51  2006 Pearson Education, Inc. All rights reserved. 51 Outline fig04_09.cpp (1 of 3) Eğer isim 25 karakterden fazla ise, ilk 25 karakterini seç.

52  2006 Pearson Education, Inc. All rights reserved. 52 Outline fig04_09.cpp (2 of 3) sinifOrtalamasiBul() fonksiyonu pseudocode’ da tanımlananan algoritmayı uygular sayac değişkenini tanıt Toplam değişkenini tanıt.

53  2006 Pearson Education, Inc. All rights reserved. 53 Outline fig04_09.cpp (3 of 3) Bir süre sonra 10 u geçecek olan sayac değişkenini 1 artır. Ortalama hesaplamasını yap ve sonucunu ortalama değişkenine ata. Girilen notu toplam ‘a ekle

54  2006 Pearson Education, Inc. All rights reserved. 54 Outline fig04_10.cpp (1 of 1)

55  2006 Pearson Education, Inc. All rights reserved. 55 İyi Programlama Örneği 4.5 Okunabilirliği artırmak için tanımlamaları boş bir satır ile diğer ifadelerden ayırın. Örnek: int toplam; int sayac; // boş satır toplam = 0; sayac = 1; //boş satır while ( sayac <= 10 ){ }

56  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Sayaç kontrollü tekrar (Devam.) İlk değeri atanmamış değişkenler – İçerisinde “çöp” (tanımlanmamış, işe yaramaz) değerler barındırırlar. Tamsayı bölme ve tamsayı kısmını alma. – Tamsayı bölümü İki tamsayının birbirine bölümüdür. Tamsayı kısmını alma işlemi yapılır. – Bölümün sadece tamsayı kısmı alınır.Virgülden sonraki sayılar yok edilir. (Yuvarlama yapılmaz.) Örnek : 1,11  1 1,99  1

57  2006 Pearson Education, Inc. All rights reserved. 57 Genel Programlama Hatası 4.6 Sayaçlara veya toplam değerlerine ilk değer atanmaması mantık hatalarına neden olabilir.

58  2006 Pearson Education, Inc. All rights reserved. 58 Hatalardan sakınma ipucu 4.2 Her sayaç veya toplam değişkenine ilk değer atamasını ya tanımlandığında ya da işleme alınmadan önce mutlaka sağlayın. Toplam değişkenleri genellikle 0 ‘a eşitlenir. Sayaç değişkenleri nasıl kullanıldığına bağlı olarak 0 veya 1 e eşitlenirler. (Ne zaman 0’a ve ne zaman 1 ‘e eşitleneceği ilerideki örneklerde gösterilecektir. )

59  2006 Pearson Education, Inc. All rights reserved. 59 İyi Programlama Örneği 4.6 Programın okunabilirliğini artırmak için her değişkeni ayrı bir satırda tanımlayın ve yanlarına o değişkenin ne işe yaradığına dair bir açıklama yazısı yerleştirin. Kötü örnek: int toplam, notu, i; // not ortalaması için gereken değişkenler. İyi örnek : int toplam ; // Öğrenci notları toplamı int notu ; // Bir öğrenci için girilen not int sayac ; // Kaç öğrenci notunun girildiğini sayan sayaç.

60  2006 Pearson Education, Inc. All rights reserved. 60 Genel Programlama Hatası 4.7 Tamsayı bölme sonucunun yuvarlandığını düşünmek yanlış sonuçlara neden olabilir. Örnek: Aritmetik olarak 7  4 = 1.75 tir. C++ da bu tamsayı bölümünün sonucu 1 dir, 2 değildir.

61  2006 Pearson Education, Inc. All rights reserved. 61 Genel Programlama Hatası 4.8 Bir döngüde kullanılan sayaç değişkeninin döngü sonunda aynen kullanılması genellikle “bir fazlalık hatası” na neden olur. Sayacın 1 ‘er artırıldığı sayaç kontrollü bir döngüde, döngü, sayaç değeri döngüde belirtilen koşulun bir fazlasına geldiğinde tamamlanır. ( Örneğin 10 öğrencinin notunun alınacağı bir döngüde sayaç değeri 11 olduğunda döngü tamamlanır. Bu değerin ortalama hesaplanırken kullanılması bir hatadır.Bunun nedeni 10 öğrencinin notları toplamının 11 ‘e bölünecek olmasıdır.)

62  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Gözcü Kontrollü Tekrar Yeni bir problem Sayısı önceden belli olmayan öğrencilerin notlarını alan ve ortalamasını bulan bir sınıf geliştirin. Gözcü-Kontrollü Döngü – Belirsiz döngü olarak da bilinir. – Gözcü değeri Veri girişinin sonuna gelindiğini gösterir. Bir gözcü değeri, aynı zamanda geçerli bir giriş değeri olamaz. (Örn: Öğrenci notları için -1 değeri seçilebilir.) Aynı zamanda işaret, veya bayrak değeri olarak da bilinir.

63  2006 Pearson Education, Inc. All rights reserved. 63 Genel Programlama Hatası 4.9 Gözcü değerini, aynı zamanda geçerli bir giriş değer olarak seçmek bir mantık hatasıdır. (Örn: öğrenci notları için 0 değerini gözcü değeri olarak seçmek bir mantık hatasıdır.Çünkü öğrencilerden biri veya birkaçı 0 notunu almış olabilir)

64  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Gözcü Kontrollü Tekrar (Devam.) Adım adım çözümleme – İyi yapılandırılmış programlar geliştirme tekniğidir. – İlk adım Programın yapacağı işlemi tek bir cümle ile tanımlamaya çalışın. Örnek – Quiz ortalamasını belirle. – İlk çözümleme Sırasıyla belirlenen birden fazla cümle ile problemin çözümü. Örnek – Değişkenlere ilk değerlerini ata – Quiz notlarını gir, topla ve say. – Tüm öğrencilerin aldığı notların toplamını ve sınıf ortalamasını hesapla ve görüntüle

65  2006 Pearson Education, Inc. All rights reserved. 65 Yazılım Mühendisliği Görüşü 4.4 İlk adım ve her çözümleme, algoritmanın tamamlanmış birer parçasıdır. Sadece detay seviyeleri farklılık gösterir.

66  2006 Pearson Education, Inc. All rights reserved. 66 Yazılım Mühendisliği Görüşü 4.5 Birçok program 3 aşamaya bölünebilir : 1- Programın değişkenlerine ilk değerlerinin atanması. 2- Veri girişlerinin yapılması ve bu verilere göre program değişkenlerinin değerlerinin atanması. 3- Sonuçların hesaplanarak görüntülenmesi ve programın sonlandırılması.

67  2006 Pearson Education, Inc. All rights reserved. 67 Genel Programlama Hatası 4.10 Bir sayının sıfıra bölünmek istenmesi ölümcül hataya sebep olur. (fatal error)

68  2006 Pearson Education, Inc. All rights reserved. 68 Hatalardan sakınma ipucu Tip 4.3 Eğer programınızda bir bölme işlemi varsa ve bu işlemde bölenin sıfır olma ihtimali varsa, bölen değerinin sıfır olup olmadığını test edin. Eğer bölen sıfır ise bunu bir hata mesajı ile kullanıcıya bildirerek programın ölümcül hata ile sonlandırılmasına olanak tanımayın. Örnek: int bolen; cin>>bolen; while(bolen==0){ cout <<" Bolen sıfır olamaz! "<>bolen; } cout << 100/bolen ;

69  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Gözcü Kontrollü Tekrar (Devam.) Adım adım çözümleme (Devam.) – İkinci çözümleme Değişkenlerin neler olacağını belirleyin. Hangi kontrol yapılarını kullanacağınızı belirleyin. Örnek : Fig Ölümcül mantık hataları – Programın istenmeyen bir şekilde başarısızlıkla sonlanmasına neden olabilir. Patlama (bombing) veya Kaza (crashing) olarak isimlendirilirler. – Sıfıra bölme işlemi bir ölümcül mantık hatasıdır.

70  2006 Pearson Education, Inc. All rights reserved. 70 Fig | Gözcü kontrollü tekrar yöntemini kullanan sınıf ortalaması bulma probleminin pseudocode algoritması.

71  2006 Pearson Education, Inc. All rights reserved. 71 Yazılım Mühendisliği Görüşü 4.6 Pseudocode algoritması, C++ koduna dönüştürülebilmesi için yeteri kadar detaya sahip olduğunda, adım adım çözümleme işlemini sonlandırın. Algoritma yeteri kadar olgunlaştıktan sonra C++ koduna çevrilmesi gayet kolay olacaktır.

72  2006 Pearson Education, Inc. All rights reserved. 72 Yazılım Mühendisliği Görüşü 4.7 Birçok tecrübeli programcı pseudocode gibi geliştirme araçlarını kullanmadan programlarını yazarlar. Bu programcılar, öncelikli hedeflerinin problemi zaman kaybetmeden bilgisayar üzerinde hemen çözmek olduğunu ve pseudocode’un zaman kaybı olduğunu düşünür. Bu yöntem ufak çaplı programlarda işe yarar gibi gözükse de, büyük ve karmaşık programlarda büyük sorunlara neden olabilir.

73  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Gözcü Kontrollü Tekrar(Devam.) Kayan Noktalı Sayılar (Floating-point numbers) – Ondalık noktalı bir gerçel sayıdır. – C++ bu sayılar için float ve double veri tiplerini sağlar. Double sayılar büyük değerlere ve ondalık haneye sahip olabilirler. – Ondalık hane bölümü Duyarlık(Precision) olarak adlandırılır. Kayan noktalı sayı değerleri normalde double sayılar olarak da kullanılabilirler. – Kayan noktalı sayılar çoğunlukla sadece gerçek sayılara birer yaklaşımdan ibarettir. Örn : 47 / 23 Yakın değer : 2, Daha yakın değer : 2,

74  2006 Pearson Education, Inc. All rights reserved. 74 Outline fig04_12.cpp (1 of 1)

75  2006 Pearson Education, Inc. All rights reserved. 75 Outline fig04_13.cpp (1 of 4) Fixed çıktının sabit noktalı düzende olmasını sağlar. kütüphanesindenki setprecision komutu çıktı duyarlığını belirler.

76  2006 Pearson Education, Inc. All rights reserved. 76 Outline fig04_13.cpp (2 of 4)

77  2006 Pearson Education, Inc. All rights reserved. 77 Outline fig04_13.cpp (3 of 4) sinifOrtalamasiBul() fonksiyonu, pseudocode’ da belirtilen sınıf ortalaması algoritmasının uygulamasıdır. Değişkenleri tanımla : int değişkenler : to plam, sayac, not double değişkenler: ortalama while döngüsü, -1 notu girilmediği sürece içerisindeki işlemi tekrar eder.

78  2006 Pearson Education, Inc. All rights reserved. 78 Outline fig04_13.cpp (4 of 4) static_cast Kullanarak gerekli çevrimi gerçekleştir.

79  2006 Pearson Education, Inc. All rights reserved. 79 Outline fig04_14.cpp (1 of 1)

80  2006 Pearson Education, Inc. All rights reserved. 80 İyi Programlama Örneği 4.7 Klavyeden yapılacak her giriş için bir açıklama görüntüleyin( Örn : “Ders Adını Giriniz :” ) Bu açıklama girişin ne olacağını tam olarak belirtmelidir. Gözcü kontrollü döngülerde veri girişinin açıklamasında, gözcü değerinin ne olacağı belirtilmelidir Örn : cout << “ Notu Giriniz (-1: Çıkış) : ”; // gözcü değeri -1 dir.

81  2006 Pearson Education, Inc. All rights reserved. 81 Genel Programlama Hatası 4.11 Bir bloğu belirleyen küme parantezlerinin ( {} ) unutulması, sonsuz döngünün oluşması gibi bazı mantık hatalarına neden olabilir. Bazı programcılar bu problemi önlemek için, (tek bir ifade içerse bile) her kontrol ifadesinin gövdesine küme parantezlerini yerleştirirler. Örn : if (notu>60) { cout<< “Geçti” ; }else{ cout<< “Kaldı” ; }

82  2006 Pearson Education, Inc. All rights reserved. 82 Genel Programlama Hatası 4.12 Kayan noktalı sayıların, değerleri tam olarak yansıttıklarını düşünerek kullanılması hatalı sonuçlara neden olabilir (Örn: Bu sayıların eşitlik kontrolünde kullanılması). Kayan noktalı sayılar birçok bilgisayarda sadece birer yaklaşımdırlar.

83  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Gözcü Kontrollü Tekrar (Devam.) Tekli çevrim (casting) operatörü – İşlenen (operand) değerininin farklı bir veri tipinden geçici bir kopyasını oluşturur. Örnek : – static_cast ( toplam ) Toplam’ın geçici bir kayan noktalı sayı kopyasını oluşturur.

84  2006 Pearson Education, Inc. All rights reserved. 84 Genel Programlama Hatası 4.13 Çevrim operatörleri int ve double gibi bazı sayısal tipleri birbirlerine çevirmek için kullanılabilir. Çevrim operatörleri ayrıca birbirleriyle ilişkili sınıf tipleri arasında da çevrim yapabilirler( Ayrıntılı olarak 13.Bölüm’de Nesne Tabanlı Programlama : Çok- Biçimlilik başlığı altında incelenecektir.) Yanlış tipler arasındaki çevrimler derleme veya çalışma zamanı hatalarına neden olabilir.

85  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: Gözcü Kontrollü Tekrar (Devam.) Kayan noktalı sayıları düzenleme – setprecision parametreli manipulatörü Ondalık noktasının sağında kaç rakamın görüntüleneceğini belirler. Varsayılan duyarlık 6 rakamdır. – Fixed parametresiz manipulatörü Kayan noktalı sayıların sabit noktalı sayılar olarak görüntülenmesini sağlar. – Bilimsel gösterimin (3.1 × 10 3 ) tam tersi.

86  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: İç-İçe Kontrol İfadeleri Problem : Bir fakülte, emlakçılık lisansı sınavı için bir kurs açıyor. Fakülte, öğrencilerinin sınavda ne kadar iyi olduklarını bilmek istiyor. Sizden, sınav sonuçlarını inceleyecek bir program yazmanız isteniyor. Size bu 10 öğrencinin listesi verilmiş durumda. Listede öğrenci ismi yanında geçenler için 1, kalanlar için 2 yazıyor. Programınız sınav sonuçlarını aşağıdaki şekilde analiz etmelidir. : 1. Her öğrencinin sınav sonucunu gir. (1 ya da 2). Her öğrencinin notu girilmeden önce "Notu Girin" görüntüle.. 2. Sınav sonuçlarına göre kalan ve geçenleri say.. 3. İşlem bittiğinde, sınav sonuçlarının geçen ve kalan sayılarını da içeren özetini görüntüle.. 4. Eğer 8 den fazla kişi sınavı geçtiyse, “Kurs ücretini yükselt" mesajını yaz.

87  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: İç-İçe Kontrol İfadeleri(Devam.) Problemin İncelenmesi – Program 10 sınav sonucunu işleyecek Belirli bir sayı(10), bu nedenle sayaç kontrollü döngü kullanın. – Sınav sonuçları 1 ya da 2 olabilir Eğer 1 değilse, 2 olduğunu varsayın. – İki sayaç kullanılabilir Biri sınavı geçenleri sayar Diğeri sınavdan kalanları sayar – Sekiz öğrenciden daha çoğunun geçip geçmediğini kontrol edin.

88  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: İç-İçe Kontrol İfadeleri(Devam.) İlk adım – Sınav sonuçlarını incele ve seviyenin yüksek olup olmadığına karar ver İkinci adım – Değişkenlere ilk değerlerini ver 10 sınav sonucu gir ve geçenler ile kalanları say Sınav sonuçlarının özetini yaz ve kurs ücretinin yükseltilmesinin gerekli olup olmadığına karar ver. Üçüncü Adım – Değişkenlere aşağıdaki şekilde ilk değerlerini ata gecenler ‘i sıfıra eşitle kalanlar ‘ı sıfıra eşitle sayacı bire eşitle

89  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: İç-İçe Kontrol İfadeleri(Devam.) İkinci adım (Devam.) – 10 sınav sonucu girme ve geçenler ile kalanları sayma işlemini aşağıdaki gibi gerçekleştir sayac 10’dan küçük veya eşit olduğu sürece devam et Sıradaki sınav sonucunu gir Eğer öğrenci geçtiyse gecenler ‘i bir artır Değilse kalanlar ‘ı bir artır sayacı bir artır

90  2006 Pearson Education, Inc. All rights reserved Algoritmaları Biçimlendirme: İç-İçe Kontrol İfadeleri(Devam.) Üçüncü adım (Devam.) – Sınav sonuçlarının özetini yazma ve kurs ücretinin yükseltilmesinin gerekli olup olmadığına karar verme işlemini aşağıdaki gibi gerçekleştir. gecenler ‘in sayısını yaz kalanlar ‘ın sayısını yaz Eğer gecenler ‘in sayısı 8 den fazla ise “Kurs Ücretini Yükselt” yaz

91  2006 Pearson Education, Inc. All rights reserved. 91 Fig | Sınav sonuçları problemi için Pseudocode.

92  2006 Pearson Education, Inc. All rights reserved. 92 Outline fig04_16.cpp (1 of 1)

93  2006 Pearson Education, Inc. All rights reserved. 93 Outline fig04_17.cpp (1 of 2) sinavSonucuIncele fonksiyonunun yerel değişkenlerini tanımla

94  2006 Pearson Education, Inc. All rights reserved. 94 Outline fig04_17.cpp (2 of 2) Sınav sonucu bir önceki adımda girilmiş olan öğrencinin geçip geçmediğini belirle ve buna uygun olan değişkeni bir artır. 8 öğrenciden daha çoğunun geçip geçmediğini kontrol et.

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

96  2006 Pearson Education, Inc. All rights reserved. 96 Outline fig04_18.cpp (2 of 2) Sekizden fazla öğrenci sınavı geçti.

97  2006 Pearson Education, Inc. All rights reserved Atama Operatörleri Atama ifadeleri kısaltmaları – Toplama atama operatörü Örnek: – c = c + 3; kısaltılmış hali  c += 3; İfadelerin biçimi degişken = değişken operatör ifade ; Aşağıdaki şekilde de yazılabilir: değişken operatör = ifade ; Diğer atama operatörleri – d -= 4 (d = d - 4) – e *= 5 (e = e * 5) – f /= 3 (f = f / 3) – g %= 9 (g = g % 9)

98  2006 Pearson Education, Inc. All rights reserved. 98 Fig | Matematiksel Atama Operatörleri

99  2006 Pearson Education, Inc. All rights reserved Artırma ve Azaltma Operatörleri Artırma Operatörü : ++ – Değişkeni bir artırır Örnek c++ Azaltma Operatörü : -- – Değişkeni bir azaltır Örnek c--

100  2006 Pearson Education, Inc. All rights reserved Artırma ve Azaltma Operatörleri (Devam.) Önartırma – Operatör değişkenden önce yazılır ( ++c or --c ) – Önce değişkenin değeri 1 artırılır sonra işlem yeni değerle yapılır. Sonartırma – Operatör değişkenden sonra yazılır. ( c++ or c-- ) – Önce işlem eski değerle yapılır sonra değişkenin değeri 1 artırılır.

101  2006 Pearson Education, Inc. All rights reserved. 101 Fig | Increment and decrement operators.

102  2006 Pearson Education, Inc. All rights reserved. 102 İyi Programlama Örneği 4.8 Tekli artırma ve azaltma operatörlerinde değişkenle operatör arasına boşluk konulmaz.

103  2006 Pearson Education, Inc. All rights reserved. 103 Outline fig04_21.cpp (1 of 1)

104  2006 Pearson Education, Inc. All rights reserved Artırma ve Azaltma Operatörleri (Devam.) c = 5, – cout << ++c; c nin değeri 6 olur Sonra 6 yazar – cout << c++; 5 yazar ( cout artırmadan önce çalışır) c sonra 6 olur

105  2006 Pearson Education, Inc. All rights reserved Artırma ve Azaltma Operatörleri (Devam.) Değişken bir işlem içinde değilse – Önartırma ve sonartırma arasında bir fark olmaz Örnek – ++c; cout << c; ve c++; cout << c; – aynı sonucu verir.

106  2006 Pearson Education, Inc. All rights reserved. 106 Genel Programlama Hatası Artırma veya azaltma operatörlerini bir değişken yerine bir işlemin yanına yazmak Örn: ++(x + 1), yazılım hatasına neden olur.

107  2006 Pearson Education, Inc. All rights reserved. 107 Fig Operatörler arası öncelikler.


" 2006 Pearson Education, Inc. All rights reserved. 1 4 4 Kontrol Yapıları: 1.Bölüm." indir ppt

Benzer bir sunumlar


Google Reklamları