Advertisement
mercMatvey4

в

Dec 12th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4. #include <iomanip>
  5. using namespace std;
  6.  
  7. void Exit()
  8. {
  9. cout << "\n\nКонец\n\n";
  10. exit(0);
  11. }
  12.  
  13. int powerup(int number, int degree)
  14. {
  15. int result = 1;
  16. for(int i = 1; i <= degree; i++)
  17. result *= number;
  18. return result;
  19. }
  20.  
  21. float powerdown(int number, int degree)
  22. {
  23. float result = 1;
  24. for(int i = 1; i <= degree; i++)
  25. result *= number;
  26. return 1/result;
  27. }
  28.  
  29. void DecToOct()
  30. {
  31. bool done;
  32. do
  33. {
  34. string num,integer_temp,fraction_temp;
  35. int value,integer;
  36. double fraction,result;
  37. system("cls");
  38. cout << "Перевод числа из десятичной системы счисления в восьмеричную\n\n";
  39. cout << "Введите число, дробная часть указывается через \" . \"\n\n";
  40. cin >> num;
  41. cout << "\nИсходное число : " << num;
  42. value = num.find('.');
  43. integer_temp = num.substr(0, value);
  44. if(num.find('.') == string::npos) fraction_temp = "0";
  45. else fraction_temp = num.substr(value+1, num.size()); fraction_temp.insert(0,"0");
  46. integer = stoi(integer_temp);
  47. fraction = stod(fraction_temp)/powerup(10,fraction_temp.size()-1);
  48. int int_res = 0, temp = 1; // temp - разряды
  49. while (integer)
  50. {
  51. int_res += integer % 8 * temp;
  52. integer /= 8;
  53. temp *= 10;
  54. }
  55. double frac_res = 0, temp1;
  56. for (int i = 0; i < 8; i++)
  57. {
  58. fraction *= 8;
  59. temp1 = (int)fraction;
  60. frac_res += temp1 * powerdown(10,i+1);
  61. fraction -= temp1;
  62. }
  63. result = int_res + frac_res;
  64. cout << "\nРезультат перевода : " <<setprecision(8+value) << result;
  65. cout << "\n\n\nПродолжить (y/n)? ";
  66. char c;
  67. cin >> c;
  68. done = (c != 'y');
  69. }
  70. while (!done);
  71. system("cls");
  72. cout << "\n0 - для выхода\n\n1 - Перевод из десятичной системы счисления в восьмеричную\n\n2 - Перевод из восьмеричной системы счисления в десятичную\n\n";
  73. }
  74.  
  75. void OctToDec()
  76. {
  77. bool done;
  78. do
  79. {
  80. string num,integer_temp,fraction_temp;
  81. int value,integer;
  82. double fraction,result;
  83. system("cls");
  84. cout << "Перевод числа из восьмеричной системы счисления в десятичную\n\n";
  85. cout << "Введите число, дробная часть указывается через \" . \"\n\n";
  86. cin >> num;
  87. cout << "\nИсходное число : " << num;
  88. value = num.find('.');
  89. integer_temp = num.substr(0, value);
  90. if(num.find('.') == string::npos) fraction_temp = "0";
  91. else fraction_temp = num.substr(value+1, num.size()); fraction_temp.insert(0,"0");
  92. integer = stoi(integer_temp);
  93. fraction = stod(fraction_temp)/powerup(10,fraction_temp.size()-1);
  94. int int_res = 0,temp = 8; // temp - разряды
  95. for (int i = 0; integer > 0; i++)
  96. {
  97. int_res += (integer%10)*powerup(8.0,i);
  98. integer /= 10;
  99. }
  100. double frac_res = 0, temp1;
  101. for (int i = 0; i < 10; i++)
  102. {
  103. fraction *= 10;
  104. temp1 = (int)fraction;
  105. frac_res += temp1 * powerdown(8,i+1);
  106. fraction -= temp1;
  107. }
  108. result = int_res + frac_res;
  109. cout << "\nРезультат перевода : " <<setprecision(8+value) << result;
  110. cout << "\n\n\nПродолжить (y/n)? ";
  111. char c;
  112. cin >> c;
  113. done = (c != 'y');
  114. }
  115. while (!done);
  116. system("cls");
  117. cout << "\n0 - для выхода\n\n1 - Перевод из десятичной системы счисления в восьмеричную\n\n2 - Перевод из восьмеричной системы счисления в десятичную\n\n";
  118. }
  119.  
  120. int main()
  121. {
  122. void(*pact[])()={Exit,DecToOct,OctToDec};
  123. setlocale(LC_ALL,"");
  124. int num;
  125. //void(*pact[])(int n)={f0,f1,f2};
  126. cout << "0 - для выхода\n\n1 - Перевод из десятичной системы счисления в восьмеричную\n\n2 - Перевод из восьмеричной системы счисления в десятичную\n\n";
  127. while (1)
  128. {
  129. cin >> num;
  130. pact[num]();
  131. }
  132. return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement