Haliç Üniversitesi Bilgisayar Mühendisliği 2. Sınıf 4. Dönem C# Programlama

Ödev: Konsol ortamında fibonacci serisini elde eden programın c# altında yazılması.

Programı yazmadan önce fibonacci serisinin ne olduğunu kavramak gerekiyor onun için işe fibonacci sayılarının mantığını anlatarak başlayalım.Fibonacci serisi 2 tane 1 ile başlar ve ondan sonra son iki sayının toplanmasıyla devam eder. Yani bir sonraki sayıyı bulmak için son iki sayının toplanması gerekir.

 

 

Aşağıda kısa bir dizi görüyorsunuz:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,…

Çözüm: Öyle bir algoritma oluşturmalıyız ki örnek olarak biz fibonacci serisinin 7. sayısını istediğimizde 6. sayıya kadar fibonacci serisini bellekte oluşturmalı ve biz 5. ve 6. sayıyı toplayarak istediğimiz eleman olan 7. elemanı elde edebilelim. Bunu oluşturmak içinde döngü kullanmamız gerektiği anlaşılıyor. Oluşturacağımız döngüde fibonacci serisinin ilk 2 elemanının 1 olduğunu düşünürsek 3. elemanımız baştan 2 olarak belli. Bundan dolayı ilk olarak iki tane değişken atarız. Bu değişkenlere örnek olarak prev1 ve prev2 adını veririz (tabi siz istediğiniz şekilde isimlendirme yapabilirsiniz). Bu değişkenlere başlangıç değeri olarak;

prev1 = 1;

prev2 = 1;

atarsak, bizden 3. fibonacci sayısı istenirse yapmamız gereken tek şey sadece prev1 ve prev2 değişkenlerini toplamak olacaktır. Bizden daha yüksek dereceden bir fibonacci sayısı istendiği takdirde döngü içinde işleme sokarak istenilen elemanın bir düşüğüne kadar fibonacci sayılarını oluştururuz. Aşağıda örnek kod üzerinde anlatımıyla daha kolay anlaşılacaktır.

public static int GetFibonacciNumber(int number)
{
1 public static int GetFibonacciNumber(int number)
{
2 int result = 1;
3 int prev1 = 1, prev2 = 1;
4 if (number > 2)
{
5 for (int i = 3; i <= number; i++ )
{
6 result = prev1 + prev2;
7 prev1 = prev2;
8 prev2 = result;
}
}
9 return result;
}

1. satırda ana fonksiyondan çağırıcağımız GetFibonacciNumber adlı fonksiyon tanımlanıyor ve kendisine parametre olarak int türünde bir sayı alıyor. Bu sayı fibonaccinin kaçıncı sayısının istendiğini belirtiyor. 2. satırda sonucu tutacak bir değişken tanımlanıyor ve “0″ varsayılan değeri tanımlanıyor burada hangi değerle tanımlandığı önemli değil, eğer bir değer atamdan tanımlanırsa derleyici hata veriyor. 3. satırda yukarıda bahsetmiş olduğumuz gibi fibonaccinin son iki sayısını tutacak prev1 ve prev2 değişkenleri tanımlanıyor. 4. satırda if
deyimiyle istenen sayının yani fonksiyona parametre olarak gönderilen değerin 2 den büyük olup olmadığı kontrol ediliyor. Eğer 2 den büyük ise program for döngüsüne giriyor. Aksi fonksiyon ana fonksiyona “0″ değerini gönderiyor (hatırlarsanız result değişkeni tanımlanırken atanmıştı). Daha sonra 5. satırda for döngüsünde istenen değere kadar fibonacci sayıları hesaplanıyor. Eğer istenen değer 3’se döngüye girdiği gibi çıkması bir oluyor. döngüde i değişkeninin 3 olarak tanımlandığını düşünürsek 3 <= 3 koşulu sağlandığı için for döngüsünün içindeki işlemleri bir kez yapar ve sonra i 4 değerini aldığında 4 <= 3 koşulu yanlış olduğundan döngüden çıkar. For döngüsünü ayrıntılı olarak inceleyelim. Örnek olarak istenen değerin 5 olduğunu kabul edelim. i değişkeni 3 olarak tanımlandı ve for döngüsüne girdi. 6. satırda result değişkeninin değeri prev1 ve prev2 değişkenlerinin toplamı olacaktır. prev1 = 1 ve prev2 = 1 olduğunu düşünürsek result değişkeni 2 değerini aldı. Bizim şimdi bir sonraki adım için prev1 ve prev2 değişkenlerinin değerini yeniden atamamız gerekiyor. Bir sonraki adımı düşünürsek result değişkeninin değeri fibonacci sayılarının 3. süne eşit oldu. Aşağıdaki sayılara bakarak düşünürsek bu adımda prev1 değişkenin değeri fibonacci sayılarının ikincisi olan prev2 değişkeninin değerine eşit olacaktır. 7. satırda bu işlem yapılıyor. 8. satırdaysa prev2 değişkeninin yeni değeri belirleniyor buda bizim result değişkeniyle elde ettiğimiz değer oluyor. Şu anda for döngüsü başa döndü ve i değişkeninin değeri 1 artarak 4 oldu ve 4 <= 5 koşulu hala geçerli olduğundan yine döngüye girer ve bu sefer result değişkeni 3 değerini prev1 değişkeniyse 2 olur. Son aşamadaysa prev2 result değişkeninin değeri olan 3 değerini alır. Son olarakda i = 5 değerinde program for döngüsüne girer ve result = 5, prev1 = 3, prev2 = 5 değerlerini alır. Bundan sonra 6 <= 5 olamayacağından döngüden çıkar. 9. satırda fonksiyon ana fonksiyona result değişkeninin değerini göndererek kendini sonlandırır.

 

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,…

public static void Main()
{
1 System.Console.WriteLine("Lütfen bir sayı giriniz");
2 int number = int.Parse(System.Console.ReadLine());
3 System.Console.WriteLine("Toplam : " + GetFibonacciNumber(number));
}

Program açıldığında ilk olarak ana fonksiyon çalışır ve 1. adımda WriteLine fonksiyonuyla bir sayı girilmesini ister. Daha sonra girilen sayıyı number adlı değişkene atar. Daha sonrada son olarak yine bir WriteLine fonksiyonuyla GetFibonacciNumber fonksiyonu parametre olarak number değişkeni gönderilerek çağrılır ve sonuç ekrana yazılır.

Programın kaynak kodunu indirmek için http://www.osmanates.com/plaintext/GetFibonacciNumber.cs linkini kullanabilirsiniz.

Programın derlenmiş halini [download#1#nohits] bu linkten indirebilirsiniz.

Son olarak aşağıdaki linklerden fibonacci serisi hakkında daha ayrıntılı bilgi alabilirsiniz.

http://www.bilim.org/?s=haber&haberid=151

http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fib.html

Tags: , , ,

6 Responses to “Fibonacci Serisi - C# Ödev”

  1. sefa Says:

    c# da giriş seviyesi için güzel bir örnek olduğunu düşünüyorum. teşekkürler.

  2. Seçkin Özel Says:

    Sayın Ateş, gerçekten çok emek vermişsiniz ve cok güzel bir çalışma ortaya çıkmış. c#da döngü deyimlerini ve fonksiyon kavramlarını anlayabilmek için gayet önemli bir örnek oldugunu düşünüyorum. Açıklaması oldukça yeterli. Herkesin rahatça anlayabileceğini düşünüyorum. Elinize sağlık…

  3. Osman Ateş Says:

    Seçkin bey, bende size teşekkür ediyorum. Makale işe yarayabildiyse ne mutlu bize.

  4. sozluk Says:

    Osman bey çok teşekkürler.Gerçektne işimize yaradı.

  5. emre baştar Says:

    osman program iyi güzelde uzatmışsın be abi…
    ama başarılı.bu arada siten hayırlı olsun .

  6. m.Ç. Says:

    Güzel bir paylaşım.Yalnız programın nasıl çalıştığını
    bir algoritma şeması ile göstersen daha şık ve kolay anlaşılabilir bir yazı dizisi olabilirdi.

Leave a Reply