Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
611
Tıklama
0
Öne Çıkarma
C# da Fibonacci Dizisinda Sorun
H
12 yıl
Er
Konu Sahibi

Programlama ile fazla alakası olan birisi değilim ama Fibonacci Dizisi hesaplayan bir program yapayım dedim C# ile.İlk başta
            int a= 1 , b=1 , c= 0, i = 0; 
while(i < 200)
{
c = a + b;
a = b;
b = c;
Console.WriteLine(a); i++;
}


Console.WriteLine("Döngü sonu çıkmak için bir tuşa basınız...");

Console.ReadKey();

a , b , c değişkenlerini int tanımladım ve belli bir yerden sonra sapıttı ve - + olmaya başladı. Bende int türünün limitini aştı herhalde diye düşündüm long olarak tanımladım ama maalesef yine aynı sorunla karşılaştım ama daha ilerki basamaklarda oldu.Long tanımlayınca 92. adımda int kullanınca 46. adımda sapıttı ama benim merak ettiğim niye böyle bir şey yaptığı.Aydınlatabilirseniz iyi olur.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi HotShotTR -- 29 Haziran 2013; 22:01:02 >

W
12 yıl
Binbaşı

Sanırım doğru düşünmüşsün. Test edip bakmadım ama muhtemelen dediğin gibi limiti aştı. Fibonacci dizisinde sadece toplama işlemi kullanıldığı için sana bir sayı sınıfı gönderebilirim, bunu kullanarak limitsiz bir şekilde istediğini yapabilirsin.


Bu mesaja 1 cevap geldi.
W
12 yıl
Binbaşı

200'e kadar gittiğinde böyle oluyor mesela (Tabii eğer sayı sınıfımda sorun yoksa)
< Resime gitmek için tıklayın >


Bu mesaja 1 cevap geldi.
T
12 yıl
Yarbay

Böyle yerlerde ya özel sayı sınıfı yaratmak gerek ya da hazır birtane kütüphaneden kullanmak gerek.


Bu mesaja 1 cevap geldi.
Ö
12 yıl
Yüzbaşı

Merhaba,

Bu tür işlemlerde Recursive metod kullanmalısınız. Yani kendini tekrar eden metodlar kullanmalısınız. Daha detaylı bilgi için Burak Selim Şenyurt'un hazırlamış olduğu görsel eğitimden faydalanabilirsiniz:http://www.buraksenyurt.com/post/Recursive-Fibonacci-Neden-Yavas.aspx

Kolay gelsin...


Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

quote:

Orijinalden alıntı: özgür beyin

Merhaba,

Bu tür işlemlerde Recursive metod kullanmalısınız. Yani kendini tekrar eden metodlar kullanmalısınız. Daha detaylı bilgi için Burak Selim Şenyurt'un hazırlamış olduğu görsel eğitimden faydalanabilirsiniz:http://www.buraksenyurt.com/post/Recursive-Fibonacci-Neden-Yavas.aspx

Kolay gelsin...

Niye ki? İşlem döngü ile çok fazla karmaşıklaşmadığı sürece döngü kullanmak daha iyi. Zaten verdiğin bağlantıda da aynı şeyi söylüyor.


Bu mesaja 1 cevap geldi.
H
12 yıl
Er
Konu Sahibi

O degilde yaptim galiba.Istedigimiz degere kadar - + olmadan gidiyor.

 
{
string a = "1", b = "1";

Console.Write("Kaçinci adima kadar gitmek istiyorsunuz : ");
int j = Convert.ToInt32(Console.ReadLine());
byte elde = 0;
string c = "",sonuc = "";

for (int x = 0; x <= j; x++)
{


for (; a.Length != b.Length; )
{


if (a.Length > b.Length)
{
b = "0" + b;

}

if (b.Length > a.Length)
{
a = "0" + a;

}
}




if (a.Length == b.Length)
{

for (int i = a.Length - 1; i >= 0; i--)
{




if (a.Length == 1)
{


if (a.Length == b.Length)
{
int aratoplam = Convert.ToInt32(a[i].ToString()) + Convert.ToInt32(b[i].ToString()) + elde;

if (aratoplam >= 10)
{

c = Convert.ToString(aratoplam % 10);

elde = 1;


}
else if (aratoplam < 10)
{
c = aratoplam.ToString();
elde = 0;

}

if (i == 0 && elde == 1)
{
c = "1" + c;


}
}


}

}

}

if (a.Length >= 2)
{

for (int i = a.Length - 1; i >= 0; i--)
{

if(a.Length == b.Length)
{
int aratoplam = Convert.ToInt32(a[i].ToString()) + Convert.ToInt32(b[i].ToString())+elde;
if (aratoplam >= 10)
{

sonuc = Convert.ToString(aratoplam % 10) + sonuc;
elde = 1;

}
else if(aratoplam < 10)
{
sonuc = aratoplam.ToString() + sonuc;
elde = 0;
}

if(i == 0 && elde == 1)
sonuc = "1" + sonuc;
}
c = sonuc;


}

}
a = b;
b = c;
sonuc = "";

Console.WriteLine(x+". adim deger : "+a);

}

Console.WriteLine("Döngü sonu çikmak için bir tusa basiniz...");

Console.ReadKey();


}


Ama simdide söyle bir sorun oluyor . 5 den 6 ya geçerken olmasi gerekenden 1 fazla buluyor sebebi ne onu merak ettim simdide :D


Bu mesaja 1 cevap geldi.
S
12 yıl
Er

Akadaş ne uğraşmışşın

Sana normalini yaazayım sen c# a çevirirsin

int fib()
{
int n, birinci= 0, ikinci= 1, sonraki, i;

printf(""Kaçinci adima kadar gitmek istiyorsunuz : "\n");
scanf("%d",&n);
printf("ilk %d terim: \n",n)


for ( i= 0 ; i< n ; i++ )
{
if ( i<= 1 )
sonraki= i;
else
{
sonraki= birinci+ ikinci;
birinci = ikinci;
ikinci= sonraki;
}
printf("%d\n",sonraki);

}
// drek cevabı istiyorsan yukardaki prnti sil return olarak sonrakini dön
return 0;
}





< Bu mesaj bu kişi tarafından değiştirildi Sugee -- 1 Temmuz 2013; 14:12:29 >
Bu mesaja 1 cevap geldi.
H
12 yıl
Er
Konu Sahibi

İşte öyle yazınca 46. basamaktamı ne sapıtıyor ve ilk mesajda aynısını yaptım bende .





< Bu mesaj bu kişi tarafından değiştirildi HotShotTR -- 1 Temmuz 2013; 14:47:37 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.