Problem Çocuk Gene İş Başında
(: Başlığa göre problemi yaratan benmişim gibi düşünülebilir. Ama aslında problemin ortaya konulmasında suçlu ben değilim. Ben sadece yaygara yaptım ve Bilgisayar mühendisi olacak arkadaşların bu konudaki eğilimini ölçtüm ![]()
Problemin çözümünü beyin fırtınası yaparak bulduğumuz sınıf arkadaşım Özge‘ye teşekkürler.
Ve sonuç Ön yargılarımız (ki buna bildiğimiz matematik sebep oldu) bizi bir kez daha yendi. Aslında ortada sorun teşkil edecek bir durum yoktu. Ya biz çok dikkatsizdik ya da kendimize çok fazla güveniyorduk. Hani demişler ya her şeyin fazlası zarar diye bu da aynen öyle bir durum
Şimdi gel gelelim esas probleme
float sayi=9/5;
cout<<sayi;
programının çıktısı ne olur dedim. Cevap verenlerin hemen hemen hepsi 1.8 dedi. Aslında bana göre de haklılardı. ilk duyduğumda ben de 1.8 basar ekrana demiştim. Ama öyle olmuyormuş denedim gördüm.
Çıktı : 1
Eğer 1.8 değilse tüm C++ bilgimi çöpe atarım diyen bile çıktı. Kod’u ona da derlettim, diğer herkes gibi suçu o da cout’a attı hemen. cout tam sayı alır sadece dediler.
Muziplik kanımda var. Madem öyle yeni program işte böyle dedim:
float sayi=9/5;
printf(“%f”,sayi);
Buna verdikleri cevapsa 1.800000 olur. (Float sayı default olarak nokta’dan sonra sayıyı 6 basamağa tamamlar.)
Ama az kalsın tutturuyorlardı (: ama malesef çıktı o da değildi.
Çıktı 2: 1.000000
Allah allah, nerde hata yapıyoruz? Halbuki 1.8 çıkacağından o kadar emindik. cout’a hata bulanlar bu sefer printf’e hata aramaya başladılar ama nafile
Hatta bildiğim tüm C++’yı çöpe atarım diyenler bile oldu
. İnadım tuttu bi kere
millete kafayı yedirtecem illaki ![]()
Her neyse çeşitli komplo teorileri üretip duruyorlarken bense bilgisayar başında gülme krizlerine girmiştim ki, Batu (Bilgisayar Müh okumuyo) suçu doğrudan bana attı ve çay’ı haketti (:
yazdıklarını değiştirmeden aynen aktarıyorum:
- senın yaptına biz programlama dilnde mallık dioruz floating point ünitesini boşu boşuna kullanıyosun
- sen boşu boşuna doldur die koymamıs
- lazım olursa kullanılsın die koymus
- senın kodunda mantık hatası var bikere
- 9/5 yazmıcan oraya
Aradığım cevap buydu (: ve ardından aç kodu IDA ile dissambly et dedi. Ben de IDA’m yok dedim. o da ben dissambly ettim dedi birkaç dakika sonra.
- 9/5 = 1 birader artanıda ecx registerinde
- ecx noldu sora
- yalan oldu
Vee işte olayın koptuğu an:
- olum sen float tanımlıyosun
- iki tane const bölüosun
ve ben adama dedim ki:
tamam lan senn c++ bilgine bi kere daha saygı duydum
gelen cevap:
iki const bölersen mal der bilgisayar sana
Veee batu haklıydı (: aslında sorudaki büyük mallık bendeydi
ama bilgisayar mühendisliği okuyan öğrencilerin (ki bir kısmı C++ dersini geçse de , ben kalmıştım) matematik biliyorum egolarıyla bilgisayar lojiğini karıştırması sonucunda ortaya böyle bir tablo çıktı. (Bende de var o egolardan çaktırmayın
)
Olayı bir de daha anlaşılır şekilde anlatayım (assembly falan karıştırmadan)
“/” (bölme) operatör’ü c/c++ dillerinde overloaded (aşırı yüklenmiş) operatördür.
aldığı iki değerin türüne göre sonuç üretir.
benim bölme operatörüne verdiğim 9 ve 5 değerleri default olarak int türünde tanımlı olduğu için bölme operatörü tam sayı bölmesi yapar ve sonuçta 1 değerini üretir. 1 değerinin float karşılığı da 1′dir.
İşte aslında bu kadar basit bir olay yüzünden tüm bilgisayar mühendisliği adaylarının başının etini yedim, ama iyi de eğlendim
Dip not:
Yukarıdaki kodlar C/C++ dillerinde yazılmıştır. Bu dillerde 9, 5, 324 gibi const sayılar default olarak int değerine atanır. Bu yazıyı okuduktan sonra bana küfretmek yasaktır. Tamam kabul ediyorum, Batu’nun da dediği gibi “mallık” bende (:
Bu yazı bugün 0, toplamda 58 kez okundu.





Mayıs 12th, 2010 at 19:36
gel sana c++++ ögretim
Mayıs 12th, 2010 at 19:50
Sen bana Autocad öğretecektin !
önce onu öğret (: