Continued fraction/Arithmetic/Construct from rational number: Difference between revisions

No edit summary
Line 34:
 
=={{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}}==
Straightforward implementation:
2,172

edits