Advertisement
Guest User

Untitled

a guest
May 24th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. class BadAddition
  4. {
  5. private:
  6.     float q1, q2;
  7. public:
  8.     BadAddition (float q1, float q2) :
  9.         q1 (q1),
  10.         q2 (q2)
  11.     {}
  12.    
  13.     float Get1 () const
  14.     {
  15.         return q1;
  16.     }
  17.    
  18.     float Get2 () const
  19.     {
  20.         return q2;
  21.     }
  22. };
  23.  
  24. class FloatSequence
  25. {
  26. private:
  27.     float a0;
  28.    
  29. public:
  30.     FloatSequence (float a0) :
  31.         a0 (a0)
  32.     {}
  33.    
  34.     virtual float Elem (int idx) const = 0;
  35.    
  36.     float operator[] (int idx)
  37.     {
  38.         if (idx == 0)
  39.             return a0;
  40.         else
  41.             return Elem (idx);
  42.     }
  43. };
  44.  
  45. class GeometricSequence : public FloatSequence
  46. {
  47. private:
  48.     float a0, q;
  49. public:
  50.     GeometricSequence (float a0, float q) :
  51.         FloatSequence(a0),
  52.         q (q)
  53.     {}
  54.    
  55.     GeometricSequence operator+ (const GeometricSequence& op2) const
  56.     {
  57.         if (q == op2.q)
  58.         {
  59.             GeometricSequence res (a0 + op2.a0, q);
  60.             return res;
  61.         }
  62.         else
  63.             throw BadAddition (q, op2.q);
  64.     }
  65.    
  66.     float Elem (int idx) const
  67.     {
  68.         int res = a0;
  69.        
  70.         for (int i = 0; i < idx; i++)
  71.         {
  72.             res = res * q;
  73.         }
  74.        
  75.         return res;
  76.     }
  77. };
  78.  
  79. int main ()
  80. {
  81.     try
  82.     {
  83.         GeometricSequence a (1, 2);
  84.         GeometricSequence b (0.25, 2);
  85.         GeometricSequence c (16, 0.5);
  86.         printf ("%3.3f %3.3f %3.3f\n", a[0], b[3], c[2]);
  87.         printf ("%3.3f\n", (a+b) [1]);
  88.         printf ("%3.3f\n", (b+c) [1]);
  89.     }
  90.     catch (const BadAddition &x)
  91.     {
  92.         printf ("Bad addition: %3.3f %3.3f\n", x.Get1(), x.Get2());
  93.     }
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement