Advertisement
dmkozyrev

fraction2.cpp

Jan 12th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. class Fraction
  6. {
  7.     private:
  8.         double p, q;
  9.     public:
  10.         Fraction(double a = 0, double b = 1){p=a; q=b;};
  11.         void print(){cout<<p<<"/"<<q;};
  12.         Fraction sum(Fraction f){return Fraction(p*f.q+f.p*q, q*f.q);};
  13.         Fraction sum(double d){return sum(Fraction(d, 1));};
  14.         Fraction operator+(Fraction f){return sum(f);};
  15.         Fraction operator+(double d){return sum(d);};
  16.         Fraction operator=(const Fraction & f){p = f.p; q = f.q;};
  17.         void setP(double value){p=value;};
  18.         void setQ(double value){q=value;};
  19.         double getP(){return p;};
  20.         double getQ(){return q;};
  21.        
  22.         friend ostream & operator << (ostream & os, const Fraction & f);
  23.         friend istream & operator >> (istream & is, Fraction & f);
  24.        
  25.         bool saveToFile(const string & filename)const;
  26.         bool loadFromFile(const string & filename);
  27. };
  28.  
  29. int main()
  30. {
  31.     Fraction temp1, temp2;
  32.     cin >> temp1;
  33.     cout << temp1 << endl;
  34.     string filename = "temp.txt";
  35.     cout << "Saving to file " << filename << endl;
  36.     temp1.saveToFile(filename);
  37.  
  38.     cout << "Loading from file " << filename << endl;
  39.     temp2.loadFromFile(filename);
  40.    
  41.     cout << temp2 << endl;
  42. }
  43.  
  44. bool Fraction::saveToFile(const string & filename)const
  45. {
  46.     std::ofstream fout(filename);
  47.     if (!fout)
  48.         return false;
  49.    
  50.     fout<<*this;
  51.     return true;   
  52. }
  53.  
  54. bool Fraction::loadFromFile(const string & filename)
  55. {
  56.     ifstream fin(filename);
  57.     if (!fin)
  58.         return false;
  59.    
  60.     fin>>*this;
  61.     return true;
  62. }
  63.  
  64. ostream & operator << (ostream & os, const Fraction & f)
  65. {
  66.     os << f.p;
  67.     if (f.q != 1)
  68.         os << "/" << f.q;
  69.     return os; 
  70. }
  71.  
  72. istream & operator >> (istream & is, Fraction & f)
  73. {
  74.     string input;
  75.     is >> input;
  76.     int pos = input.find('/');
  77.     string left, right;
  78.     if (pos == -1)
  79.     {
  80.         left = input; right = "1";
  81.     }
  82.     else
  83.     {
  84.         left = input.substr(0, pos);
  85.         right = input.substr(pos+1);
  86.     }
  87.     f.setP(stod(left)); f.setQ(stod(right));
  88.     return is;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement