Continued fraction/Arithmetic/Construct from rational number: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 34: | Line 34: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
<lang cpp> |
|||
/* Class to represent a continued fraction. |
|||
Contructor taking two intergers representing a rational number |
|||
int nextTerm returns the next term of the continued fraction |
|||
bool moreTerms returns true if ther are more terms |
|||
Nigel Galloway, Februar 8th., 2013. |
|||
*/ |
|||
#include <iostream> |
|||
class ContinuedFraction { |
|||
private: |
|||
int n1, n2; |
|||
public: |
|||
ContinuedFraction(const int numerator, const int denominator) { |
|||
n1 = numerator; n2 = denominator; |
|||
} |
|||
const int nextTerm() { |
|||
const int thisTerm = n1/n2; |
|||
const int t2 = n2; n2 = n1 - thisTerm * n2; n1 = t2; |
|||
return thisTerm; |
|||
} |
|||
const bool moreTerms() { |
|||
return n2 > 0; |
|||
} |
|||
}; |
|||
</lang> |
|||
==Testing== |
|||
===1/2 3 23/8 13/11 22/7=== |
|||
<lang cpp> |
|||
int main() { |
|||
for(ContinuedFraction r2cf(1,2); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(3,1); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(23,8); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(13,11); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(22,7); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
return 0; |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
===<math>\sqrt 2</math>=== |
|||
<lang cpp> |
|||
int main() { |
|||
for(ContinuedFraction r2cf(14142,10000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(14142136,10000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
return 0; |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
===Real approximations of a rational number=== |
|||
<lang cpp> |
|||
int main() { |
|||
for(ContinuedFraction r2cf(31,10); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(314,100); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(3142,1000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(31428,10000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(314285,100000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(3142857,1000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(31428571,10000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
for(ContinuedFraction r2cf(314285714,100000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " "); |
|||
std::cout << std::endl; |
|||
return 0; |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |
||
Straightforward implementation: |
Straightforward implementation: |