folder Tahribat.com Forumları
linefolder C - C++
linefolder Yüksek Sayıların Faktöriyeli 0 Veriyor



Yüksek Sayıların Faktöriyeli 0 Veriyor

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    bilenyok
    bilenyok's avatar
    Kayıt Tarihi: 17/Eylül/2009
    Erkek

    Faktoryel 10'a 0 diyor mesela..Bi nedeni vardı,int değerlerin uzunlugu hakkında..Neydi hocalar?

     

    #include
    int main ()
    {
    int value;
    printf("Enter the value:");
    scanf("%d",&value);
    int sonuc;
    sonuc=factorial(value);
    printf("Factorial of %d is : %d \n ", value,sonuc);
    return 0;
    }

    int factorial(int fact)
    {
    if(fact<=1)
    return 1;

    else
    return(fact*factorial(fact-1));
    }

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    All hail to Tux
    sandman
    sandman's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    Sonucun değerini double yap.int 32000 üstünde çalışmaz.


    Mühendis kahveyi projeye dönüştüren bir insan evladıdır.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    return(fact*factorial(fact-1));

    --------- 

    fact =?

     

    Edit: bu kod derleniyor mu?...  

     

    Algoritman da yanlış gözüküyor..

    Programın amacı ne? 

    Bir de fonksiyon kendi kendini çağırıyor?? 

     


    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    sandman bunu yazdı:
    -----------------------------

    Sonucun değerini double yap.int 32000 üstünde çalışmaz.


    -----------------------------

     

    int  tanımlı bir sayı double yapmak gerekszidir her halde fakat unsigned  tanımlamak daha doğrudur...


    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hunter
    j4x
    j4x's avatar
    Kayıt Tarihi: 16/Temmuz/2005
    Erkek

    int derleyicinin türüne ve ayarına göre short int yada long int e çevrilecektir.

    Vc++ için default olarak long int yani 32 bit signed integer olacaktır.

    short int: -32768...32767 arası değer alır, long int ise -2^31....+2^31-1 aralığında değer alabilir yani -2 milyar küsürden +2 milyar küsüre.

    Unsigned yaparsan bu türleri alabildiği max değer 2 katına çıkar fakat negatif değer alamaz, alabildiği en küçük değer 0 olur.

    Sen int veri türüyle daha büyük sayılarla çalışamazsın. Arkadaşın dediği gibi double kullanabilirsin fakat o da 14 digitten sonra precisonu yitirir.

    Faktoriyel programi için kafani kariştirmaya değmez, ilerde yapıları fln gördüğünde anlarsın bunu nasıl aşabileceğini.


    The king is bleeding.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek
    hata oldu

    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ltcelik
    ltcelik's avatar
    Kayıt Tarihi: 11/Mayıs/2007
    Erkek

    #include
    #include

    using namespace std;

    int main(int argc, char *argv[])
    {

    unsigned fakt;
    //int fakt;
    int say,i;
    cin>>say;
    fakt=1;
    for (i=say;i>1;i--)
    {
    fakt=fakt*i;

    }
    cout<< fakt<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    }

     

    *** c++ kodu 10 için doğru veriyor..


    Din Kitaplarını Okuyup Anlayana Ateist, Okuyup Anlamayanlara "dindar" denir... Nikola TESLA.. ben mi? Ne okurum ne anlarım... Kendi kendime de uyuz oluyorum ama olamıyorum.. "Ama efsaneyi çıkarıp atarsan ve yaptıkları eylemlere bakarsan... ..Jedi'ların mirası başarısızlıktır. İkiyüzlülüktür, kibirdir."
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    ltcelik bunu yazdı:
    -----------------------------

    return(fact*factorial(fact-1));

    --------- 

    fact =?

     

    Edit: bu kod derleniyor mu?...  

     

    Algoritman da yanlış gözüküyor..

    Programın amacı ne? 

    Bir de fonksiyon kendi kendini çağırıyor?? 

     


    -----------------------------

     

    özyineleme kullanmış hocam yanlış olan bir şey yok..

    ayrıca int ın boyutlarını aştığın için öyle oluyor (:

    long int olarak ya da double olarak tanımlarsan sorun ortadan kalkar ama fazla kasmaya gerek yok altı üstü faktoriyel programı


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    bilmece
    bilmece's avatar
    Kayıt Tarihi: 29/Aralık/2009
    Erkek

    buyur hacı bunu dene <br>

    void faktoryel(int sayi)
    {
    #define BASAMAK 300
    unsigned s,i,aktif,dizi[BASAMAK]={0};
    dizi[BASAMAK-1]=s=1;
    aktif=BASAMAK-1;
    while(s<=sayi)
    {
    for(i=0;i<BASAMAK;++i)
    dizi[i]*=s;
    for(i=1;i<BASAMAK;++i)
    {
    dizi[BASAMAK-(i+1)]+=(dizi[BASAMAK-i]/10);
    dizi[BASAMAK-i]%=10;
    if(dizi[BASAMAK-(i+1)])
    aktif=BASAMAK-(i+1);
    if(dizi[0]>1000000)
    printf("Yetersiz alan BASAMAK = %u\n",BASAMAK);
    }
    ++s;
    }
    for(i=aktif;i<BASAMAK;++i)
    printf("%d",dizi[i]);
    }

    <br>

    yeterli alan olursa 400 milyona kadar faktoryel alabilirsin basamagı yükseltmen yeter
     

Toplam Hit: 1395 Toplam Mesaj: 9