Advertisement
J3st3rs_j0k3

class_rational

Mar 16th, 2022
1,067
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include "cstdio"
  4. #include <locale.h> //подключенные библиотеки
  5.  
  6. using namespace std; //используемое пространство имен
  7.  
  8. class Rational{
  9.     private:
  10.         int chisl; //числитель
  11.         int znam; //знаменатель
  12.     public:
  13.         Rational(int valueChisl, int valueZnam){//constructor with parameters
  14.             chisl = valueChisl;
  15.             znam = valueZnam;
  16.         }
  17.         Rational(){ //constructor
  18.         };
  19.         Rational(const Rational & ex){ //constructor of copying
  20.             chisl = ex.chisl;
  21.             znam = ex.znam;
  22.         }
  23.         ~Rational(){ //destructor
  24.         }
  25.  
  26.         //setter and getter for chisl
  27.         void SetChisl(int valueChisl){
  28.             chisl = valueChisl;
  29.         }
  30.         int GetChisl(){
  31.             return chisl;
  32.         }
  33.  
  34.         //setter and getter for znam
  35.         void SetZnam(int valueZnam){
  36.             znam = valueZnam;
  37.         }
  38.         int GetZnam(){ //getter for znam
  39.             return znam;
  40.         }
  41.  
  42.         //Methods of class
  43.         double ToDouble(){
  44.             return (double)this->chisl/znam;
  45.         }
  46.  
  47.  
  48.         //перегрузка операторов
  49.         bool operator > (Rational& other){
  50.             return this->ToDouble() > other.ToDouble();
  51.         }
  52.  
  53.         bool operator > (const double& digit){
  54.             return this->ToDouble() > digit;
  55.         }
  56.  
  57.         double operator * (const double & digit){
  58.             return this->ToDouble()* digit;
  59.         }
  60.  
  61.         Rational operator * (const Rational & other){
  62.             Rational mult;
  63.             mult.chisl = this->chisl * other.chisl;
  64.             mult.znam = this->znam * other.znam;
  65.             return mult;
  66.         }
  67.  
  68.         friend ostream & operator <<(ostream &out, const Rational &output){
  69.             cout<<"Поля объекта:\n"<<output.chisl<<endl<<"————"<<endl<<output.znam<<endl;
  70.             return cout;
  71.         }
  72.         friend istream & operator >>(istream &in, Rational &input){
  73.  
  74.             cout<<"Введите числитель: ";
  75.             while(true){
  76.                 cin>>input.chisl;
  77.                 if(cin.fail() || input.chisl == 0){
  78.                     cout<<"Ошибка! Повторите попытку ввода числителя: ";
  79.                     cin.clear();
  80.                     cin.ignore(32767, '\n');
  81.                 }
  82.                 else break;
  83.             }
  84.  
  85.             cout<<"Введите знаменатель: ";
  86.             while(true){
  87.                 cin>>input.znam;
  88.                 if(cin.fail() || input.znam == 0){
  89.                     cout<<"Ошибка! Повторите попытку ввода знаменателя: ";
  90.                     cin.clear();
  91.                     cin.ignore(32767, '\n');
  92.                 }
  93.                 else break;
  94.             }
  95.  
  96.             if (input.chisl < 0 && input.znam < 0){
  97.                 input.chisl *= -1;
  98.                 input.znam *= -1;
  99.             }
  100.             return cin;
  101.         }
  102. };
  103.  
  104. int main()
  105. {
  106.     setlocale(0, "");
  107.  
  108.     int numer1, denom1, numer2, denom2; //числители и знаменатели
  109.     double real; //вещественное число
  110.  
  111.     Rational first(numer1, denom1); //создание объектов класса
  112.     Rational second(numer2, denom2);
  113.     Rational Res;
  114.  
  115.  
  116.     cout<<"Первое рац число:\n";
  117.     cin>>first;
  118.     cout<<endl<<"Второе рац число:"<<endl;
  119.     cin>>second;
  120.     cout<<endl<<"Действительное число:"<<endl;
  121.     cin>>real;
  122.  
  123.     cout<<first<<endl;
  124.     cout<<second<<endl;
  125.     cout<<"Вещ. число: "<<real<<endl;
  126.     cout<<endl;
  127.  
  128.     cout<<endl;
  129.  
  130.     int menu;
  131.  
  132.     do{
  133.         cout<<"0 - для перезаписи первого рац. числа"<<endl;
  134.         cout<<"1 - для перезаписи второго рац. числа"<<endl;
  135.         cout<<"2 - для перезаписи действительного числа"<<endl<<endl;
  136.  
  137.         cout<<"5 - для сравнения > двух рациональных чисел"<<endl;
  138.         cout<<"6 - для сравнения > рационального числа с действительным"<<endl;
  139.         cout<<"7 - для умножения *   рационального числа с действительным"<<endl;
  140.         cout<<"8 - для умножения * двух рациональных"<<endl;
  141.         cout<<"s - чтобы просмотреть все"<<endl;
  142.         cout<<"e - для выхода"<<"\n\n"<<"Ведите команду: ";
  143.  
  144.         cin>>menu;
  145.  
  146.         switch(menu){
  147.             case 0:
  148.                 cin>>first;
  149.                 break;
  150.             case 1:
  151.                 cin>>second;
  152.                 break;
  153.             case 2:
  154.                 cout<<"Введите действительное число";
  155.                 cin>>real;
  156.                 cout<<endl;
  157.                 break;
  158.             case 5:
  159.                 cout<<'\n'<<"first > second: "<<(first > second)<<endl;
  160.                 break;
  161.             case 6:
  162.                 cout<<'\n'<<"first > real: "<<(first > real)<<endl;
  163.                 cout<<"second > real: "<<(second > real)<<endl;
  164.                 break;
  165.             case 7:
  166.                 double answer1, answer2;
  167.                 answer1 = first * real;
  168.                 answer2 = second * real;
  169.                 cout<<'\n'<<"Результат умножения первого рац. числа с вещ-ым  : "<<answer1<<endl<<"Результат умножения второго рац. числа с вещ-ым: "<<answer2<<endl;
  170.                 break;
  171.             case 8:
  172.                 Res = first * second;
  173.                 cout<<endl;
  174.                 cout<<Res;
  175.                 break;
  176.             case 9:
  177.                 cout<<first<<endl;
  178.                 cout<<second<<endl;
  179.                 cout<<real;
  180.                 break;
  181.         }
  182.         cout<<endl;
  183.     }while(menu != 10);
  184.     return 0;
  185. }
  186.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement