00001 /* 00002 Name: DL programowanie zadanie 15 z rozdziału 16 książki Thinking in C++ 00003 Author: Piotr Leżoń 00004 Date: 27-06-06 19:28 00005 Description: Przekształć funkcję fibonacci() w szablon funkcji o parametrze określającym 00006 typ zwracanej przez funkcję wartości (zamiast wartości typu int będzie ona 00007 mogła zwracać wartości typów long, float itp.). 00008 */ 00009 //: C16:fibonacci.cpp {O} 00010 // From Thinking in C++, 2nd Edition 00011 // Available at http://www.BruceEckel.com 00012 // (c) Bruce Eckel 2000 00013 // Copyright notice in Copyright.txt 00014 00015 00016 #include "require.h" 00017 #include <iostream> 00018 00019 using namespace std; 00020 00021 template<class T> 00022 T fibonacci(int n) 00023 { 00024 const int sz = 100; 00025 require(n < sz); 00026 static T f[sz]; // Initialized to zero 00027 f[0] = f[1] = 1; 00028 // Scan for unfilled array elements: 00029 int i; 00030 for(i = 0; i < sz; i++) 00031 if(f[i] == 0) break; 00032 while(i <= n) { 00033 f[i] = f[i-1] + f[i-2]; 00034 i++; 00035 } 00036 return f[n]; 00037 //mozna bylo takze zrobic to tak: return (T) f[n], zostalyby przeprowadzone standardowe konwersje typow i w resultacie funkcja zwrocilaby potrzebny nam typ T 00038 } 00039 00040 int main() 00041 { 00042 cout<<fibonacci<float>(10)<<endl; 00043 int a=fibonacci<int>(3); 00044 system("pause"); 00045 return 0; 00046 }