Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.46 KB | None | 0 0
  1. //#include "stdafx.h"
  2. #include <iostream>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <conio.h>
  6. #include <string>
  7. using namespace std;
  8.  
  9. long double degree(int deg, int number) {
  10. long double res = 1;
  11. for (int i = 0; i < abs(deg); i++) {
  12. res *= number;
  13. }
  14. if (deg < 0)
  15. res = 1 / res;
  16. return res;
  17. }
  18.  
  19. void numberEnter(string& str, int numberSystem, char& sign) {
  20. char ch = 0;
  21. while (ch != 13) {
  22. ch = _getch();
  23. if (ch == '-') {
  24. sign *= -1;
  25. cout << ch;
  26. }
  27. else {
  28. if (numberSystem > 36) {
  29. if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch < numberSystem + '0' + 7 + 6)) {
  30. cout << ch;
  31. str += ch;
  32. }
  33. }
  34. else {
  35. if (numberSystem > 10) {
  36. if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch < numberSystem + '0' + 7)) {
  37. cout << ch;
  38. str += ch;
  39. }
  40. }
  41. else {
  42. if (ch >= '0' && ch < numberSystem + '0') {
  43. cout << ch;
  44. str += ch;
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }
  51.  
  52. void fractionalNumberEnter(string& str, int numberSystem, char& sign, int& dotPos) {
  53. char ch = 0;
  54. int k = 0;
  55. while (ch != 13) {
  56. ch = _getch();
  57. if (ch == '.' && dotPos == -1) {
  58. dotPos = k;
  59. cout << ch;
  60. str += ch;
  61. k++;
  62. }
  63. else {
  64. if (ch == '-') {
  65. sign *= -1;
  66. cout << ch;
  67. }
  68. else {
  69. k++;
  70. if (numberSystem > 36) {
  71. if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch < numberSystem + '0' + 7 + 6)) {
  72. cout << ch;
  73. str += ch;
  74. }
  75. }
  76. else {
  77. if (numberSystem > 10) {
  78. if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch < numberSystem + '0' + 7)) {
  79. cout << ch;
  80. str += ch;
  81. }
  82. }
  83. else {
  84. if (ch >= '0' && ch < numberSystem + '0') {
  85. cout << ch;
  86. str += ch;
  87. }
  88. }
  89. }
  90. }
  91. }
  92. }
  93. }
  94.  
  95. void charEnter(string& charEnter) {
  96. char ch = 0;
  97. while (ch != 13/*return*/) {
  98. ch = _getch();
  99. if (ch >= '0' && ch <= '9') {
  100. cout << ch;
  101. charEnter += ch;
  102. }
  103. if ((charEnter[0] > '2' && charEnter.length() >= 2) || (charEnter.length() == 3))
  104. break;
  105. }
  106. }
  107.  
  108. void printAlphabet(int numberSystem) {
  109. cout << "Admissible characters: ";
  110. for (int i = 0; i < numberSystem; i++) {
  111. if (i < 10)
  112. cout << "\t" << char(i + '0') << "-" << i << " ";
  113. if (i >= 10 && i < 36)
  114. cout << "\t" << char(i + '0' + 7) << "-" << i << " ";
  115. if (i >= 36)
  116. cout << "\t" << char(i + '0' + 7 + 6) << "-" << i << " ";
  117. }
  118. cout << endl;
  119. }
  120.  
  121. int main()
  122. {
  123. //system("color F0");
  124. char dataType;
  125. do {
  126. short int numberSystem = 0;
  127. char ch = 0;
  128. string intEnter{}, numberSystemEnter{}, floatEnter{}, doubleEnter{}, charString{};
  129. cout << "Enter data type\n" << "[1] - int\n" << "[2] - float\n"
  130. << "[3] - double\n" << "[4] - char\n" << "[5] - bool\n" << "[ESC] - exit\n";
  131. dataType = _getch();
  132. if (dataType == '1' || dataType == '2' || dataType == '3') {
  133. system("cls");
  134. do {
  135. ch = 0;
  136. cout << "Enter number system (2-62): ";
  137. while (numberSystemEnter.length() < 2 && ch != 13/*return*/) {
  138. ch = _getch();
  139. if (ch >= '0' && ch <= '9') {
  140. if (!(ch == '0' && numberSystemEnter.length() == 0)) {
  141. cout << ch;
  142. numberSystemEnter += ch;
  143. }
  144. }
  145. if (numberSystemEnter.length() == 1 && numberSystemEnter[0] > '6') {
  146. break;
  147. }
  148. }
  149. for (int i = 0; i < numberSystemEnter.length(); i++) {
  150. numberSystem += (numberSystemEnter[i] - '0') * degree(numberSystemEnter.length() - i - 1, 10);
  151. }
  152. if (numberSystem > 62 || numberSystem < 2) {
  153. system("cls");
  154. cout << "ERROR: Wrong enter!" << endl;
  155. numberSystem = 0;
  156. numberSystemEnter = "";
  157. }
  158. } while (numberSystem < 2 || numberSystem > 62);
  159. }
  160. switch (dataType) {
  161. case '1' /*int*/:
  162. union {
  163. int number;
  164. char bytes[sizeof(int)];
  165. };
  166. number = 0;
  167. char sign;
  168. sign = 1;
  169. system("cls");
  170. cout << "INT " << numberSystem << " system\n";
  171. printAlphabet(numberSystem);
  172. cout << "Enter number: ";
  173. numberEnter(intEnter, numberSystem, sign);
  174. for (int i = 0; i < intEnter.length(); i++) {
  175. if (intEnter[i] >= 'a') {
  176. number += (intEnter[i] - '0' - 7 - 6) * degree(intEnter.length() - i - 1, numberSystem);
  177. }
  178. else {
  179. if (intEnter[i] >= 'A') {
  180. number += (intEnter[i] - '0' - 7) * degree(intEnter.length() - i - 1, numberSystem);
  181. }
  182. else {
  183. number += (intEnter[i] - '0') * degree(intEnter.length() - i - 1, numberSystem);
  184. }
  185. }
  186. }
  187. number *= sign;
  188. cout << "\ndecimal notation: " << number << endl;
  189. cout << "binary notation: ";
  190. for (int i = sizeof(int) - 1; i >= 0; i--) {
  191. for (int j = 0; j < sizeof(char) * 8; j++) {
  192. if (bytes[i] & 128)
  193. cout << "1";
  194. else
  195. cout << 0;
  196. bytes[i] <<= 1;
  197. }
  198. }
  199. cout << endl;
  200. system("pause");
  201. system("cls");
  202. break;
  203. case '2' /*float*/:
  204. union {
  205. float number2;
  206. char bytes2[sizeof(float)];
  207. };
  208. number2 = 0;
  209. char sign2;
  210. sign2 = 1;
  211. int dotPos;
  212. dotPos = -1;
  213. system("cls");
  214. cout << "FLOAT " << numberSystem << " system\n";
  215. printAlphabet(numberSystem);
  216. cout << "Enter number: ";
  217. fractionalNumberEnter(floatEnter, numberSystem, sign2, dotPos);
  218. if (dotPos != -1) {
  219. for (int i = 0; i < dotPos; i++) {
  220. if (floatEnter[i] - '0' < 10)
  221. number2 += (floatEnter[i] - '0') * degree(dotPos - i - 1, numberSystem);
  222. else {
  223. if (floatEnter[i] <= 'Z') {
  224. number2 += (floatEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos - i - 1, numberSystem);
  225. }
  226. else {
  227. number2 += (floatEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and 10*/) * degree(dotPos - i - 1, numberSystem);
  228. }
  229. }
  230. }
  231. for (int i = dotPos + 1; i < floatEnter.length(); i++) {
  232. if (floatEnter[i] - '0' < 10)
  233. number2 += (floatEnter[i] - '0') * degree(dotPos - i, numberSystem);
  234. else {
  235. if (floatEnter[i] <= 'Z') {
  236. number2 += (floatEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos - i, numberSystem);
  237. }
  238. else {
  239. number2 += (floatEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and number 10*/) * degree(dotPos - i, numberSystem);
  240. }
  241. }
  242. }
  243. }
  244. else {
  245. for (int i = 0; i < floatEnter.length(); i++) {
  246. if (floatEnter[i] - '0' < 10) {
  247. number2 += (floatEnter[i] - '0') * degree(floatEnter.length() - i - 1, numberSystem);
  248. }
  249. else {
  250. number2 += (floatEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(floatEnter.length() - i - 1, numberSystem);
  251. }
  252. }
  253. }
  254. number2 *= sign2;
  255. cout << "\ndecimal notation: " << fixed << number2 << endl;
  256. cout << "binary notation: ";
  257. for (int i = sizeof(float) - 1; i >= 0; i--) {
  258. for (int j = 0; j < sizeof(char) * 8; j++) {
  259. if (bytes2[i] & 128)
  260. cout << "1";
  261. else
  262. cout << 0;
  263. bytes2[i] <<= 1;
  264. }
  265. }
  266. cout << endl;
  267. system("pause");
  268. system("cls");
  269. break;
  270. case '3' /*double*/:
  271. union {
  272. double number3;
  273. char bytes3[sizeof(double)];
  274. };
  275. number3 = 0;
  276. char sign3;
  277. sign3 = 1;
  278. int dotPos2;
  279. dotPos2 = -1;
  280. system("cls");
  281. cout << "DOUBLE " << numberSystem << " system\n";
  282. printAlphabet(numberSystem);
  283. cout << "Enter number: ";
  284. fractionalNumberEnter(doubleEnter, numberSystem, sign3, dotPos2);
  285. if (dotPos2 != -1) {
  286. for (int i = 0; i < dotPos2; i++) {
  287. if (doubleEnter[i] - '0' < 10)
  288. number3 += (doubleEnter[i] - '0') * degree(dotPos2 - i - 1, numberSystem);
  289. else {
  290. if (floatEnter[i] <= 'Z') {
  291. number3 += (doubleEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos2 - i - 1, numberSystem);
  292. }
  293. else {
  294. number3 += (doubleEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and 10*/) * degree(dotPos2 - i - 1, numberSystem);
  295. }
  296. }
  297. }
  298. for (int i = dotPos2 + 1; i < doubleEnter.length(); i++) {
  299. if (doubleEnter[i] - '0' < 10)
  300. number3 += (doubleEnter[i] - '0') * degree(dotPos2 - i, numberSystem);
  301. else {
  302. if (floatEnter[i] <= 'Z') {
  303. number3 += (doubleEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(dotPos2 - i, numberSystem);
  304. }
  305. else {
  306. number3 += (doubleEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character a and number 10*/) * degree(dotPos2 - i, numberSystem);
  307. }
  308. }
  309. }
  310. }
  311. else {
  312. for (int i = 0; i < doubleEnter.length(); i++) {
  313. if (doubleEnter[i] - '0' < 10) {
  314. number3 += (doubleEnter[i] - '0') * degree(doubleEnter.length() - i - 1, numberSystem);
  315. }
  316. else {
  317. if (doubleEnter[i] <= 'Z') {
  318. number3 += (doubleEnter[i] - '0' - 7 /*number that deletes the difference between the character A and number 10*/) * degree(doubleEnter.length() - i - 1, numberSystem);
  319. }
  320. else {
  321. number3 += (doubleEnter[i] - '0' - 7 - 6 /*number that deletes the difference between the character A and number 10*/) * degree(doubleEnter.length() - i - 1, numberSystem);
  322. }
  323. }
  324. }
  325. }
  326. number3 *= sign3;
  327. cout << "\ndecimal notation: " << fixed << number3 << endl;
  328. cout << "binary notation: ";
  329. for (int i = sizeof(double) - 1; i >= 0; i--) {
  330. for (int j = 0; j < sizeof(char) * 8; j++) {
  331. if (bytes3[i] & 128)
  332. cout << "1";
  333. else
  334. cout << 0;
  335. bytes3[i] <<= 1;
  336. }
  337. }
  338. cout << endl;
  339. system("pause");
  340. system("cls");
  341. break;
  342. case '4' /*char*/:
  343. system("cls");
  344. char task, character;
  345. task = character = 0;
  346. do {
  347. cout << "[1] - character itself\n" << "[2] - code of character";
  348. task = _getch();
  349. if (task != '1' && task != '2') {
  350. system("cls");
  351. cout << "ERROR: Wrong enter!\n";
  352. }
  353. } while (task != '1' && task != '2');
  354. if (task == '1') {
  355. cout << "\nEnter a character: ";
  356. character = _getch();
  357. cout << character << endl;
  358. cout << "Code: " << int(character) << endl;
  359. }
  360. else {
  361. cout << "\nEnter code of character: ";
  362. charEnter(charString);
  363. for (int i = 0; i < charString.length(); i++) {
  364. character += (charString[i] - '0') * degree(charString.length() - i - 1, 10);
  365. }
  366. cout << "\nCharacter: " << character << endl;
  367. }
  368. cout << "binary notation: ";
  369. for (int i = 0; i < sizeof(char) * 8; i++) {
  370. if (character & 128)
  371. cout << "1";
  372. else
  373. cout << 0;
  374. character <<= 1;
  375. }
  376. cout << endl;
  377. system("pause");
  378. system("cls");
  379. break;
  380. case '5'/*bool*/:
  381. union {
  382. bool flag;
  383. char help;
  384. };
  385. system("cls");
  386. cout << "Enter smt: ";
  387. help = _getch();
  388. cout << help;
  389. if (help == '0')
  390. flag = 0;
  391. else
  392. flag = 1;
  393. cout << "\nYou entered: " << boolalpha << flag << endl;
  394. cout << "binary notation: ";
  395. for (int i = 0; i < sizeof(char) * 8; i++) {
  396. if (help & 128)
  397. cout << "1";
  398. else
  399. cout << 0;
  400. help <<= 1;
  401. }
  402. cout << endl;
  403. system("pause");
  404. system("cls");
  405. break;
  406. default:
  407. system("cls");
  408. cout << "ERROR: Wrong enter!\n";
  409. }
  410. } while (dataType != 27 /*esc*/);
  411. return 0;
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement