Ana içeriğe atla

Fibonacci Serisi Algoritması

Bu makalemizde programlama derslerinde verilen ve matematik dünyasında ünlü olan fibonacci serilerini inceleyeceğiz. Öncelikle fibonacci serisinin ne olduğundan, mantığından bahsedeceğiz. Bu konular anlaşıldıktan sonra ise serinin algoritmik olarak nasıl bulunacağı incelenecektir. Bu makaleyi okumak ve yapılanları uygulamak sadece fibonacci serisinin programını yazmaya değil, aynı zamanda programlama konusunda da gelişmenize yardımcı olacaktır. Ayrıca bu konuyu yazılım dünyasına yeni başlamış kişilerin okuyacağını dikkate alarak yazılım konusunda da birkaç tüyo vererek makalemi yazmaya çalışacağım…
Öncelikle önemli olan bir konudan bahsetmek istiyorum. Size verilen bir problemi çözmek istiyorsanız öncelikle verilen problemi çok iyi anlamanız gerekir. Mesela burada fibonacci serileri ile ilgili bir algoritma yazacaksak öncelikle matematiksel olarak sorunu ortaya koyabilmemiz lazım. Bu iş hayatınızda da karşılaştığınız sorunlarda aynıdır. Eğer sorunu iyi ortaya koyarak analiz edemezseniz ürettiğiniz çözümler de çözmek istediğiniz sorunun çözümü olmayabilir.
Bizim makalemizin ana teması fibonacci serileri olduğu için öncellikle konuyu anlamamız lazım. Fibanacci serisi bazı kaynaklarda 0 1 den, bazı kaynaklarda da 1 1 den başlayarak sonraki sayı önceki iki sayınının toplamıdır şeklinde devam eder. Biz algoritmamızı 1 1 den başlayacak şekilde yazdık. Fibonacci serisi için sonraki degerler 1, 1, 2, 3, 5, 8, 13 ... şeklinde devam eder.

Zannediyorum ki, anlattığım kısa açıklama ile fibonacci serilerini anlamış oldunuz. Burdan sonra önemli olansa fibonacci serisinin algoritmasını yazmaktır. Eğer fibonacci serisi mantığını iyi anladıysanız algoritmasını yazmak sadece programlama mantığınızı ve biraz da kullandığınız programlama diline kalmış durumda.
Ben algoritmayı yazmak için C# programlama dilinde yazacağım. Tabi ki önemli olan algoritmanın mantığıdır ve bu mantık tüm programlama dillerinde aynıdır. İster javascript, ister java, ister python kullanın farketmez. Bu algoritma mantığını kullandığınız programlama diline uyarlayabilirsiniz. Çünkü hepsinde hemen hemen mantık aynıdır. Sadece ufak yazım değişiklikleri olacaktır.
Konuyu anlatabilmek açısından öncelikle C# programlama dilinde Fibonacci Algoritması kodlarını vereceğim. Belirtmem gerekiyor ki bu programda örneğin 10 değerini girdiysek fibonacci serisinin 10-cu elemanına kadar olan değerler sıralanır. Bundan sonra da program üzerinden devam ederek kodları açıklamaya çalışacağım. Programı geliştirmek için windows form uygulaması yaptım. Bu form uygulamasının ekran görüntüsüna resimden bakabilirsiniz.

Fibanacci Serisi Programi



Fibonacci Serisi Algoritması(C# program Kodları)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Fibonacci
{
    public partial class MainScreen : Form
    {
        public MainScreen()
        {
            InitializeComponent();
        }

        private void buttonHesapla_Click(object sender, EventArgs e)
        {
            double girilenDeger = 0;
            var parseResult=double.TryParse(textBox1.Text, out girilenDeger);
            if (!parseResult)
            {
                textBox2.Text = "Hesaplanacak değer sayı olmalıdır...";
            }
            else
            {
                textBox2.Text = "";
                var algorithnResult = FibonacciHesapla(girilenDeger);
                foreach (var item in algorithnResult)
                {
                    textBox2.Text += item.ToString() + ", ";
                }
            }
        }

        private List<double> FibonacciHesapla(double girilenDeger)
        {
            var result = new List<double>();
            if (girilenDeger == 0)
            {
                return result;
            }
            if (girilenDeger == 1)
            {
                result.Add(1);
            }
            if (girilenDeger == 2)
            {
                result.Add(1);
                result.Add(2);
            }
            else
            {
                result.Add(1);
                result.Add(1);
                for (int i = 1; i < girilenDeger-1; i++)
                {
                    double deger = result[i] + result[i - 1];
                    result.Add(deger);
                }
            }
            return result;
        }
    }
}


Kod içerisinde önemli olan nokta aslında aşağidaki kodlardır.

result.Add(1);
result.Add(1);
for (int i = 1; i < girilenDeger-1; i++)
 {
   double deger = result[i] + result[i - 1];
   result.Add(deger);
 }

Bu yüzden de programın bu kısmını açıklamam sanırım kodların tamamını anlamanız için en önemli noktadir. Programın çalıştığı fonksina dikkat ederseniz burada geri dönüş değeri olarak List türünde değer döndüğünü görebilirsiniz. Bu da hesaplanacak fibonacci seri değerlerinin bir listeye atanacağını göstermektedir. Bu işlemlerden sonra geri döndürülecek listeye ilk değerler olan 1 1 değerlerini gönderiyoruz. Bu işlemden sonra ise girilen değere gere döngüyü çalıştırıp bir önceki iki değerin toplamını hesaplayarak listeye tekrar ekliyoruz. Yeni programlama öğrenenler için biraz zorlayıcı bir yazılım şekli olduğu için algoritmanın çalışması ile ilgili örnek vermek istiyorum. Örneğin 3 değeri girdiysek ilk önce Listemize iki tane 1 ekliyoruz. Bu bizim sıfırıncı ve birinci indexli değerlerimizdir. Döngü 1 den başlayarak 1 defa işlem yapar ve birle biri toplayarak sonucun 2 olduğunu bulur ve Listeye 2 değerini ekler. Böylece girilen 3 değer için cevabımız 1,1,2 şeklinde olur. Konunun ve anlatımın zor geldiğini düşünüyorsanız zor olan kısım sadece list kullanımı ve döngülerin başlangıç ve bitiş noktasının ayarlanma konularıdır. Bu konular için mutlaka araştırma yapın. Çünkü diyebilirim ki bu konular programlamanın temelini oluşturur.

Umarım makalem ve anlatımım faydalı olmuştur. Yinede anlamadığın konular kısımlar olursa lütfen sormaktan çekinmeyin. En kısa sürede sorularınızı yanıtlamaya çalışacağım...

Yorumlar

Bu blogdaki popüler yayınlar

Medyan (Ortanca) Nedir? Nasıl Hesaplanır? Nerelerde Kullanılır?

Medyan işlemi olasılık hesaplamalarında sıkça kullanılan bir sayı dizisinin ortalamasını hesaplamak için alternatif yöntemlerden bir tanesidir. Ortanca medyan işleminin diğer adıdır. Matematiksel olarak medyan işlemi bir sayı dizisi küçükten büyüğe sıralayarak ortada kalan elemanı medyan değeri olarak belirleme işlemidir. Örnek verecek olursak: 2, 1, 5, 4, 5, 1, 2, 3, 5 serisi sıralanırsa 1, 1, 2, 2, 3, 4, 5, 5, 5 serisi elde edilir. Bu seri 9 elemanlı olduğundan ortadaki, yani 5. eleman (medyan) olacaktır. 5. eleman 3 sayısıdır. Yani ortanca değeri 3'dür Eleman sayısı tek sayı olan bir seride medyan değerin sırasının hesaplaması şu şekilde formüle edilir. Medyanın Sırası = (Eleman Sayısı + 1) / 2 Bu formülü yukarıdaki örneği uygulayacak olursak; Medyanın Sırası = (9 + 1) / 2 = 5 Veri serisi eleman sayısı bir çift sayı ise bu durumda serinin 2 medyanı olacaktır. Örneğin 2, 1, 5, 4, 5, 1, 2, 3, 5, 4 serisi sıralandığında 1, 1, 2, 2, 3, 4, 4, 5, 5, 5 s

Ağaçlar Kireçle veya Badana İle Neden Boyanır?

Ağaçlar kireçle boyanmasının veya badana yapılmasının hem çevreye hem de doğaya, ağaçlara faydası var. Bu makalede bu geleneği enine boyuna tartışmaya çalıştık. Ağaca zarar veren mikrop ve bakterileri öldürür. Ağacı çok aşarı soğuk havalarda ve çok aşırı sıcak havalarda korur. Ağacın çürümesini ve kurtlanmasını önler. Ağacın gövdesinin alabileceği zararları en az düzeyde düşürmeyi sağlar. Hoş, güzel, hijyenik, temiz pırıl pırıl bir görüntü oluşturur. Ayrıca çok sıcak havalarda da ağacı yanmaya karşı korumak. En büyük etkisi soğuk havalarda ağacı don vurmalarına karşı korumak . Küresel ısınma göz önüne alındığında mevsim değişiklikleri ani don, ani ısı artışları ve azalışları sonucunun doğuracağı etkenler için yararlı etkin bir yöntem. Gövdeden obur dalların çıkmasını azaltmak için sürülür. Kireçleme ağaçları güneş yanığından korumak için yapılıyor. Ağaçlar da güneşten yanabiliyorlar. Bu arada odun dokudaki gözenekleri doldurarak kapattığı için, zararlıların yuv

Azərbaycan Dilində Vurğu Qəbul Etmeyen Şekilçiler

Sözlərdə hecalardan birinin digərlərinə nisbətən daha qüvvətli deyilməsinə heca vurğusu deyilir. Üzərinə vurğu düşən hecaya isə vurğulu heca deyilir. Azərbaycan dilində vurğu adətən söz sonuna düşür. Söz şəkilçi qəbul ederkən vurğu adətən şəkilçinin üzərinə keçir. Məsələn: çiç ə k - çiçəkl ə r - çiçəklərd ə n məkt ə b - məktəbl i - məktəblil ə r - məktəblilərd ə n Buna baxmayaraq dilimizdə bir sıra şəkilçilər var ki onlar vurğu qebul etmirlər. Bu məqalədə Azərbaycan dilində vurğu qebul etməyən şəkilçilər incələnəcək ve bu şekilçilərin hansı hallarda vurğu qebul edib hansı hallarda vurğu qebul etmediyi araşdırılacaqdır. Eyni zamanda bildirmək istəyirəm ki vurğu ilə bağlı daha geniş və ətraflı məlumat üçün Azərbaycan Dilində Vurğunun Praktik Məsələləri adlı məqaləyə də nəzər yetirə bilərsiniz.  1. İsimlərdəki şəxs(xəbərlik) şəkilçiləri Məsələn: müəli'məm müəli'msən müəli'mdir müəli'mik müəli'msiniz müəli'mdirlər Qeyd: -dır4