Advertisement
J3st3rs_j0k3

pr1_rational

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