Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
4 Kontrol Yapıları: 1.Bölüm
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
4.1 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
4.1 Giriş Program yazmaya başlamadan önce Bir programı yazarken
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
4.2 Algoritmalar Algoritmalar Program kontrolü
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
4.3 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
Fig. 4.1 | Fig. 2.5 deki toplama programı için Pseudocode.
8
4.4 Kontrol yapıları Sıralı yürütme Kontrol transferi
İ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
4.4 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
4.4 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
Fig. 4.2 | Sıralı-yapı akış diyagramı
12
4.4 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
Fig | C++ keywords.
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
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
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
4.5 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
4.5 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
İ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
Fig. 4.4 | Tek-seçimlik if ifadesinin akış diyagramı
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
4.6 if…else İkili seçim ifadesi
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
İ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
İyi Programlama Örneği 4.3
Eğer birden çok girinti seviyesi varsa , her seviyenin girintisi aynı miktarda boşluk içermelidir.
25
Fig. 4.5 | if...else ikili seçim ifadesinin akış diyagramı
26
4.6 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 << ( notu >= 60 ? “Geçti” : “Kaldı” ); Koşul Doğruysa yapılacak işlem Yanlışsa yapılacak işlem
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
4.6 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
4.6 if…else İkili seçim ifadesi (Devam.)
İç-içe if…else ifadeleri (Devam.) C++ Kodu if ( notu >= 90 ) cout << "A"; else if (notu >= 80 ) cout << "B"; else if (notu >= 70 ) cout << "C"; else if ( notu >= 60 ) cout << "D"; else cout << "F";
30
4.6 if…else İkili seçim ifadesi (Devam.)
İç-İçe if…else ifadeleri (Devam.) C++ Kodu (Farklı girinti yöntemiyle) if ( notu >= 90 ) cout << "A"; else if (notu >= 80 ) cout << "B"; else if (notu >= 70 ) cout << "C"; else if ( notu >= 60 ) cout << "D"; else cout << "F";
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
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
4.6 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 << "x and y are > 5"; else cout << "x is <= 5"; Derleyici else ‘i aşağıdaki gibi algılar. if ( x > 5 ) if ( y > 5 ) cout << "x and y are > 5"; else cout << "x is <= 5";
34
4.6 if…else İkili seçim ifadesi
Yeri belli olmayan else problemi(Devam.) Küme parantezlerini kullanın ({}) if ( x > 5 ) { if ( y > 5 ) cout << "x and y are > 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
4.6 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
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
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
İ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
4.6 if…else İkili seçim ifadesi (Devam.)
Boş ifade Bir ifadenin gelmesi gereken yere noktalı virgül (;) konulması. Hiçbir işlem yapmaz
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
4.7 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
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
4.7 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
Fig. 4.6 | while tekrar ifadesi için UML akış diyagramı.
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
4.8 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
4.8 Algoritmaları biçimlendirme: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
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
Fig. 4.7 | Sınıf ortalaması problemini çözmek için sayaç kontrollü tekrarı kullanan Pseudocode
50
Outline fig04_08.cpp (1 of 1) sinifOrtalamasiBul() fonksiyonu pseudocode’ da tanımlananan algoritmayı uygular.
51
Outline fig04_09.cpp (1 of 3) Eğer isim 25 karakterden fazla ise, ilk 25 karakterini seç.
52
Outline fig04_09.cpp (2 of 3) sinifOrtalamasiBul() fonksiyonu pseudocode’ da tanımlananan algoritmayı uygular Toplam değişkenini tanıt. sayac değişkenini tanıt
53
Outline Girilen notu toplam ‘a ekle (3 of 3)
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.
54
Outline fig04_10.cpp (1 of 1)
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
4.8 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
Genel Programlama Hatası 4.6
Sayaçlara veya toplam değerlerine ilk değer atanmaması mantık hatalarına neden olabilir.
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
İ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
Genel Programlama Hatası 4.7
Tamsayı bölme sonucunun yuvarlandığını düşünmek yanlış sonuçlara neden olabilir. Örnek: Aritmetik olarak 7 4 = tir. C++ da bu tamsayı bölümünün sonucu 1 dir , 2 değildir.
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
4.9 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
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
4.9 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ü. 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
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
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
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
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! "<<endl; } cout << 100/bolen ;
69
4.9 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. 4.11 Ö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
Fig | Gözcü kontrollü tekrar yöntemini kullanan sınıf ortalaması bulma probleminin pseudocode algoritması.
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
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
4.9 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 : / 23 Yakın değer : 2, Daha yakın değer : 2,
74
Outline fig04_12.cpp (1 of 1)
75
Outline Fixed çıktının sabit noktalı düzende olmasını sağlar. (1 of 4)
fig04_13.cpp (1 of 4) <iomanip> kütüphanesindenki setprecision komutu çıktı duyarlığını belirler.
76
Outline fig04_13.cpp (2 of 4)
77
Outline sinifOrtalamasiBul() fonksiyonu , pseudocode’ da belirtilen sınıf ortalaması algoritmasının uygulamasıdır. fig04_13.cpp (3 of 4) Değişkenleri tanımla : int değişkenler : toplam, sayac, not double değişkenler: ortalama while döngüsü , -1 notu girilmediği sürece içerisindeki işlemi tekrar eder.
78
Outline static_cast< double > (4 of 4)
fig04_13.cpp (4 of 4) static_cast< double > Kullanarak gerekli çevrimi gerçekleştir.
79
Outline fig04_14.cpp (1 of 1)
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
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
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
4.9 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< double > ( toplam ) Toplam’ın geçici bir kayan noktalı sayı kopyasını oluşturur.
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
4.9 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 × 103) tam tersi.
86
4.10 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
4.10 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
4.10 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
4.10 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
4.10 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
Fig. 4.15 | Sınav sonuçları problemi için Pseudocode.
92
Outline fig04_16.cpp (1 of 1)
93
Outline fig04_17.cpp (1 of 2) sinavSonucuIncele fonksiyonunun yerel değişkenlerini tanımla
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
Outline fig04_18.cpp (1 of 2)
96
Outline fig04_18.cpp (2 of 2) Sekizden fazla öğrenci sınavı geçti.
97
4.11 Atama Operatörleri Toplama atama operatörü
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 -= (d = d - 4) e *= (e = e * 5) f /= (f = f / 3) g %= (g = g % 9)
98
Fig. 4.19 | Matematiksel Atama Operatörleri
99
4.12 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 c--
100
4.12 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
Fig. 4.20 | Increment and decrement operators.
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
Outline fig04_21.cpp (1 of 1)
104
4.12 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
4.12 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
Genel Programlama Hatası 4.14
4Artı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
Fig. 4.22 Operatörler arası öncelikler.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.