Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Linq;
- using System.Text;
- namespace ConsoleTest
- {
- class Program
- {
- static char[] delim = new[] { '.', ',' };
- static void Main(string[] args)
- {
- char[] allowedChars = new[] { '0', '1' }.Concat(delim).ToArray();
- string[] data = new string[2];
- for (int n = 0; n < 2; n++)
- {
- Console.Write("Введите число №{0} в двоичной системе счисления: ", n + 1);
- data[n] = Console.ReadLine();
- bool hasDelim = false;
- for (int i = 0; i < data[n].Length; i++)
- {
- if (!allowedChars.Contains(data[n][i]))
- {
- Console.WriteLine("Ошибка. Неверные данные. Символ '{0}' не может присутствовать в числе в двоичной системе счисления.nНажмите любую клавишу для выхода из программы.", data[n][i]);
- Console.ReadKey();
- return;
- }
- if (delim.Contains(data[n][i]))
- if (!hasDelim)
- hasDelim = true;
- else
- {
- Console.WriteLine("Ошибка. В числе не может быть больше одного десятичного разделителя.nНажмите любую клавишу для выхода из программы.");
- Console.ReadKey();
- return;
- }
- }
- }
- Console.WriteLine("Данные верные");
- Console.WriteLine("Сумма чисел: {0}", From10To2(GetValue(data[0]) + GetValue(data[1])));
- Console.ReadKey();
- }
- // из строки в десятичное число
- static double GetValue(string input)
- {
- input = input.Trim(delim);
- double retVal = 0;
- double pow = input.Split(delim)[0].Length - 1;
- for (int i = 0; i < input.Length; i++)
- if (delim.Contains(input[i]))
- continue;
- else
- retVal += Math.Pow(2, pow--) * Convert.ToDouble(input[i].ToString());
- return retVal;
- }
- // Из double в двоичное число
- static string From10To2(double input)
- {
- string retval = "";
- // Отделяем целую и дробную части
- string[] data = input.ToString().Split(delim);
- StringBuilder sb = new StringBuilder();
- int a = Convert.ToInt32(data[0]);
- do
- // Запоминаем остаток от деления на 2
- sb.Append(a % 2);
- // продолжаем деление, пока число больше 1
- while ((a = a / 2) > 1);
- // запоминаем последнее число
- sb.Append(a);
- retval += String.Join("", sb.ToString().Reverse().ToArray());
- sb.Clear();
- // есть дробная часть
- if (data.Length > 1)
- {
- sb.Append(".");
- double d = input;
- d -= (int)d;
- while ((d = (d - (int)d) * 2) != 0)
- sb.Append((int)d);
- }
- return retval + sb.ToString();
- }
- }
- }
Add Comment
Please, Sign In to add comment