Jump to content

Fibonacci Dizisi (C++)


huso42
 Share

Recommended Posts

bazı örnekler ve makaleler buldum

c ile

#include <stdio.h>
 
int ricerca_fib(int a[], int n, long x)
{
    int inf=0, pos, k;
    static int kk= -1, nn=-1, fib[]={0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141};
 
if(nn!=n)
{
    k=0;
    while(fib[k]<n) k++;
    kk=k;
    nn=n;
}
else
    k=kk;
 
while(k>0)
{
    pos=inf+fib[--k];
    if((pos>=n)||(x<a[pos]));
    else if (x>a[pos])
    {
        inf=pos+1;
        k--;
    }
 
    else {
        return pos;
    }
}
    return -1;
}

autoit ile

#include <array.au3>

Dim $fib1 = 1, $fib2 = 2, $fib3, $results[51], $temp
$results[1] = $fib1
$results[2] = $fib2

For $temp = 3 To 50
$fib3 = $fib1 + $fib2
$results[$temp] = $fib3
swap($fib1, $fib2, $fib3)
Next

_ArrayDisplay($results, "50 Fibonacci Numbers")

Func swap(ByRef $a, ByRef $b, ByRef $c)
$a = $b
$b = $c
EndFunc   ;==>swap 
    #include <stdio.h>
     
    /*
    Fibonacci Dizisi oluşturmak için kullanacağımız fonksiyonu yazıyoruz.
    Bu fonksiyon n. Fibonacci sayısına kadar olan diziyi ekrana yazdıracak.
    Bu fonksiyon geriye hiçbir değer döndürmeyeceği için void olarak tanımlıyoruz.
    */
     
    void FibonacciDizisi(int diziUzunlugu) {
    int a,b,c,sayac;
     
    /*a'ya -1'i b'ye 1'i atıyoruz.
    Bunu neden yaptığımıza gelirsek fibonacci sayılarını bulabilmemiz için bu şekilde atamamız gerekiyor.
    Niye olduğunu fonksiyonumuz üzerinde bir örnekle açıklayalım.
    Mesela diziUzunlugu = 3 olsun.
    for döngüsü işlemeye başladı.
    sayac= 0 iken c= a+b yani (-1)+(1)=0 oluyor => c=0
    c'yi ekrana yazdırdık.
    Şimdi a'yı b'ye, b'yi c'ye eşitledik eşledik. a=1 b=0
    Yine c= a+b oldu c=1
    c'yi ekrana yazdırdık.
    Yine a=b, b=c. a=0, b=1
    c= a+b oldu c=1
    c'yi ekrana yazdırdık c=1
    İlk 3 sayıyı yazdırmış olduk. 0 1 1
    */
    a=-1;
    b=1;
    for(sayac=0;sayac<diziUzunlugu; sayac++) {
    c=a+b;
    printf("%d\n", c);
    a=b;
    b=c;
    }
     
    }
     
    /*
    Şimdi bize n. Fibonacci sayısını verecek olan fonksiyonu yazıyoruz.
    Bize n. Fibonacci sayısını geri döndüreceği için int olarak tanımlıyoruz.
    Yani x diye integer türünde bir değişkenimizin olduğunu varsayarsak:
    x = FibonacciSayisi(10);
    diyerek x'e 10.Fibonacci sayısını atayabiliriz.
    */
     
    int FibonacciSayisi(int n) {
    /*
    Dikkat ederseniz ilk fonksiyonumuzdaki a,b, sayac değişkenini burada tekrar tanımlıyoruz.
    Çünkü ilk fonksiyondaki a,b ve sayac değişkenleri ilk fonksiyonun kapsama alanındaydı, yani ilk fonksiyonun lokal değişkenleriydi.
    Bir nevi { } yani kıvırcıklar değişkenlerin kapsama alanını da gösteriyor...
    */
    int a,b,sayac;
    a=-1;
    b=1;
     
    /*Yine ilk fonksiyondaki gibi a=-1 b=1 diyoruz.
    Bu sefer döngünün içinde 2 değişken kullandık. 3 taneyle olandan farkı yok, maksat marjinallik...
    */
     
    for(sayac=0;sayac<n;sayac++) {
    b += a;
    a = b-a;
    }
    return b;
     
    }
     
    // Sıra geldi ana fonksiyonumuza...
     
    int main() {
    int dizi,sayi,secim;
    /*Kullanıcıya 1 veya 2'yi girerek istenilen fonksiyonu seçmesini sağlıyoruz. */
    printf("n elemanli Fibonacci Dizisi icin 1'i\n");
    printf("n. Fibonacci Sayisi icin 2'yi tuslayiniz: ");
     
    scanf("%d", &secim);
     
    if(secim == 1) {
    printf("n degerini giriniz:");
    scanf("%d",&dizi);
    FibonacciDizisi(dizi);
    }
     
    else if(secim == 2) {
    printf("n degerini giriniz:");
    scanf("%d",&sayi);
    printf("%d\n", FibonacciSayisi(sayi));
    }
    //Kullanıcı 1 veya 2 dışında birşey tuşlarsa, ona bunu yapmaması gerektiğini aşağıdaki else bloğuyla söylüyoruz.
    else {
    printf("\nbeyin.dll not found.\n");
    printf("\nLutfen 1 -bir- veya 2 -iki-'yi tuslayin...\n");
    }
     
    return 0;
    }

makale

http://snipplr.com/view/61924.76617/

http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fib.html

http://rosettacode.org/wiki/Fibonacci_sequence

http://www.arastirmax.com/bilimsel_yayin/istanbul-%C3%BCniversitesi-i%C5%9Fletme-fak%C3%BCltesi-dergisi/35/1/69-83_fibonacci-arama-y%C3%B6ntemi-kullanilarak-brownun-t-e-k

https://en.wikipedia.org/wiki/Fibonacci_number

Link to comment
Share on other sites

c++ da 

 

Hangi dilde yardım istiyorsunuz ?



bazı örnekler ve makaleler buldum

c ile

#include <stdio.h>
 
int ricerca_fib(int a[], int n, long x)
{
    int inf=0, pos, k;
    static int kk= -1, nn=-1, fib[]={0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141};
 
if(nn!=n)
{
    k=0;
    while(fib[k]<n) k++;
    kk=k;
    nn=n;
}
else
    k=kk;
 
while(k>0)
{
    pos=inf+fib[--k];
    if((pos>=n)||(x<a[pos]));
    else if (x>a[pos])
    {
        inf=pos+1;
        k--;
    }
 
    else {
        return pos;
    }
}
    return -1;
}

autoit ile

#include <array.au3>

Dim $fib1 = 1, $fib2 = 2, $fib3, $results[51], $temp
$results[1] = $fib1
$results[2] = $fib2

For $temp = 3 To 50
$fib3 = $fib1 + $fib2
$results[$temp] = $fib3
swap($fib1, $fib2, $fib3)
Next

_ArrayDisplay($results, "50 Fibonacci Numbers")

Func swap(ByRef $a, ByRef $b, ByRef $c)
$a = $b
$b = $c
EndFunc   ;==>swap 
    #include <stdio.h>
     
    /*
    Fibonacci Dizisi oluşturmak için kullanacağımız fonksiyonu yazıyoruz.
    Bu fonksiyon n. Fibonacci sayısına kadar olan diziyi ekrana yazdıracak.
    Bu fonksiyon geriye hiçbir değer döndürmeyeceği için void olarak tanımlıyoruz.
    */
     
    void FibonacciDizisi(int diziUzunlugu) {
    int a,b,c,sayac;
     
    /*a'ya -1'i b'ye 1'i atıyoruz.
    Bunu neden yaptığımıza gelirsek fibonacci sayılarını bulabilmemiz için bu şekilde atamamız gerekiyor.
    Niye olduğunu fonksiyonumuz üzerinde bir örnekle açıklayalım.
    Mesela diziUzunlugu = 3 olsun.
    for döngüsü işlemeye başladı.
    sayac= 0 iken c= a+b yani (-1)+(1)=0 oluyor => c=0
    c'yi ekrana yazdırdık.
    Şimdi a'yı b'ye, b'yi c'ye eşitledik eşledik. a=1 b=0
    Yine c= a+b oldu c=1
    c'yi ekrana yazdırdık.
    Yine a=b, b=c. a=0, b=1
    c= a+b oldu c=1
    c'yi ekrana yazdırdık c=1
    İlk 3 sayıyı yazdırmış olduk. 0 1 1
    */
    a=-1;
    b=1;
    for(sayac=0;sayac<diziUzunlugu; sayac++) {
    c=a+b;
    printf("%d\n", c);
    a=b;
    b=c;
    }
     
    }
     
    /*
    Şimdi bize n. Fibonacci sayısını verecek olan fonksiyonu yazıyoruz.
    Bize n. Fibonacci sayısını geri döndüreceği için int olarak tanımlıyoruz.
    Yani x diye integer türünde bir değişkenimizin olduğunu varsayarsak:
    x = FibonacciSayisi(10);
    diyerek x'e 10.Fibonacci sayısını atayabiliriz.
    */
     
    int FibonacciSayisi(int n) {
    /*
    Dikkat ederseniz ilk fonksiyonumuzdaki a,b, sayac değişkenini burada tekrar tanımlıyoruz.
    Çünkü ilk fonksiyondaki a,b ve sayac değişkenleri ilk fonksiyonun kapsama alanındaydı, yani ilk fonksiyonun lokal değişkenleriydi.
    Bir nevi { } yani kıvırcıklar değişkenlerin kapsama alanını da gösteriyor...
    */
    int a,b,sayac;
    a=-1;
    b=1;
     
    /*Yine ilk fonksiyondaki gibi a=-1 b=1 diyoruz.
    Bu sefer döngünün içinde 2 değişken kullandık. 3 taneyle olandan farkı yok, maksat marjinallik...
    */
     
    for(sayac=0;sayac<n;sayac++) {
    b += a;
    a = b-a;
    }
    return b;
     
    }
     
    // Sıra geldi ana fonksiyonumuza...
     
    int main() {
    int dizi,sayi,secim;
    /*Kullanıcıya 1 veya 2'yi girerek istenilen fonksiyonu seçmesini sağlıyoruz. */
    printf("n elemanli Fibonacci Dizisi icin 1'i\n");
    printf("n. Fibonacci Sayisi icin 2'yi tuslayiniz: ");
     
    scanf("%d", &secim);
     
    if(secim == 1) {
    printf("n degerini giriniz:");
    scanf("%d",&dizi);
    FibonacciDizisi(dizi);
    }
     
    else if(secim == 2) {
    printf("n degerini giriniz:");
    scanf("%d",&sayi);
    printf("%d\n", FibonacciSayisi(sayi));
    }
    //Kullanıcı 1 veya 2 dışında birşey tuşlarsa, ona bunu yapmaması gerektiğini aşağıdaki else bloğuyla söylüyoruz.
    else {
    printf("\nbeyin.dll not found.\n");
    printf("\nLutfen 1 -bir- veya 2 -iki-'yi tuslayin...\n");
    }
     
    return 0;
    }

makale

http://snipplr.com/view/61924.76617/

http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fib.html

http://rosettacode.org/wiki/Fibonacci_sequence

http://www.arastirmax.com/bilimsel_yayin/istanbul-%C3%BCniversitesi-i%C5%9Fletme-fak%C3%BCltesi-dergisi/35/1/69-83_fibonacci-arama-y%C3%B6ntemi-kullanilarak-brownun-t-e-k

https://en.wikipedia.org/wiki/Fibonacci_number

teşekkürler 

Link to comment
Share on other sites

Fibonacci güzel bir algoritmadır ve modellemesi kolaydır. Bunu bu kadar karmaşıklaştırmaya gerek yok bence Recursive(öz yinelemeli) fonksiyon ile göstermek daha doğru olacaktır böylece kodlar uzamaz ve kod ağacda kendini yineler.
 
 
Autoit  Recursive:


Global $n = 1000

ConsoleWrite(_Fibonacci($n) & @CRLF)

Func Recursive_Fib($f)
	If $f < 2 Then Return $f
	If $f > 1476 Then Return 0
	Return Recursive_Fib_(1, 1, $f)
EndFunc   ;==>Recursive_Fib

Func Recursive_Fib_($f1, $f2, $fn)
	If $fn < 3 Then Return $f2
	Return Recursive_Fib_($f2, $f1 * 1.0 + $f2 * 1.0, $fn - 1)
EndFunc   ;==>Recursive_Fib_

 
Autoit Iterative :
 
 

Func _Fibonacci($iIterations)
	Return (5 ^ - 0.5) * ((((1 + (5 ^ 0.5)) / 2) ^ $iIterations) - (((1 - (5 ^ 0.5)) / 2) ^ $iIterations))
EndFunc   ;==>_Fibonacci

 
 
C Recursive :

int Recursive_Fib(int n) 
{
  if (n < 2)
    return n;
  else
    return Recursive_Fib(n-1) + Recursive_Fib(n-2);
}

printf("%d\n", Recursive_Fib(10));

 
C Iterative :
 

int Recursive_Fib(int n) 
{
  int first = 0, second = 1;

  int tmp;
  while (n--)
    {
      tmp = first+second;
      first = second;
      second = tmp;
    }
  return first;
}

C# Recursive :


using System;

class Recursive_Fib 
{

  public static int rFibo(int n) 
  {
    return (n < 2) ? 1 : rFibo(n-2) + rFibo(n-1);
  }
  public static int Main(String[] args) 
  {
    int limit;
    int f;
    limit = System.Convert.ToInt32(args[0]);
    if(limit < 1) limit = 1;
    f = rFibo(limit);
    Console.WriteLine(f.ToString()+"\n");
    return(0);
 }
}

C# Iterative :

public class Fibonacci
{
  public static void Main()
  {
    int oldnum = 1;
    int currnum = 1;

    int nextNumber;

    System.Console.Write(currnum + " ");

    while (currnum < 50)
    {
      System.Console.Write(currnum + " ");

      nextNumber = currnum + oldnum;

      oldnum = currnum;
      currnum = nextNumber;
    }
   }
}

Java Hem Recursive Hem Tekrarlı :


import java.util.Date;

public class Main
{
  private static long[] fib;
  public static void main(String[] args)
  {
      Long t1;
      int maxi = Integer.parseInt(args[0]);

      // recursive
      t1 = new Date().getTime();
      System.out.println("Recursive:");
      System.out.println(rec(maxi));
      System.out.println(new Date().getTime() - t1);

      // iterative
      System.out.println("Iterative:");
      t1 = new Date().getTime();
      System.out.println(ite(maxi));
      System.out.println(new Date().getTime() - t1);
  }

  private static long rec(int n){
      if(fib==null){
          fib = new long[n+1];
          for(int i = 0; i< n+1; i++)
              fib[i] = -1;
      }

      if(fib[n]==-1)
          if(n < 2)
              fib[n] = n;
          else
              fib[n] = rec(n-1) + rec(n-2);
      return fib[n];

  }

  private static long ite(int n){
      long[] ita = new long[n+1];
      ita[0] = 0;
      ita[1] = 1;
      for(int i = 2; i < n+1; i++){
          ita[i] = ita[i-1] + ita[i-2];
      }
      return ita[n];
  }


}


ve son olarak PHP Hem öz yinelemeli hem tekrarlı 

<?php

function fibo($n)
{
    return(($n 

Iterative

function fibonacci($length) 
{
   for( $l = array(1,1), $i = 2, $x = 0; $i < $length; $i++ )
   {
        $l[] = $l[$x++] + $l[$x];
   }              
   return $l;
} 

for{ $x=0; $x< $fibmax; $x++) echo "fib(" , $x , ") ", fibonacci($x), "\n"

?>
Edited by SimpsoN_Bart
Link to comment
Share on other sites

Fibonacci güzel bir algoritmadır ve modellemesi kolaydır. Bunu bu kadar karmaşıklaştırmaya gerek yok bence Recursive(öz yinelemeli) fonksiyon ile göstermek daha doğru olacaktır böylece kodlar uzamaz ve kod ağacda kendini yineler.

 

 

Autoit  Recursive:


Global $n = 1000
 
ConsoleWrite(Recursive_Fib($n) & @CRLF)

 


Func Recursive_Fib($f) If $f < 2 Then Return $f If $f > 1476 Then Return 0 Return Recursive_Fib_(1, 1, $f) EndFunc ;==>Recursive_Fib Func Recursive_Fib_($f1, $f2, $fn) If $fn < 3 Then Return $f2 Return Recursive_Fib_($f2, $f1 * 1.0 + $f2 * 1.0, $fn - 1) EndFunc ;==>Recursive_Fib_

bilgin için teşekkürler..ben sadece bu konu hakkında sunum yapacam..bu konu ile bilgi verebilrsen sevinirmm

Link to comment
Share on other sites

C++ Fibonacci




#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{int i;
long dizi[100];
dizi[0]=1;
dizi[1]=1;
cout<<dizi[0]<<","<<dizi[1];
for(i=2;i<40;i++){
                  dizi[i]=dizi[i-1]+dizi[i-2];
                  cout<<",";
                 cout<<dizi[i];

                  }
    system("PAUSE");
    return EXIT_SUCCESS;
}

diğer örnek

 

#include<iostream>

using namespace std;

unsigned long int fibonacci(int n){
        if (n==0) return 0;
        if (n==1) return 1;

        return fibonacci(n-1)+fibonacci(n-2);
}

int main (){

        int n;
        unsigned long int fibo;
       
        cout<<"kacinci fibonacci sayisini istiyorsunuz?"<<endl;
        cin>>n;
        fibo = fibonacci(n);
        cout<<"sonuc: "<<fibo<<endl;

        return 0;
}


diğer örnek

C++ programming code

#include<iostream>
 
using namespace std;
 
main()
{
   int n, c, first = 0, second = 1, next;
 
   cout << "Enter the number of terms of Fibonacci series you want" << endl;
   cin >> n;
 
   cout << "First " << n << " terms of Fibonacci series are :- " << endl;
 
   for ( c = 0 ; c < n ; c++ )
   {
      if ( c <= 1 )
         next = c;
      else
      {
         next = first + second;
         first = second;
         second = next;
      }
      cout << next << endl;
   }
 
   return 0;
}



 

Edited by mesale0077
Link to comment
Share on other sites

Fibonacci entropi kodlama bölümünde yer alan kolay ve anlaşılır bir algoritmadır.Sembollerin olasılıkları ile kod uzunlukları düzenliliği ile kod yazarken bu algoritma kullanılır.Kullanım alanı geniştir onun için biraz araştırma yapman gerekebilir matematiksel bir forumulü de var.

 

Kendi arşvimden bir kaynak vereyim biraz da sen araştır.Geniş bir konudur sadece programlamada değil diğer alanlarlarda da kullanımı yaygındır.Bu yüzden modellemesi kolaydır.

https://www.box.com/s/6a9j7qkg34xfx2r0gkw9

 

http://www.bilimarsivi.com/fibonacci-leonardo-fibonacci-ve-fibonacci-dizisi/

 

Edited by SimpsoN_Bart
Link to comment
Share on other sites

bu güzelmiş

“Adamın biri, dört bir yanı duvarla çevrili yere bir çift tavşan koymuş. 
Her çift tavşanın bir ay içinde yeni bir çift tavşan peydahladığı, 
her yeni çiftin de erginleşmesi için bir ay gerektiği ve tavşanların ölmediği var sayılırsa, 
100 ay sonunda dört duvarın arasında kaç çift tavşan olur?”

kaynak :http://www.bilimarsivi.com/fibonacci-leonardo-fibonacci-ve-fibonacci-dizisi/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...