Guest User

Untitled

a guest
May 5th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4.  
  5. namespace ConsoleTest
  6. {
  7. class Program
  8. {
  9. static char[] delim = new[] { '.', ',' };
  10. static void Main(string[] args)
  11. {
  12. char[] allowedChars = new[] { '0', '1' }.Concat(delim).ToArray();
  13. string[] data = new string[2];
  14. for (int n = 0; n < 2; n++)
  15. {
  16. Console.Write("Введите число №{0} в двоичной системе счисления: ", n + 1);
  17. data[n] = Console.ReadLine();
  18. bool hasDelim = false;
  19. for (int i = 0; i < data[n].Length; i++)
  20. {
  21. if (!allowedChars.Contains(data[n][i]))
  22. {
  23. Console.WriteLine("Ошибка. Неверные данные. Символ '{0}' не может присутствовать в числе в двоичной системе счисления.nНажмите любую клавишу для выхода из программы.", data[n][i]);
  24. Console.ReadKey();
  25. return;
  26. }
  27. if (delim.Contains(data[n][i]))
  28. if (!hasDelim)
  29. hasDelim = true;
  30. else
  31. {
  32. Console.WriteLine("Ошибка. В числе не может быть больше одного десятичного разделителя.nНажмите любую клавишу для выхода из программы.");
  33. Console.ReadKey();
  34. return;
  35. }
  36. }
  37. }
  38. Console.WriteLine("Данные верные");
  39. Console.WriteLine("Сумма чисел: {0}", From10To2(GetValue(data[0]) + GetValue(data[1])));
  40. Console.ReadKey();
  41. }
  42.  
  43. // из строки в десятичное число
  44. static double GetValue(string input)
  45. {
  46. input = input.Trim(delim);
  47. double retVal = 0;
  48. double pow = input.Split(delim)[0].Length - 1;
  49. for (int i = 0; i < input.Length; i++)
  50. if (delim.Contains(input[i]))
  51. continue;
  52. else
  53. retVal += Math.Pow(2, pow--) * Convert.ToDouble(input[i].ToString());
  54. return retVal;
  55. }
  56.  
  57. // Из double в двоичное число
  58. static string From10To2(double input)
  59. {
  60. string retval = "";
  61. // Отделяем целую и дробную части
  62. string[] data = input.ToString().Split(delim);
  63. StringBuilder sb = new StringBuilder();
  64. int a = Convert.ToInt32(data[0]);
  65. do
  66. // Запоминаем остаток от деления на 2
  67. sb.Append(a % 2);
  68. // продолжаем деление, пока число больше 1
  69. while ((a = a / 2) > 1);
  70. // запоминаем последнее число
  71. sb.Append(a);
  72. retval += String.Join("", sb.ToString().Reverse().ToArray());
  73. sb.Clear();
  74. // есть дробная часть
  75. if (data.Length > 1)
  76. {
  77. sb.Append(".");
  78. double d = input;
  79. d -= (int)d;
  80. while ((d = (d - (int)d) * 2) != 0)
  81. sb.Append((int)d);
  82. }
  83. return retval + sb.ToString();
  84. }
  85. }
  86. }
Add Comment
Please, Sign In to add comment