Advertisement
haunted_mind

IND3

Dec 8th, 2019
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. #pragma hdrstop
  2. #pragma argsused
  3.  
  4. #ifdef _WIN32
  5. #include <tchar.h>
  6. #else
  7. typedef char _TCHAR;
  8. #define _tmain main
  9. #endif
  10.  
  11. #include <stdio.h>
  12. #include <iostream>
  13. #include <conio.h>
  14. #include <string>
  15. #include <math.h>
  16.  
  17. using namespace std;
  18.  
  19. //struct aboutNums {int *num1;int sign1; int *num2;int sign2; int compare1to2;} set;
  20.  
  21. int conwert2DigitIn10Nums(char a)
  22. {
  23. return (a-'0');
  24. }
  25.  
  26. void addOrSubInColumnForOC(int*n1,int*n2,int*help,int * res, int length)
  27. {
  28. int point=0;
  29. int sum=0;
  30. for (int i = length-1; i >=0; i--) {
  31. sum = (n1[i]+n2[i] + 2+point);
  32. res[i] = sum%2; // cout <<endl<<" res["<<i<<"] "<< res[i];
  33. point = sum/2-1;
  34. }
  35. if (point == 1) {
  36. addOrSubInColumnForOC(res,help,help, res,length);
  37. }
  38. }
  39.  
  40. void addOrSubInColumn(int*n1,int*n2,int * res, int length)
  41. {
  42. int point=0;
  43. int sum=0;
  44. for (int i = length-1; i >=0; i--) {
  45. sum = (n1[i]+n2[i] + 2+point);
  46. res[i] = sum%2; // cout <<endl<<" res["<<i<<"] "<< res[i];
  47. point = sum/2-1;
  48. }
  49.  
  50. }
  51.  
  52. char conwert10DigitIn2Nums(int a)
  53. {
  54. return char(a+'0');
  55. }
  56.  
  57. void convertToInt(char*num,int * n, int length)
  58. {
  59. for (int i = 0; i < length; i++) {
  60. n[i]=conwert2DigitIn10Nums(num[i]);
  61. // cout <<endl<<"n["<<i<<"] "<<n[i];
  62. }
  63. }
  64.  
  65. void inputNumInBase2(char*Num2)
  66. {
  67. cin.getline(Num2,19);
  68. cout << "u've entered "<< Num2<<endl;
  69. }
  70.  
  71. void convertToChar(int*n,char*n2,int length)
  72. {
  73. for (int i = 0; i < length; i++) {
  74. n2[i]= conwert10DigitIn2Nums(n[i]);
  75. }
  76. }
  77.  
  78. void convertToOnesComplement(char*num2,int length)
  79. {
  80. for (int i = 0; i < length; i++) {
  81. if (num2[i]=='0') {
  82. num2[i]='1';
  83. }
  84. else num2[i]='0';
  85. }
  86. }
  87.  
  88.  
  89.  
  90. int _tmain(int argc, _TCHAR* argv[])
  91. {
  92. cout << "This program adds two 2-base nums "<<endl;
  93. cout << "Enter two 2-base nums, using digits '1', '0',and sign '+' or '-' before the numbers."<<endl;
  94. char num1[19]={'\0'};
  95. inputNumInBase2(num1);
  96. char num2[19]={'\0'};
  97. inputNumInBase2(num2);
  98. char sign11=num1[0];
  99. char sign2=num2[0];
  100. //cout <<endl<<endl<< "sign2 "<< sign2 <<endl<<endl;
  101. num1[0]='0';
  102. num2[0]='0';
  103. int addZeros = (strlen(num1)-strlen(num2));
  104. char*les = addZeros>0?num2:num1;
  105. int length = addZeros>0?strlen(num1):strlen(num2);// cout << length;
  106. for (int i = strlen(les); i >=0; i--)
  107. {
  108. les[i+abs(addZeros)]=les[i];
  109. }
  110. for (int i=0; i < abs(addZeros); i++) {
  111. les[i]='0';
  112. }
  113. if (sign11=='-') {
  114. convertToOnesComplement(num1,length);
  115. }
  116. if (sign2=='-') {
  117. convertToOnesComplement(num2,length);
  118. }
  119. int *n1=new int[length];
  120. int *n2=new int[length];
  121. int *n=new int[length];
  122. int *help=new int[length];
  123. for (int i = 0; i < length-1; i++) {
  124. help[i]=0;
  125. }
  126. help[length-1]=1;
  127. char* n12=new char[length+1];
  128. n12[length]='\0';
  129. convertToInt(num1,n1, length);
  130. convertToInt(num2,n2,length);
  131. addOrSubInColumnForOC(n1,n2,help,n,length);
  132. convertToChar(n,n12,length);
  133. cout << endl<<"one's complement "<<n12;
  134. if (n[0]==1) {
  135. addOrSubInColumn(n,help,n,length);
  136. convertToChar(n,n12,length);
  137. //cout << endl<<"n12 "<<n12;
  138. }
  139. cout << endl<<"two's complement "<<n12;
  140. delete []n1;
  141. delete []n2;
  142. delete []n;
  143. delete []help;
  144. delete []n12;
  145. getch();
  146. return 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement