Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- class BadAddition
- {
- private:
- float q1, q2;
- public:
- BadAddition (float q1, float q2) :
- q1 (q1),
- q2 (q2)
- {}
- float Get1 () const
- {
- return q1;
- }
- float Get2 () const
- {
- return q2;
- }
- };
- class FloatSequence
- {
- private:
- float a0;
- public:
- FloatSequence (float a0) :
- a0 (a0)
- {}
- virtual float Elem (int idx) const = 0;
- float operator[] (int idx)
- {
- if (idx == 0)
- return a0;
- else
- return Elem (idx);
- }
- };
- class GeometricSequence : public FloatSequence
- {
- private:
- float a0, q;
- public:
- GeometricSequence (float a0, float q) :
- FloatSequence(a0),
- q (q)
- {}
- GeometricSequence operator+ (const GeometricSequence& op2) const
- {
- if (q == op2.q)
- {
- GeometricSequence res (a0 + op2.a0, q);
- return res;
- }
- else
- throw BadAddition (q, op2.q);
- }
- float Elem (int idx) const
- {
- int res = a0;
- for (int i = 0; i < idx; i++)
- {
- res = res * q;
- }
- return res;
- }
- };
- int main ()
- {
- try
- {
- GeometricSequence a (1, 2);
- GeometricSequence b (0.25, 2);
- GeometricSequence c (16, 0.5);
- printf ("%3.3f %3.3f %3.3f\n", a[0], b[3], c[2]);
- printf ("%3.3f\n", (a+b) [1]);
- printf ("%3.3f\n", (b+c) [1]);
- }
- catch (const BadAddition &x)
- {
- printf ("Bad addition: %3.3f %3.3f\n", x.Get1(), x.Get2());
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement