Posted By

sleepnir on 12/16/11


Tagged

fibonacci


Versions (?)

Fibonacci Dizisi - Örnek (Yorumlu/Açıklamalı)


 / Published in: C
 

Fibonacci dizileri ile ilgili fonksiyonlara örnek. -Yorumlu/Açıklamalı-

  1. #include <stdio.h>
  2.  
  3. /*
  4. Fibonacci Dizisi oluşturmak için kullanacağımız fonksiyonu yazıyoruz.
  5. Bu fonksiyon n. Fibonacci sayısına kadar olan diziyi ekrana yazdıracak.
  6. Bu fonksiyon geriye hiçbir değer döndürmeyeceği için void olarak tanımlıyoruz.
  7. */
  8.  
  9. void FibonacciDizisi(int diziUzunlugu) {
  10. int a,b,c,sayac;
  11.  
  12. /*a'ya -1'i b'ye 1'i atıyoruz.
  13. Bunu neden yaptığımıza gelirsek fibonacci sayılarını bulabilmemiz için bu şekilde atamamız gerekiyor.
  14. Niye olduğunu fonksiyonumuz üzerinde bir örnekle açıklayalım.
  15. Mesela diziUzunlugu = 3 olsun.
  16. for döngüsü işlemeye başladı.
  17. sayac= 0 iken c= a+b yani (-1)+(1)=0 oluyor => c=0
  18. c'yi ekrana yazdırdık.
  19. Şimdi a'yı b'ye, b'yi c'ye eşitledik eşledik. a=1 b=0
  20. Yine c= a+b oldu c=1
  21. c'yi ekrana yazdırdık.
  22. Yine a=b, b=c. a=0, b=1
  23. c= a+b oldu c=1
  24. c'yi ekrana yazdırdık c=1
  25. İlk 3 sayıyı yazdırmış olduk. 0 1 1
  26. */
  27. a=-1;
  28. b=1;
  29. for(sayac=0;sayac<diziUzunlugu; sayac++) {
  30. c=a+b;
  31. printf("%d\n", c);
  32. a=b;
  33. b=c;
  34. }
  35.  
  36. }
  37.  
  38. /*
  39. Şimdi bize n. Fibonacci sayısını verecek olan fonksiyonu yazıyoruz.
  40. Bize n. Fibonacci sayısını geri döndüreceği için int olarak tanımlıyoruz.
  41. Yani x diye integer türünde bir değişkenimizin olduğunu varsayarsak:
  42. x = FibonacciSayisi(10);
  43. diyerek x'e 10.Fibonacci sayısını atayabiliriz.
  44. */
  45.  
  46. int FibonacciSayisi(int n) {
  47. /*
  48. Dikkat ederseniz ilk fonksiyonumuzdaki a,b, sayac değişkenini burada tekrar tanımlıyoruz.
  49. Çünkü ilk fonksiyondaki a,b ve sayac değişkenleri ilk fonksiyonun kapsama alanındaydı, yani ilk fonksiyonun lokal değişkenleriydi.
  50. Bir nevi { } yani kıvırcıklar değişkenlerin kapsama alanını da gösteriyor...
  51. */
  52. int a,b,sayac;
  53. a=-1;
  54. b=1;
  55.  
  56. /*Yine ilk fonksiyondaki gibi a=-1 b=1 diyoruz.
  57. Bu sefer döngünün içinde 2 değişken kullandık. 3 taneyle olandan farkı yok, maksat marjinallik...
  58. */
  59.  
  60. for(sayac=0;sayac<n;sayac++) {
  61. b += a;
  62. a = b-a;
  63. }
  64. return b;
  65.  
  66. }
  67.  
  68. // Sıra geldi ana fonksiyonumuza...
  69.  
  70. int main() {
  71. int dizi,sayi,secim;
  72. /*Kullanıcıya 1 veya 2'yi girerek istenilen fonksiyonu seçmesini sağlıyoruz. */
  73. printf("n elemanli Fibonacci Dizisi icin 1'i\n");
  74. printf("n. Fibonacci Sayisi icin 2'yi tuslayiniz: ");
  75.  
  76. scanf("%d", &secim);
  77.  
  78. if(secim == 1) {
  79. printf("n degerini giriniz:");
  80. scanf("%d",&dizi);
  81. FibonacciDizisi(dizi);
  82. }
  83.  
  84. else if(secim == 2) {
  85. printf("n degerini giriniz:");
  86. scanf("%d",&sayi);
  87. //Gördüğünüz üzere FibonacciSayisi fonksiyonunun dönüş değerini direkt printf ile ekrana yazdırabiliyoruz. Like a Boss.
  88. printf("%d\n", FibonacciSayisi(sayi));
  89. }
  90. //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.
  91. else {
  92. printf("\nbeyin.dll not found.\n");
  93. printf("\nLutfen 1 -bir- veya 2 -iki-'yi tuslayin...\n");
  94. }
  95.  
  96. return 0;
  97. }

Report this snippet  

You need to login to post a comment.