Şimdi Ara

C# da Fibonacci Dizisinda Sorun

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
611
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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.



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







  • 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.
  • 200'e kadar gittiğinde böyle oluyor mesela (Tabii eğer sayı sınıfımda sorun yoksa)
     C# da Fibonacci Dizisinda Sorun
  • Böyle yerlerde ya özel sayı sınıfı yaratmak gerek ya da hazır birtane kütüphaneden kullanmak gerek.
  • 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...
  • 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.




  • 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




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • 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 >
  • İş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 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.