SHARE
TWEET

main.cpp

daniil_mironoff Apr 1st, 2020 32 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Разработать программу калькулятор для чисел в различных системах счисления.
  2. // Обеспечить возможность:
  3. //  - сохранения чисел под идентификаторами;
  4. //  - вычисления простейших арифметических операций;
  5. //  - ввода и вывода чисел в различных системах счисления
  6.  
  7. ///////////////////////////////////////////////////////////
  8.  
  9. #include <iostream>
  10. #include <string>
  11. #include <unordered_map>
  12.  
  13. using namespace std;
  14.  
  15. #include "calculate.hpp"
  16.  
  17. ///////////////////////////////////////////////////////////
  18.  
  19. num_culc num_culc::operator+ (num_culc num) {
  20.     if (!init) {
  21.         cout << "не инициализирована переменная" << endl;
  22.         exit(1);
  23.     }
  24.  
  25.     return (num_culc(value + num.value, num_sys));
  26. }
  27.  
  28. //---------------------------------------------------------
  29.  
  30.  
  31. num_culc num_culc::operator- (num_culc num) {
  32.     if (!init) {
  33.         cout << "не инициализирована переменная" << endl;
  34.         exit(1);
  35.     }
  36.  
  37.     return (num_culc(value - num.value, num_sys));
  38. }
  39.  
  40. //---------------------------------------------------------
  41.  
  42.  
  43. num_culc num_culc::operator* (num_culc num) {
  44.     if (!init) {
  45.         cout << "не инициализирована переменная" << endl;
  46.         exit(1);
  47.     }
  48.  
  49.     return (num_culc(value * num.value, num_sys));
  50. }
  51.  
  52. //---------------------------------------------------------
  53.  
  54.  
  55. num_culc num_culc::operator/ (num_culc num) {
  56.     if (!init) {
  57.         cout << "не инициализирована переменная" << endl;
  58.         exit(1);
  59.     }
  60.  
  61.     return (num_culc(value / num.value, num_sys));
  62. }
  63.  
  64. //---------------------------------------------------------
  65.  
  66. num_culc& num_culc::operator= (int32_t num)
  67.     { init = true; value = num; return *this; }
  68.  
  69.  
  70. num_culc& num_culc::operator= (string num) {
  71.     init = true;
  72.     value = stoi(num, 0, num_sys);
  73.     return *this;
  74. }
  75.  
  76. //---------------------------------------------------------
  77.  
  78. ostream& operator<< (ostream& os, const num_culc& num) {
  79.     if (!num.init) {
  80.         cout << "не инициализирована переменная" << endl;
  81.         exit(1);
  82.     }
  83.  
  84.     // if (num.value == 0) {
  85.     //     os << num.value;
  86.     //     return os;
  87.     // }
  88.    
  89.     // Поиск максимального делителя
  90.     int max = 1;
  91.     int value = num.value;
  92.  
  93.     while (max * num.num_sys <= value) {
  94.         max *= num.num_sys;
  95.     }
  96.  
  97.     // Вывод
  98.     while (true) {
  99.         if ((value / max) > 9) {
  100.             os << (char)('A' + (value / max) - 10);
  101.         } else {
  102.             os << (value / max);
  103.         }
  104.  
  105.         value %= max;
  106.  
  107.         if (max == 1) { break; }
  108.         max /= num.num_sys;
  109.     }
  110.  
  111.     return os;
  112. }
  113.  
  114. //---------------------------------------------------------
  115.  
  116. num_culc& num_culc::operator[] (int8_t sys) {
  117.     num_sys = sys;
  118.     return *this;
  119. }
  120.  
  121. ///////////////////////////////////////////////////////////
  122.  
  123. num_culc& calculate::operator[] (const string& name_var) {
  124.     if (!vars.count(name_var)) {
  125.         vars.insert({name_var, num_culc()});
  126.     }
  127.  
  128.    return vars[name_var][10];
  129. }
  130.  
  131. ///////////////////////////////////////////////////////////
  132.  
  133. int main() {
  134.     calculate calc;
  135.  
  136.     calc["var1"][8] = "100";
  137.     cout << "var1 [sys8]  = " << calc["var1"][8] << endl;
  138.     cout << "var1 [sys10] = " << calc["var1"][10] << endl;
  139.     cout << "var1 [sys16] = " << calc["var1"][16] << endl;
  140.  
  141.     cout << endl;
  142.  
  143.     calc["var2"] = 64 * 7;
  144.     cout << "var2 [sys8]  = " << calc["var2"][8] << endl;
  145.     cout << "var2 [sys10] = " << calc["var2"][10] << endl;
  146.     cout << "var2 [sys16] = " << calc["var2"][16] << endl;
  147.  
  148.     cout << endl;
  149.  
  150.     calc["var3"] = calc["var1"] + calc["var2"];
  151.     cout << "var3 [sys8]  = " << calc["var3"][8] << endl;
  152.     cout << "var3 [sys10] = " << calc["var3"][10] << endl;
  153.     cout << "var3 [sys16] = " << calc["var3"][16] << endl;
  154.  
  155.  
  156.  
  157.     return 0;
  158. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top