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

no edit summary
No edit summary
Line 35:
=={{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>
/* Interface for all Continued Fractions
 
Nigel Galloway, FebruarFebruary 8th9th., 2013.
*/
class ContinuedFraction {
private:
int n1, n2;
public:
ContinuedFraction(const int numerator,virtual const int denominatornextTerm() {};
virtual const bool moreTerms(){};
};
/* Create a continued fraction from a rational number
Nigel Galloway, February 9th., 2013.
*/
class r2cf : ContinuedFraction {
private: int n1, n2;
public:
r2cf(const int numerator, const int denominator) {
n1 = numerator; n2 = denominator;
}
Line 56 ⟶ 59:
return thisTerm;
}
const bool moreTerms() {return n2 > 0;}
};
return n2 > 0;
/* Class to representGenerate a continued fraction. for sqrt of 2
}
Nigel Galloway, February 9th., 2013.
*/
class SQRT2 : public ContinuedFraction {
private: bool first=true;
public:
const int nextTerm() {if (first) {first = false; return 1;} else return 2;}
const bool moreTerms() {return true;}
};
</lang>
===Testing===
====1/2 3 23/8 13/11 22/7====
<lang cpp>
int main() {
for(ContinuedFraction r2cf n(1,2); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFraction r2cf n(3,1); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFraction r2cf n(23,8); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFraction r2cf n(13,11); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFraction r2cf n(22,7); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
return 0;
Line 79 ⟶ 89:
</lang>
{{out}}
<pre>
===<math>\sqrt 2</math>===
0 2
3
2 1 7
1 5 2
3 7
</pre>
====<math>\sqrt 2</math>====
<lang cpp>
int main() {
int i = 0;
for(ContinuedFraction r2cf(14142,10000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(SQRT2 n; i++ < 20; std::cout << n.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFraction r2cf n(1414213614142,1000000010000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFraction r2cf n(1414214142136,1000010000000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
return 0;
Line 90 ⟶ 110:
</lang>
{{out}}
<pre>
===Real approximations of a rational number===
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
1 2 2 2 2 2 1 1 29
1 2 2 2 2 2 2 2 2 2 6 1 2 4 1 1 2
</pre>
====Real approximations of a rational number====
<lang cpp>
int main() {
for(ContinuedFractionr2cf r2cfn(31,10); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(314,100); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(3142,1000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(31428,10000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(314285,100000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(3142857,1000000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(31428571,10000000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
for(ContinuedFractionr2cf r2cfn(314285714,100000000); r2cfn.moreTerms(); std::cout << r2cfn.nextTerm() << " ");
std::cout << std::endl;
return 0;
}
</lang>
{{out}}
<pre>
 
3 10
3 7 7
3 7 23 1 2
3 7 357
3 7 2857
3 7 142857
3 7 476190 3
3 7 7142857
</pre>
=={{header|Perl 6}}==
Straightforward implementation:
2,172

edits