Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<locale.h>
  5. #include<malloc.h>
  6. #include<stdlib.h>
  7. #define z 255
  8. int aton(char a);
  9. char ntoa(int n);
  10. int cdot(char*S);
  11. void dot(char*S,char*S1,char*S2);
  12. void IntTransfer(char*S1,int b3,int b4);
  13. void DotTransfer(char*S2,int b5,int b6);
  14. int types(int b1,char*S);
  15. int types2(int b);
  16. int main()
  17. {
  18. int b1,b2;
  19. char S[z];
  20. char S1[z];
  21. char S2[z];
  22.  
  23. printf("Введите число,которое нужно перевести\n");
  24. gets(S);
  25. if(cdot(S)==-1)
  26. {
  27. printf("Неправильное значение!!!!\n");
  28. getchar();
  29. exit(-1);
  30. }
  31. printf("Введите основание входной системы счисления\n");
  32. scanf("%d",&b1);
  33. if(types(b1,S)==-2)
  34. {
  35. printf("Некорректное основание входной системы счисления или неверное число для перевода\n");
  36. getchar();
  37. exit(-1);
  38. }
  39. if(types2(b1)==-1)
  40. {
  41. printf("Неверное основание входной системы счисления\n");
  42. getchar();
  43. exit(-1);
  44. }
  45. printf("Введите основание выходной системы счисления\n");
  46. scanf("%d",&b2);
  47. if(types2(b2)==-1)
  48. {
  49. printf("Неверное основание выходной системы счисления\n");
  50. getchar();
  51. exit(-1);
  52. }
  53. printf("Результат:");
  54. dot(S,S1,S2);
  55. IntTransfer(S1,b1,b2);
  56. DotTransfer(S2,b1,b2);
  57. printf("\n");
  58. }
  59. int aton(char a)
  60. {
  61. if((a>='0')&&(a<='9'))
  62. return a -'0';
  63. else if((a>='a')&&(a<='z'))
  64. return a -'a'+10;
  65. else
  66. return a-'A'+10;
  67. }
  68. char ntoa(int n)
  69. {
  70. if((n>=0)&&(n<=9))
  71. return'0'+n;
  72. else
  73. return'A'-10+n;
  74. }
  75. void dot(char*S,char*S1,char*S2)
  76. {
  77. const char*delim=".";
  78. char*cp=(char*)malloc(strlen(S)+1);
  79. char*tmp;
  80. if(cp==NULL)
  81. {
  82. printf("Ошибка при работе с памятью");
  83. exit(-1);
  84. }
  85. tmp=strtok(S,".");
  86. if(tmp!=NULL)strcpy(S1,tmp);
  87. else strcpy(S1,"\0");
  88. tmp=strtok(NULL,".");
  89. if(tmp!=NULL)strcpy(S2,tmp);
  90. else strcpy(S2,"\0");
  91. free(cp);
  92. }
  93. void IntTransfer(char*S1,int b3,int b4)
  94. {
  95. int n1,N,i,r1;
  96. int d1[z];
  97. n1=strlen(S1);
  98. N=0;
  99. for(i=0;i<n1;i++)
  100. {
  101. N=N*b3+aton(S1[i]);
  102. }
  103. if(N==0)
  104. {
  105. printf("0");
  106. }
  107. else
  108. {
  109. r1=0;
  110. while(N!=0)
  111. {
  112. d1[r1]=N%b4;
  113. N=N/b4;
  114. r1++;
  115. }
  116. for(i=r1-1;i>=0;i--)
  117. {
  118. printf("%c",ntoa(d1[i]));
  119. }
  120. }
  121. }
  122. void DotTransfer(char*S2,int b5,int b6)
  123. {
  124. int n2,i,k2;
  125. int const K=20;
  126. long double Nf;
  127. n2=strlen(S2);
  128. if(n2==0)
  129. {
  130. printf("\n");
  131. return;
  132. }
  133. printf(".");
  134. Nf=0;
  135. for(i=n2-1;i>=0;i--)
  136. {
  137. Nf=(aton(S2[i])+Nf)/b5;
  138. }
  139. k2=0;
  140. while(Nf!=0&&k2<K)
  141. {
  142. k2++;
  143. printf("%c",ntoa(floor(Nf*b6)));
  144. Nf=fmod((Nf*b6),1);
  145. }
  146. }
  147. int cdot(char*S)
  148. {
  149. int i,kol=0;
  150. for(i=0;i<strlen(S);i++)
  151. {
  152. if(S[i]=='.')kol++;
  153. }
  154. if(kol>1)
  155. {
  156. return-1;
  157. }
  158. }
  159. int types(int b1,char*S)
  160. {
  161. int i;
  162. for(i=0;i<strlen(S);i++)
  163. {
  164. if(aton(S[i])>=b1)return-2;
  165. }
  166. }
  167. int types2(int b)
  168. {
  169. if(b>16||b<2)return-1;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement