aLT22

4semlab2 (C++) FINAL WORKING VERS

Mar 16th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. // Реализация класса Money
  7. class Money {
  8.     int rubbles; // рубли
  9.     int penny; // копейки
  10.     public:
  11.         void setMoney();
  12.         void normalize();
  13.         void getMoney();
  14.         void subtraction(Money t);
  15.         void sum_dividing(Money t); // деление сумм
  16.         void dividing_by_const();
  17.         void multiplication();
  18.         void comparison(Money t);
  19.         Money operator + (Money t) { // реализация сложения
  20.             Money func_result;
  21.             if ((penny + t.penny) >= 100 ) {
  22.                 int delta_rub = (penny + t.penny) / 100, delta_kop = (penny + t.penny) % 100;
  23.                 func_result.rubbles = (rubbles + t.rubbles);
  24.                 func_result.rubbles += delta_rub;
  25.                 func_result.penny = delta_kop;
  26.             } else {
  27.                 func_result.rubbles = rubbles + t.rubbles;
  28.                 func_result.penny = penny + t.penny;
  29.             }
  30.             return func_result;
  31.         }
  32. };
  33.  
  34. void Money :: sum_dividing(Money t) {
  35.     double summ_one = (double)rubbles + ((double)penny / 100.0);
  36.     double summ_two = (double)t.rubbles + ((double)t.penny / 100.0);
  37.     double result = summ_one / summ_two;
  38.     rubbles = (int)result;
  39.     penny = (int)(result * 100) % 100;
  40.     cout << rubbles << ',' << penny;
  41. }
  42.  
  43. void Money :: subtraction(Money t) {
  44.     double summ_one = (double)rubbles + ((double)penny / 100.0);
  45.     double summ_two = (double)t.rubbles + ((double)t.penny / 100.0);
  46.     double result = summ_one - summ_two;
  47.     rubbles = (int)result;
  48.     penny = (int)(result * 100) % 100;
  49.     cout << rubbles << ',' << penny << endl;
  50. }
  51.  
  52. void Money :: multiplication() {
  53.     double d_const;
  54.     cout << "Введите вещественную константу для вычислений: "; cin >> d_const;
  55.     double summ = (double)rubbles + ((double)penny / 100.0);
  56.     summ *= d_const;
  57.     rubbles = (int)summ;
  58.     penny = (int)(summ * 100) % 100;
  59. }
  60.  
  61. void Money :: normalize() {
  62.     if (rubbles < 0 || penny < 0) {
  63.         cout << "Invalid input!" << endl;
  64.     } else {
  65.         if (penny >= 100) {
  66.             int delta_rub = penny / 100, delta_kop = penny % 100;
  67.             rubbles = rubbles + delta_rub;
  68.             penny = delta_kop;
  69.         }
  70.     }
  71. }
  72.  
  73. void Money :: setMoney() {
  74.     cout << "Введите сумму: " << endl << "Рубли: "; cin >> rubbles;
  75.     cout << "Копейки: "; cin >> penny;
  76. }
  77.  
  78. void Money :: getMoney() {
  79.     cout << "Результат: " << rubbles << ',' << penny << endl;
  80. }
  81.  
  82. void Money :: comparison(Money t) {
  83.     if (rubbles < t.rubbles) {
  84.         cout << "Первая денежная сумма меньше второй" << endl;
  85.     } else if (rubbles > t.rubbles) {
  86.         cout << "Вторая денежная сумма меньше первой" << endl;
  87.     } else if (penny < t.penny) {
  88.         cout << "Первая денежная сумма меньше второй" << endl;
  89.     } else if (penny > t.penny) {
  90.         cout << "Вторая денежная сумма больше первой" << endl;
  91.     } else {
  92.         cout << "Денежные суммы равны" << endl;
  93.     }
  94. }
  95.  
  96. void Money :: dividing_by_const () {
  97.     double d_const;
  98.     cout << "Введите вещественную константу для вычислений: "; cin >> d_const;
  99.     if (d_const == 0) {
  100.         cout << "Invalid CONST!" << endl;
  101.     } else {
  102.         double summ = (double)rubbles + ((double)penny / 100.0);
  103.         summ /= d_const;
  104.         rubbles = (int)summ;
  105.         penny = (int)(summ * 100) % 100;
  106.     }
  107. }
  108.  
  109. int main() {
  110.     setlocale(LC_ALL, "Russian");
  111.     Money value_one, value_two; // две переменные типа класса (две денюшки)
  112.     value_one.setMoney(); value_two.setMoney();// инициализация
  113.     value_one.normalize(); value_two.normalize(); //приведение к нормальному виду
  114.     cout << "Введенные суммы: \nПервая: "; value_one.getMoney(); cout << "\nВторая: "; value_two.getMoney();
  115.     cout << endl;
  116.     char operation;
  117.     cout << "Введите то, что хотите сделать с числами: \nСложение: + \nВычитание: - \nУмножение на double константу: # \nДеление сумм между собой: / \nСравнение: = \nДеление на double константу: % \n";
  118.     cout << "Введите операцию: "; cin >> operation;
  119.     Money final_value;
  120.     bool choice = false;
  121.     switch (operation) {
  122.         case '+':
  123.             final_value = value_one + value_two;
  124.             final_value.normalize();
  125.             final_value.getMoney();
  126.             break;
  127.         case '=':
  128.             value_one.comparison(value_two);
  129.             break;
  130.         case '%':
  131.             cout << "Выберите, какую сумму делить на вещественную константу (0 или 1): ";
  132.             cin >> choice;
  133.             if (!choice) {
  134.                 value_one.dividing_by_const();
  135.                 value_one.normalize();
  136.                 value_one.getMoney();
  137.                 break;
  138.             } else {
  139.                 value_two.dividing_by_const();
  140.                 value_two.normalize();
  141.                 value_two.getMoney();
  142.                 break;
  143.             }
  144.         case '-':
  145.             value_one.subtraction(value_two);
  146.             break;
  147.         case '#':
  148.             cout << "Выберите, какую сумму делить на вещественную константу (0 или 1): ";
  149.             cin >> choice;
  150.             if (!choice) {
  151.                 value_one.multiplication();
  152.                 value_one.normalize();
  153.                 value_one.getMoney();
  154.                 break;
  155.             } else {
  156.                 value_two.multiplication();
  157.                 value_two.normalize();
  158.                 value_two.getMoney();
  159.                 break;
  160.             }
  161.         case '/':
  162.             value_one.sum_dividing(value_two);
  163.             break;
  164.     }
  165.     system("pause");
  166.     return 0;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment