C'de Sayıların Kuvvetini Hesaplama(Acil Yardım)

kuma
05-09-2010, 18:18   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010

Merhaba arkadaşlar.
C dilinde pow() fonksiyonunu kullanmadan sayıların kuvvetlerini hesaplayacak bir program yazmaya çalışıyorum.Programın pozitif kuvvetlerde sorunsuz çalışırken bir türlü negatif kuvvtelerde çalıştıramadım.Negatif kuvvetler için uygun bir döngü yazmama rağmen her zaman sonuç sıfır çıkmaktaydı.Örneğin iki üzeri ikiyi hesaplayabilirken, 2 üzeri -2 sonucunu sıfır bulmakta.

[ Tüm kodu seç ] [ Yeni Pencerede Göster ]
#include<stdio.h> #include<conio.h> usal(double a,int b) {     double sonuc=1;     int i;     if(b<0)     {         for(i=0;i>b;i--)         {             sonuc*=1/a;//burası sıfır sonucu çıkınca burayı sonuc*=a bicminde düzelttim         }         //sonuc=1/sonuc şeklinde bir ekleme yaptım.Ama gene aynı sonuç çıktı     }     else     {         for(i=0;i<b;i++)     {         sonuc*=a;     }     }     return sonuc; } main() {     double sonuc,taban;     int us;     deger:     system("cls");     printf("Taban ve us degerlerini giriniz.\n");scanf("%lf%d",&taban,&us);     if(taban==0 && us==0)     {         printf("Sifir uzeri sifir belirsizdir.Deavm etmek icin bir tusa basiniz.\n");         getch();         goto deger;     }     sonuc=usal(taban,us);     printf("Sonuc:%f",sonuc);     getch();return 0; }
Başka forumlarda da sordum ama yanıt alamadım.Şimdiden teşekkürler.

censez41
05-09-2010, 19:24   |  #2  
censez41 avatarı
Yıllanmış Üye
Teşekkür Sayısı: 3
1,705 mesaj
Kayıt Tarihi:Kayıt: Nis 2009

eksili sayılarda üst nasıl alınıyor du  biraz açarsan belki bir program yazabilirim :)))

Son Düzenleme: censez41 ~ 05 Eylül 2010 19:26
kuma
05-09-2010, 20:37   |  #3  
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Eyl 2010
Alıntı: censez41  
eksili sayılarda üst nasıl alınıyor du  biraz açarsan belki bir program yazabilirim :)))
Bir sayının kuvveti eksi ise o sayının kuvveti normal sayılar gibi hesaplanır sonra çarpma işlemine göre tersi alınır.Yani 3 üzeri -2  1/9 eder.
if(b<0)
    {
        for(i=0;i>b;i--)
        {
            sonuc*=1/a;
        }
Bu kod ile bunu hesaplamaya çalıştım ama kuvvet negatifken sonuç sıfır çıktı.Diğer durumlarda hatasız çalışıyor.Hatta kullanıcı taban ve kuvvet değerleri için sıfır sayılarını girince bunun bir belirsizlik olduğunu ve tekrar değer girmesini istiyor program.Çözemediğim tek nokta üste verdiğim kod parçasında acaba nerede hata yaptım.

censez41
11-09-2010, 22:31   |  #4  
censez41 avatarı
Yıllanmış Üye
Teşekkür Sayısı: 3
1,705 mesaj
Kayıt Tarihi:Kayıt: Nis 2009

matamatiğin gözü kör olsun bizim  qbasic hocasıda öyle sorular sorardıki matamatik bilmeyen programı yazamaz 3 yada 4 tür komut ve bol hesaplama içeren programlar yazdırırdı kendilerini kınıyorum.

Canlas
16-09-2010, 01:29   |  #5  
Yıllanmış Üye
Teşekkür Sayısı: 0
362 mesaj
Kayıt Tarihi:Kayıt: Ağu 2004

şimdi ben c++ ta yazdım tam olarak çalışıyor.sennkinde bi kaç düzeltme yaptım oda sonuc veriyor
bu sennki
#include<stdio.h>
#include<conio.h>
double usal(double a,int b)
{
    double sonuc=1;
    int i;
    if(b<0)
    {
        for(i=0;i>b;i--)
        {
            sonuc*=1/a;//burası sıfır sonucu çıkınca burayı sonuc*=a bicminde düzelttim
        }
        //sonuc=1/sonuc şeklinde bir ekleme yaptım.Ama gene aynı sonuç çıktı
    }
    else
    {
        for(i=0;i<b;i++)
    {
        sonuc*=a;
    }
    }
    return sonuc;
}
int main()
{
    double sonuc,taban;
    int us;
    deger:
    printf("Taban ve us degerlerini giriniz.\n");scanf("%lf%d",&taban,&us);
    if(taban==0 && us==0)
    {
        printf("Sifir uzeri sifir belirsizdir.Deavm etmek icin bir tusa basiniz.\n");
        getch();
        goto deger;
    }
    sonuc=usal(taban,us);
    printf("Sonuc:%f",sonuc);
    getch();return 0;
}

buda c++

#include
#include

using namespace std;

double us,sayi,i,sonuc;


void usal(double sayi,double us)
{

    if(us>0)
    for(i=1;i<=us;i++)
    {
        (sonuc*=sayi);
    }
    else if(us<0)
        for(i=-1;i>=us;i--)
        {
            (sonuc*=sayi);
        }

}
int main()
{
    sonuc=1;
    cout<<"kuvveti alınacak sayıyı giriniz"<
    cin>>sayi;
    cout<<"kaçıncı kuvveti alınacapını giriniz"<
    cin>>us;
        if(us==0)
        {
          cout<<"1";
        }
        else if(us>0)
        {
            usal(sayi,us);
            cout<
        }
        else if(us<0)
        {
            usal(sayi,us);
            sonuc=1/sonuc;
            cout<
        }
        system("pause");


}

muh34
24-10-2010, 22:33   |  #6  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yukarıdaki C kodunu yayımlayan arkadasımıza tesekkur ederek bir noktada 0'a bolum hatasını duzeltebiliriz.Şayet tabanın 0 ve us degerinin negatif oldugu bir durumda program 0'a bolme hatası(division by zero error) verecektir.Yukarıdaki programın 7.satırındaki if() kosulunun hemen ardından,
if(a==0) return 0; ifadesi eklendiginde sorun manual olarak cozulecektir.
 
Aynı durum C++ ile yazılan kod icinde gecerlidir.main() fonksiyonu icerisinde us degerinin 0'dan kucuk oldugu durumda,sonuc=1/sonuc ifadesi tek bir durumda calistirilmamalidir.Bu ihtimal tahmin edilebilecegi gibi sayinin 0 olmaması durumda gerceklesecektir.O halde sonuc=1/sonuc ifadesinin if(sayi!=0) karar yapısı bagdastirildiginda program %100 sonuc alma kabiliyetine ulasmis olacaktır.
Başarılar