Gönderen Konu: Ufak bir sorun;"Programın 5 sayısına olan takıntısı"  (Okunma sayısı 5975 defa)

Çevrimdışı Rıza Özdülger

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 1321
Ufak bir sorun;"Programın 5 sayısına olan takıntısı"
« : Mayıs 16, 2010, 02:30:17 ÖS »
ufaktan ufaga c çalışmalarına başladım ancak yazdığım bir kodda ilginç bir hatayla karşılaştım.yazdığım işlem 5 ve 5in katları haricindeki sayılarda gayet güzel işlerken 5 ve katlarında +3 eklemesi yerine +2 ekliyor.bunun nedeni ne olabilir?

kod huzurlarınızda;

Kod: [Seç]
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
   
    int a, b;
    printf("bir sayi giriniz:\n");
    scanf("%d", &a);
   
    b = pow (a,2)+3;
   
    printf("girilen sayinin karesinin 3 fazlasi:\n%d\n", b);
   
   
    system("PAUSE");
    return 0;
   
   
    }
"İnsanın bildiğini zannettiği bir şeyi öğrenmesi imkansızdır."  (Epiktetos)

Çevrimdışı Ahmet Sakallı

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 2341
Ynt: Ufak bir sorun;"Programın 5 sayısına olan takıntısı"
« Yanıtla #1 : Mayıs 16, 2010, 02:48:17 ÖS »
çünkü pow() fonksiyonu double bir değer return ediyor -> http://www.cplusplus.com/reference/clibrary/cmath/pow/

Çevrimdışı Serhat Büyükçolak

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 1130
  • C bilmeyen adam
Ynt: Ufak bir sorun;"Programın 5 sayısına olan takıntısı"
« Yanıtla #2 : Mayıs 16, 2010, 02:49:53 ÖS »
Konu hakkında çok bilgili değilim ama problemin pow(a,b) fonksiyonundan kaynaklandığını düşünüyorum. Hatta kodu  kendim  üs alma fonksiyonu fonksiyonu yazdım sağlam çalışıyor. Heralde pow a atanılan sayı 5 ve 5 in katı olunca bellekte felan bir problem oluyor bilemeyeceğim.

Çalışan kod;
Kod: [Seç]
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int us_al(int x , int y){  //Yorum satırı:fonksiyon tanımlamaları ya mainin üstünde olur yada main bloğu
    int i,t=1;               //                 üzerinde prototip tanımlanıp main bloğu altında fonksiyon içeriği  tanımlanır.
    for(i=0;i<y;i++)
    t*=x;
    return t;
    
    }

int main(){
    while(1){
    int a, b, c;
    printf("bir sayi giriniz:\n");
    
    scanf("%d", &a);
    
        printf("us giriniz:\n");
    
    scanf("%d", &b);
    
   c = us_al(a,b) +3;
  
  
    printf("girilen sayinin karesinin 3 fazlasi:\n%d\n", c);
}
    
    
    system("PAUSE");
    return 0;
    
    
    }

edit: Ahmet çok güzel cevaplamış :D . b yi enbaşta double tanımlarsan ve yazdırırkende int değil doble yazdırırsan çalışır
« Son Düzenleme: Mayıs 16, 2010, 02:52:53 ÖS Gönderen: Serhat_Buyukcolak »
Sonra neden "C bilmeyen adam" diyorlar, hele bakıverin şuraya; http://plepa.com/2018/12/21/c-biliyor-musunuz/

Çevrimdışı Rıza Özdülger

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 1321
Ynt: Ufak bir sorun;"Programın 5 sayısına olan takıntısı"
« Yanıtla #3 : Mayıs 16, 2010, 02:54:43 ÖS »
teşekkürler oldu double yapınca ;)
"İnsanın bildiğini zannettiği bir şeyi öğrenmesi imkansızdır."  (Epiktetos)

Çevrimdışı D.Çağdaş Akalın

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 2026
Ynt: Ufak bir sorun;"Programın 5 sayısına olan takıntısı"
« Yanıtla #4 : Mayıs 16, 2010, 02:56:58 ÖS »
ya o double denemesini ben de yaptımda çok türk işi geldi bana ya :)
Eğitim cehaleti alır eşşeklik baki kalır