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

Content added Content deleted
No edit summary
Line 35: Line 35:
=={{header|C++}}==
=={{header|C++}}==
<lang cpp>
<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>
#include <iostream>
/* Interface for all Continued Fractions

Nigel Galloway, February 9th., 2013.
*/
class ContinuedFraction {
class ContinuedFraction {
private:
private:
int n1, n2;
public:
public:
ContinuedFraction(const int numerator, const int denominator) {
virtual const int nextTerm(){};
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;
n1 = numerator; n2 = denominator;
}
}
Line 56: Line 59:
return thisTerm;
return thisTerm;
}
}
const bool moreTerms() {
const bool moreTerms() {return n2 > 0;}
};
return n2 > 0;
/* Generate 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>
</lang>
==Testing==
===Testing===
===1/2 3 23/8 13/11 22/7===
====1/2 3 23/8 13/11 22/7====
<lang cpp>
<lang cpp>
int main() {
int main() {
for(ContinuedFraction r2cf(1,2); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(1,2); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(3,1); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(3,1); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(23,8); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(23,8); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(13,11); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(13,11); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(22,7); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(22,7); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
return 0;
return 0;
Line 79: Line 89:
</lang>
</lang>
{{out}}
{{out}}
<pre>
===<math>\sqrt 2</math>===
0 2
3
2 1 7
1 5 2
3 7
</pre>
====<math>\sqrt 2</math>====
<lang cpp>
<lang cpp>
int main() {
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;
std::cout << std::endl;
for(ContinuedFraction r2cf(14142136,10000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(14142,10000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
for(r2cf n(14142136,10000000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
return 0;
return 0;
Line 90: Line 110:
</lang>
</lang>
{{out}}
{{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>
<lang cpp>
int main() {
int main() {
for(ContinuedFraction r2cf(31,10); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(31,10); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(314,100); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(314,100); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(3142,1000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(3142,1000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(31428,10000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(31428,10000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(314285,100000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(314285,100000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(3142857,1000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(3142857,1000000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(31428571,10000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(31428571,10000000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
for(ContinuedFraction r2cf(314285714,100000000); r2cf.moreTerms(); std::cout << r2cf.nextTerm() << " ");
for(r2cf n(314285714,100000000); n.moreTerms(); std::cout << n.nextTerm() << " ");
std::cout << std::endl;
std::cout << std::endl;
return 0;
return 0;
}
}
</lang>
</lang>
{{out}}
{{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}}==
=={{header|Perl 6}}==
Straightforward implementation:
Straightforward implementation: