Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Разработать программу калькулятор для чисел в различных системах счисления.
- // Обеспечить возможность:
- // - сохранения чисел под идентификаторами;
- // - вычисления простейших арифметических операций;
- // - ввода и вывода чисел в различных системах счисления
- ///////////////////////////////////////////////////////////
- #include <iostream>
- #include <string>
- #include <unordered_map>
- using namespace std;
- #include "calculate.hpp"
- ///////////////////////////////////////////////////////////
- num_culc num_culc::operator+ (num_culc num) {
- if (!init) {
- cout << "не инициализирована переменная" << endl;
- exit(1);
- }
- return (num_culc(value + num.value, num_sys));
- }
- //---------------------------------------------------------
- num_culc num_culc::operator- (num_culc num) {
- if (!init) {
- cout << "не инициализирована переменная" << endl;
- exit(1);
- }
- return (num_culc(value - num.value, num_sys));
- }
- //---------------------------------------------------------
- num_culc num_culc::operator* (num_culc num) {
- if (!init) {
- cout << "не инициализирована переменная" << endl;
- exit(1);
- }
- return (num_culc(value * num.value, num_sys));
- }
- //---------------------------------------------------------
- num_culc num_culc::operator/ (num_culc num) {
- if (!init) {
- cout << "не инициализирована переменная" << endl;
- exit(1);
- }
- return (num_culc(value / num.value, num_sys));
- }
- //---------------------------------------------------------
- num_culc& num_culc::operator= (int32_t num)
- { init = true; value = num; return *this; }
- num_culc& num_culc::operator= (string num) {
- init = true;
- value = stoi(num, 0, num_sys);
- return *this;
- }
- //---------------------------------------------------------
- ostream& operator<< (ostream& os, const num_culc& num) {
- if (!num.init) {
- cout << "не инициализирована переменная" << endl;
- exit(1);
- }
- // if (num.value == 0) {
- // os << num.value;
- // return os;
- // }
- // Поиск максимального делителя
- int max = 1;
- int value = num.value;
- while (max * num.num_sys <= value) {
- max *= num.num_sys;
- }
- // Вывод
- while (true) {
- if ((value / max) > 9) {
- os << (char)('A' + (value / max) - 10);
- } else {
- os << (value / max);
- }
- value %= max;
- if (max == 1) { break; }
- max /= num.num_sys;
- }
- return os;
- }
- //---------------------------------------------------------
- num_culc& num_culc::operator[] (int8_t sys) {
- num_sys = sys;
- return *this;
- }
- ///////////////////////////////////////////////////////////
- num_culc& calculate::operator[] (const string& name_var) {
- if (!vars.count(name_var)) {
- vars.insert({name_var, num_culc()});
- }
- return vars[name_var][10];
- }
- ///////////////////////////////////////////////////////////
- int main() {
- calculate calc;
- calc["var1"][8] = "100";
- cout << "var1 [sys8] = " << calc["var1"][8] << endl;
- cout << "var1 [sys10] = " << calc["var1"][10] << endl;
- cout << "var1 [sys16] = " << calc["var1"][16] << endl;
- cout << endl;
- calc["var2"] = 64 * 7;
- cout << "var2 [sys8] = " << calc["var2"][8] << endl;
- cout << "var2 [sys10] = " << calc["var2"][10] << endl;
- cout << "var2 [sys16] = " << calc["var2"][16] << endl;
- cout << endl;
- calc["var3"] = calc["var1"] + calc["var2"];
- cout << "var3 [sys8] = " << calc["var3"][8] << endl;
- cout << "var3 [sys10] = " << calc["var3"][10] << endl;
- cout << "var3 [sys16] = " << calc["var3"][16] << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment