Şub062010

Sizce hata nerede?

Yazan : Zafer    06.02.2010 | Yazılım

Hepimiz kodlamalar esnasında fark edemediğimiz durumlar için önlem almayı unuturuz. Bu çok normal bir durumdur, çünkü oluşacağını bildiğimiz bir durum için elbette hepimiz bir şekilde bir önlem alabiliriz. Bir diğeri ise istisna olarak oluşabilecek durumlardır ki bunlara da programlama dillerinin sunduğu istisna yakalama yöntemlerini kullanarak engel olmaya çalışırız. Ancak bazı hatalar vardır ki bunlar en tehlikeli olanlardır. Ben bunlara sinsi hatalar diyorum, programlamada ise mantık hataları olarak biliriz. Gerçekte bir hata uyarısı verip kendilerini göstermezler ama bizim istediğimiz sonuç yerine farklı bir sonuç üreterek herşey yolundaymış gibi gösterirler, oysa hata oradadır ve işlem hatalıdır.

Biliyoruz ki bilgisayar programlama tarihinde kod yazan geliştiriciler bazen gerçekten çok büyük sorunlara yol açan küçük hatalar yapmışlardır. Hatta bu hataların derlendiği bir listeyi daha önceki yazılarımda bu site üzerinden sizlere sunmuştum. Bu arada bu küçük hataları gördüğünüzde bu hataları ben yapmam diye düşünebilirsiniz ama emin olun hepimiz bir şekilde bu basit ve küçük hataları yapıyoruz. Okumak isterseniz işte size o yazımın bağlantısı buradan buyurun.

Bugün bu kadar büyük olmamakla birlikte kendi kodladığım bir fonksiyonda meydana gelen hatayı sizlerle paylaşmak istedim. Amacım bu basit hatanın belkide herkesin karşısına bir gün çıkabileceği gerçeğini göstermek. Sizden ricam bu fonksiyonda yer alan hatayı sizlerin bulması ve telafi edilmesi için gerekli yöntemide yorumlarınızda paylaşmanız. Fonksiyonumuzu kısaca tanıtmak gerekirse, fonksiyonun amacı sayısal bir değer içinde bulunan virgülden (,)  sonraki basamakları kaldırmak. Örnek vermek gekerkirse 120,55 sayısı fonksiyonumuzdan çıktığında 120 olmalıdır. Yani virgülden sonraki kısmı atıp kalan kısmı fonksiyonu çağrıran yere veriyoruz. Fonksiyonumuz ise aşağıda, fonksiyon c# ile kodlanmıştır.

private string TutarTemizle(string ToplamTutar)
{
   string Tutar = "0";

   if (ToplamTutar != null)
   {
      if (ToplamTutar.IndexOf(',') > 0)
         Tutar = ToplamTutar.Substring(0, ToplamTutar.IndexOf(','));
   }
   
   return Tutar;
}

Peki, hata nerede? Bu fonksiyon gayet başarılı çalışıyor ama bazı değerler için hatalı sonuç döndürüyor. Siz hatalı sonuç döndürdüğü örnek bir değeri, neden sonucun hatalı olduğunu ve tasarımdaki hatayı bulabilecek misiniz?



Etiketler: ,

E-mail | Permalink | Trackback | Post RSSRSS comment feed 0 Yorum

Kas082008

Başka bir yarışma oyunu...

Yazan : Zafer    08.11.2008 | C Notları

Biliyor veya bilmiyorsunuz, bir süredir C ile ilgileniyorum. Şu zamana kadar ağırlıklı olarak Delphi ve C# Mobil projeleri geliştirdim ama hep içimde olan C aşkına en sonunda yenildim ve bir süredir C ile ilgileniyorum. Bu süre zarfında hem öğrendiklerimi pekiştirmek hemde ortaya derli toplu bir proje çıkartmak amacıyla kolları sıvadım ve bir oyun yazmaya niyetlendim. Ancak piyasada bolca bulunan tetris, yılan veya Blackjack yerine televizyondan da aşina olduğumuz var mısın, yok musun yarışma programının formatını C dilini kullanarak bilgisayara aktarmaya çalıştım.

Oldukça keyifli geçen saatlarin sonunda programı tamamladım. Bu proje esnasında özellikle for döngüsü ile iyice kaynaştığımı söyleyebilirim. Bir döngü deyip geçmeyin bazen insanı çileden çıkarıyor. Özellikle iç içe geçmiş for döngüleri oldukça tehlikeli çok dikkat etmenizi salık veririm. Bir diğer husus tabi ki diziler, bu proje sayesinde dizilerlede oldukça yakından ilgilenmek durumunda kaldım. Bunun yanında #define önişlemcisinin gerçekten işe yaradığını görmekte sevindirici (Elbette işe yaradığını biliyorum ama küçük projelerde pek görünmüyor). Ayrıca char* şeklinde tanımlanan karekter katarları ile işlemler ve fonksiyonlara gösterici geçilmesi gibi konularda proje boyunca beni meşgul eden diğer konular oldu. Projenin çalışan dosyasını ekte bulabilirsiniz.Proje ekran görüntileri ise aşağıda;

 

 

 

 

 

 

 

 

Çalıştırılabilir dosyayı indir -> VarYok2.rar (93,93 kb)



Etiketler: , ,

E-mail | Permalink | Trackback | Post RSSRSS comment feed 0 Yorum