Bölüm 3: C ile Yapısal Program Geliştirme

3.1 Giriş

Belirli bir problemi  çözmek için program yazmaya başlamadan önce, problemi eksiksiz olarak anlama ve dikkatli bir şekilde çözüm yaklaşımı planlamak zorundayız.

3.2 Algoritmalar

Bir bilgisayar programında ifadelerin hangi sırada yürütüleceğini belirlemeye program kontrolü denir.

3.3 Sözde Kod

Sözde kod algoritma geliştirmemize yardımcı olan yapay ve gayri resmi bir dildir.

3.5 if Seçim İfadesi

if ( grade >= 60){
puts(“Passed”);
}

3.6 if…else Seçim İfadesi

if ( grade >= 60) {
puts( “Passed” );
}

else {
puts( “Failed” );
}

C, if…else ifadesi ile yakından ilgili olan koşullu işlem (?:) sağlar. Koşullu işlem C’nin tek üçlü işlemidir.-üç terimi vardır- İlk terim bir koşuldur. İkinci terim koşul doğruysa, son terim koşul yanlışsa gerçekleştirilecek ifadenin değeridir.

puts ( grade >=60 ? “Passed” : “Failed” );

else if Kullanımı

if ( grade >= 90 ) {
puts( “…” );
}

else if ( “grade >= 80 ” ) {
puts ( “…” );
}

else {
puts ( “…” );
}

3.7 while Tekrarlama İfadesi

Bir tekrarlama ifadesi koşullar doğru olduğu surece tekrar edilecek eylem belirtmenize izin verir.

product=3;

while(product <=100){
product = product *3; // Koşul doğru olduğu sürece döngü çalışır.
} // product değişkeni sırayla 9, 27, 81 ve 243 değerini alır. Son değer 243 olur.

Yaygın Programlama Hatası 3.1

while ifadesinin gövdesinde, en sonunda while’daki koşuşun yanlış olmasına neden olacak bir eylem belirtmemek sonsuz döngüye neden olacaktır.

Yaygın Programlama Hatası 3.4

Eğer bir sayaç veya toplama başlangıç değeri verilmezse, programın sonucu muhtemelen yanlış olacaktır. Bu bir mantık hatası örneğidir.

İyi Programlama Uygulaması 3.3

Değeri sıfır olabilecek bir ifadeye bölme olduğu zaman sonlandırıcı bir hata olmasına izin vermek yerine bu durumu belirgin bir şekilde karşılaştırın ve programınızda uygun bir şekilde ele alın. (bir hata mesajı gönder)

Yazılım Mühendisliği Gözlemi 3.3

Birçok program mantıksal olarak üç kısıma bölünebilir; program değişkenlerinin başlangıç değerlerini atayan başlangıç kısmı, veri değerlerini giren ve uygun bir şekilde program değişkenlerini ayarlayan işlem kısmı ve sonuçları hesaplayan, yazan, sonlandırma kısmı.

Türler Arasında Açık ve Dolaylı Dönüşüm

Tür dönüşüm işlemi çoğu veri türüne uygulanır. - tür ismi etrafına parantez koyarak oluşturulur - Her bir tür dönüşüm işlemi tekil işlemdir, yani, tek bir terimi olan bir işlemdir.

avarage = float(total) / counter;

Ondalık Sayıları Biçimlendirme

printf( “ %.2f ”, 3.446 ); // 3.45 yazar.

printf( “ %.1f ”, 3.446 ); // 3.4 yazar.
3.13 Güvenli C Programlama

Aritmetik Taşma

sum = integer1 + integer2;

Yukarıda basit gibi görünen ifadenin bile potansiyel bir problemi vardır. Tam sayıları toplama, bir int değişkeninde saklanacak aşırı büyük bir değerle sonuçlanabilir. Bu aritmetik taşma olarak bilinir ve belkide sistemi saldırılara açık bırakma gibi tanımlanmamış davranışlara neden olabilir.

En büyük ve en küçük değerler <limits.h> başlığı altında INT_MAX ve INT_MIN sabitleri ile tanımlanmıştır.

Bu başlık dosyası açılarak veri tipleri için bu değerler görüntülenebilir.

Endüstriyel amaçlı kodda, tüm hesaplamalar için karşılaştırmalar yapılarak bu hatalardan kaçınılmalıdır.

İşaretsiz Tam Sayılar

Örneğin notlar 0’ dan 100’ e değerdedir, bu nedenle total ve average’ dan her biri 0’dan büyük ya da eşit olmalıdır. Kullanıcın gerçekte ne gireceğini kontrol edemediğimiz için bu değişkenleri int olarak tanımladık. Kullanıcı negatif değer girebilir, daha kötüsü kullanıcı sayı olmayan  değer bile girebilir. Bu durumların nasıl ele alınacağı ilerleyen kısımlarda anlatılacaktır.

Sonlandırma kontrollü döngülerde bir döngüyü sonlandırmak için geçersiz değer kullanılır. Örneğin sınıf ortalaması alma programında kullanıcı -1 sonlandırma değerini girdiğinde döngü sonlanır. Bu nedenle grade değişkenini unsigned int olarak tanımlamak doğru olmayacaktır. Göreceğiniz gibi dosya sonu işaretçisi ( EOF-end-of-file ) gelecek bölümde anlatılacaktır. EOF aynı zamanda negatif bir sayıdır. Daha fazla bilgi için Robert Seacord ’un Secure Codding in C and C++ kitabının Integer Security isimli 5.bölümüne bakınız.

scanf_s ve printf_s

C11 standartının K eklentisi, printf_s ve scanf_s kullanımının printf ve scanf’ e göre daha güvenlidir.

Etiketler
Yorumlar (0)
Yorum Yap
Reklam

Buraya reklam verebilirsiniz. Detaylı bilgi için lütfen iletişime geçiniz.