Çözüldü C'de doğru yazdığım kod çalışmıyor

  • Konuyu başlatan Spoop
  • Başlangıç Tarihi
  • Mesaj 9
  • Görüntüleme 2.629
Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Spoop

Megapat
Katılım
29 Temmuz 2015
Mesajlar
529
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Altta gördüğünüz gibi yazdığım kod sonuç kısmıni ekrana yazdırmıyor. Üs ve taban yazdırılıyor ama sonuç kısmı yok neden nerede hata yapıyorum?

Kod:
#include <stdio.h>

#include <math.h>





int main() {


int x,y;

int sonuc;


printf("Taban: ");

scanf("%d",&x);


printf("Us: ");

scanf("%d",&y);


sonuc = pow(x,y);

scanf("sonuc: %d",sonuc);


return 0;
}
 
Çözüm
Pow fonksiyonu double bir değer döndürüyor ama senin sonuç değişkenin integer. Hata buradan olmuş olabilir. Bir de sonda printf olacak scanf değil.
Sorun anlatılmış. Takıldığınız bir yer olabilir diye kod şeklinde de paylaşıyorum.
Bu konu hakkında başka sorunuz veya kodda anlamadığınız bir yer varsa sorabilirsiniz.

Kod:
#include <stdio.h>
#include <math.h>

int main(){
    int x = 0;
    int y = 0;

    printf("Taban: ");
    scanf("%d", &x);
    
    printf("Us: ");
    scanf("%d", &y);
    
    printf("Sonuc: %.f", pow(x, y));
    return 0;
}
 
Pow fonksiyonu double bir değer döndürüyor ama senin sonuç değişkenin integer. Hata buradan olmuş olabilir. Bir de sonda printf olacak scanf değil.
printf(); konusunda haklısınız hocam, fakat bir eksikliği tamamlamak istiyorum; double'dan int'e örtülü (implicit) dönüştürme yapıldığı zaman sonuç tamsayı çıkmalı. Örneğin, pi sayısını (3.1415 alıyorum) verdiğini farz edersek bu programın, 3.1415 yerine 3 yazdırmalıydı.

Bu koddaki hata, sonda printf(); yerine scanf(); fonksiyonunun kullanılmasından kaynaklı. Ayrıca pow(); fonksiyonunun dönüş değerini değişkende tutmaya gerek bile yok. Şöyle bir kod yazılsa gayet te iş görür.

C:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(){
    double sayi1, sayi2;
    printf("Sayi 1 giriniz: ");
    scanf("%lf", sayi1);
    printf("\nSayi 2 giriniz: ");
    scanf("%lf", sayi2);
    printf("Sonuc : %lf",pow(sayi1, sayi2));
    return 0;
}
 
Sorun anlatılmış. Takıldığınız bir yer olabilir diye kod şeklinde de paylaşıyorum.
Bu konu hakkında başka sorunuz veya kodda anlamadığınız bir yer varsa sorabilirsiniz.

Kod:
#include <stdio.h>
#include <math.h>

int main(){
int x = 0;
int y = 0;

printf("Taban: ");
scanf("%d", &x);

printf("Us: ");
scanf("%d", &y);

printf("Sonuc: %.f", pow(x, y));
return 0;
}

Bu işte çok yeniyim, o yüzden son kısmı pek anlayamadım. Neden printf içine yazdık pow fonksiyonunu?
 
Çünkü sadece yazdırmak istiyorsunuz. Boşuna bir değişkende tutup bellekte yer kaplamaya gerek var mı?

Başka yerde de kullanacak olsanız o zaman değişkene atardık çünkü o zaman da iki kere hesaplama yaptırmış olurduk, iki kere hesaplamaya gerek yok. Hangisi daha verimli ise onu yapıyoruz, yapmaya çalışıyoruz.

Ufak bir not: Değişkenlerinizi ilklendirin (initialize). x ve y değişkenlerine sıfır vermem gibi.
İleride saçma bir yerde hata çıkar, sebebi ilk değerinin olmaması olur. Gerek yok.
 
Çünkü sadece yazdırmak istiyorsunuz. Boşuna bir değişken de tutup bellekte yer kaplamaya gerek var mı?

Başka yerde de kullanacak olsanız o zaman değişkene atardık çünkü o zaman da iki kere hesaplama yaptırmış olurduk, iki kere hesaplamaya gerek yok. Hangisi daha verimli ise onu yapıyoruz, yapmaya çalışıyoruz.

Ufak bir not: Değişkenlerinizi ilklendirin (initialize). X ve Y değişkenlerine sıfır vermem gibi.
İleride saçma bir yerde hata çıkar, sebebi ilk değerinin olmaması olur. Gerek yok.

Anladım sayılır. Ama pek kapsamlı bilmiyorum okulda gördüğümüz için. Ekstra kendim de bir şeyler katmaya çalışıyorum. Öneriniz var mı? Nasıl daha iyi olurum?
 
Anladım sayılır ama pek kapsamlı bilmiyorum okulda gördüğümüz için ekstra kendim de bir şeyler katmaya çalışıyorum öneriniz var mı nasıl daha iyi olurum.
Algoritma ve veri yapılarına odaklanmanızı tavsiye ederim. Dili kitaptan yapacaksanız Deitel'ın C programlama kitabını, video ile yapmak istiyorsanız da şu oynatma listesini tavsiye ederim.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı