Orhan Gazi Kılıç

"Allah'ım sen beni, milletime ve devletime faydam dokunmadan alma"

Olaylı Sorunun Cevabı

Yazar: Orhan Gazi KILIÇ — 14 Aralık 2010 Salı — Saat: 19:40:00

     Bir önceki "1 mi 1,5 mu" adlı yazımda bir şeyler zırvalamışım. Evet gerçekten zırvalamışım. Belki de 25 puanı böyle basit bir şekilde kaybetmemeye odaklandığım içindir. Her ne olursa olsun, yine de böyle bir hatanın içine düşmek biraz kafa bulanıklığı biraz da çileli bir baş istiyor. Ama bende gurbetten başka hiçbir şey yokken böyle basit bir hatayı yapmak olmaz. En azından kendimi savunma saniyisinde bir mühendis olarak düşünürken... Belki de mühendis olduğumda bu yazı birgün gözüme çarpıp gülümseyeceğim. Yapacak bir şey yok, dalgınlık diyelim geçelim... Şimdi de düzeltme zamanı. Bir önceki yazımda ki soruyu aynen alayım:
---
Soru C'de yazılıyor ve şöyle:
#include
int main(void){
int bolunen, bolen;
float bolum;
bolunen = 12;
bolen = 8;
bolum = bolunen/bolen;
printf("Sonuc: %f", &bolum);
getch();
return 0;
}
Programının çıktısı nedir?
---
Program bu. Şimdi burada düşülmemesi gereken basit bir tuzak var. Gerçekte sonuç 1,5 fakat programın çıktısı: "Sonuc: 1.000". Nedeni ise casting dönüştürme (lütfen ricam sizden casting olarak kullanmamanızdır.) işlemini yapmamamız. Peki nasıl dönüştüreceğiz ve niçin...
Bir tam sayı tam sayıya bölününce sonuç ondalık sayı olarak da çıkabilir. Sonuc, yani bölüm ondalık değer (float) olarak tanımlansa da, bolen ve bolunen birer tam sayı (integer) olduğundan sonuç da tam sayı olarak çıkacaktır. Biz dönüştürme işlemini uygulamazsak değerimizin türü her kadar ondalık sayı da olsa bize tam sayı olarak döner. Yani virgülden sonra 0000~ diye devam eder. Dönüştürme işlemini vigülden sonraki rakamların doğru olarak görüntülenmesi için uygulayacağız ki onu da bolum değerinin işlemini yapmadan hemen önce yapmalıyız. Şöyle ki:
...
bolum = (float)bolunen/bolum;
...
İşte şimdi programın çıktısı bize gerçek hayattaki gibi yansıyacaktır. Şu şekilde:
Sonuc: 1,5


#orhangazikılıç #yazılımcı #programcı #mühendis #oyuncu #vatanperver