Giriş Yap Kayıt ol Online Üyeler Aktif Konular Arama Üyeler Forum Kuralları
Tahribat.Com | Yüksek Sayıların Faktöriyeli 0 Veriyor
Tahribat.Com Forumları
C - C++
      Yüksek Sayıların Faktöriyeli 0 Veriyor
Bu Bölümde yeni konu açmak için tıklayın Konuyu cevaplamak için tık...
Konu 4 Aralik 2011 (Pazar) 16:36 tarihinde açıldı. Kısayol | Alıntı yap | Özel Mesaj
DeaD_BY


Kayıt : 17 Eylül 2009
İstanbul
Erkek Üye
 

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));
}


BilenYok.Com - İlginç Bilgiler Ansiklopedisi! 
4 Aralik 2011 (Pazar) 16:47 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
sandman


Kayıt : 1 Eylül 2005
Erkek Üye
 

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


Mühendis kahveyi projeye dönüştüren bir insan evladıdır. 
4 Aralik 2011 (Pazar) 18:33 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
ltcelik


Kayıt : 11 Mayis 2007
YENİGÜN MAALLESİ
Erkek Üye
 

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?? 

 


EPoX Af550G pro /2GB RAM/ winXP Pirated Edişın** özür dileyeni . . . 
4 Aralik 2011 (Pazar) 18:40 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
ltcelik


Kayıt : 11 Mayis 2007
YENİGÜN MAALLESİ
Erkek Üye
 

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...


EPoX Af550G pro /2GB RAM/ winXP Pirated Edişın** özür dileyeni . . . 
4 Aralik 2011 (Pazar) 18:51 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
j4x


Kayıt : 16 Temmuz 2005
Istanbul
Erkek Üye
 

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.


Eski gVeR. 
4 Aralik 2011 (Pazar) 19:58 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
ltcelik


Kayıt : 11 Mayis 2007
YENİGÜN MAALLESİ
Erkek Üye
 
hata oldu

EPoX Af550G pro /2GB RAM/ winXP Pirated Edişın** özür dileyeni . . . 
4 Aralik 2011 (Pazar) 20:03 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
ltcelik


Kayıt : 11 Mayis 2007
YENİGÜN MAALLESİ
Erkek Üye
 

#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..


EPoX Af550G pro /2GB RAM/ winXP Pirated Edişın** özür dileyeni . . . 
4 Aralik 2011 (Pazar) 22:18 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
sLeymN


Kayıt : 31 Mart 2008
Adana
Erkek Üye
 

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.. || www.logicalarea.com 
5 Aralik 2011 (Pazartesi) 12:27 tarihinde yazıldı. Kısayol | Alıntı yap | Özel Mesaj
bilmece


Kayıt : 29 Aralik 2009
Erkek Üye
 

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
 


 

[1]


Bu Bölümde yeni konu açmak için dıklayın Konuyu cevaplamak için tık...
Allah'a Havale Et Google Bookmark'a Ekle Yahoo'ya Ekle Stumbleupon'a Ekle Facebook'a Ekle Twitter'a Ekle   Google'da Ara : Yüksek Sayıların Faktöriyeli 0 Veriyor Favorilerime Ekle Yukarı Çık
Konuda 9 Mesaj Var.
Konu 514 Sefer Gösterilmiş.
2001-2012 © Tahribat Group - Her Hakkı Saklıdır. - ● Gizlilik İlkeleri ● Kullanım Koşulları ● İletişim