Advertisement
filin

RGR

Nov 15th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.15 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace TranslateScaleOfNotation
  8. {
  9.     class HeadClass
  10.     {
  11.         enum Menu
  12.         {
  13.             TranslateNumber = 1,
  14.             DisplayLastTranslete = 2,
  15.             Exit = 3
  16.         } //Ok
  17.         static void Main(string[] args)
  18.         {
  19.             Console.Title = "Перевод чисел из различных СС";
  20.             while (true)
  21.             {
  22.                 ChooseMenu();
  23.             }
  24.         } //Ok
  25.         public static void ChooseMenu()
  26.         {
  27.             Console.Clear();
  28.             Console.WriteLine("Программа переводит число из одной системы счисления в другую");
  29.             Console.WriteLine("Выберите действие:\n1)Перевести число - 1\n2)Вывести на экран последние преобразование - 2\n3)Выйти - 3");
  30.             bool flag = false;
  31.             int choice;
  32.             Console.Write("Ваш выбор: ");
  33.             flag = int.TryParse(Console.ReadLine(), out choice);
  34.             if (!flag)
  35.             {
  36.                 choice = 2;
  37.             }
  38.             while (!flag || choice > 3 || choice < 1)
  39.             {
  40.                 if (choice > 3 || choice < 1)
  41.                 {
  42.                     Console.Write("Число вне границ 1<=x<=3 ");
  43.                 }
  44.                 Console.WriteLine("Некорректное значение");
  45.                 Console.Write("Ваш выбор: ");
  46.                 flag = int.TryParse(Console.ReadLine(), out choice);
  47.                 if (!flag)
  48.                 {
  49.                     choice = 2;
  50.                 }
  51.             }
  52.             switch ((Menu)choice)
  53.             {
  54.                 case Menu.TranslateNumber:
  55.                     {
  56.                         Console.Write("Выберете основание системы счисления из которой будем переводить от 2 до 16: ");
  57.                         int radix = EnterRadix();
  58.                         Console.Write("Выберете основание системы счисления в которую будем переводить от 2 до 16: ");
  59.                         int radixTwo = EnterRadix();
  60.                         string value;
  61.                         do
  62.                         {
  63.                             Console.Write("Введите число: ");
  64.                             value = Console.ReadLine();
  65.                             if (CheckValue(value, radix))
  66.                             {
  67.                                 Console.WriteLine("Incorrect value");
  68.                                 if (value.Length > 24)
  69.                                 {
  70.                                     Console.WriteLine("слишком много цифр");
  71.                                 }
  72.                             }
  73.                         } while (CheckValue(value, radix));
  74.  
  75.                         double dec = ToDec(value, radix);
  76.                         if (dec - Math.Truncate((dec)) != 0)
  77.                         {
  78.                             double left = Math.Truncate(dec);
  79.                             string temp = Convert.ToString(dec);
  80.                             temp = "0" + temp.Remove(0, temp.IndexOf(','));
  81.                             double right = double.Parse(temp);
  82.                             Console.WriteLine("Результат: {0}{1}", Cel(left, radixTwo), Drop(right, radixTwo));
  83.                             Console.ReadKey();
  84.                         }
  85.                         else
  86.                         {
  87.                             double left = Math.Truncate(dec);
  88.                             Console.WriteLine("Результат: {0}", Cel(left, radixTwo));
  89.                             Console.ReadLine();
  90.                         }
  91.                     }
  92.                     break;
  93.                 case Menu.DisplayLastTranslete:
  94.                     {
  95.                         Console.WriteLine("Пока не реализовано.");
  96.                         Console.ReadKey();
  97.                     }
  98.                     break;
  99.                 case Menu.Exit:
  100.                     { Environment.Exit(0); }
  101.                     break;
  102.                 default:
  103.                     {
  104.                         Console.WriteLine("Действие не выбрано");
  105.                     }
  106.                     break;
  107.             }
  108.  
  109.         }
  110.         static string Cel(double integerNumber, int radix)
  111.         {
  112.  
  113.             string setOfСharacters = "0123456789ABCDEF";
  114.             StringBuilder NewNumber = new StringBuilder();
  115.             while (integerNumber >= radix)
  116.             {
  117.                 if (integerNumber % radix > 9)
  118.                 {
  119.                     NewNumber.Append(setOfСharacters[(int)(integerNumber % radix)]); // исправ  str.Append(value[value.IndexOf(Convert.ToString(x % radix))]);
  120.                 }
  121.                 else
  122.                 {
  123.                     NewNumber = NewNumber.Append((integerNumber % radix));
  124.                 }
  125.                 integerNumber = Math.Truncate(integerNumber / radix);
  126.             }
  127.             NewNumber.Append(setOfСharacters[(int)integerNumber]);
  128.             StringBuilder CorrectNewNumber = new StringBuilder();
  129.             for (int i = NewNumber.Length - 1; i >= 0; i--)
  130.             {
  131.                 CorrectNewNumber.Append(NewNumber[i]);
  132.             }
  133.  
  134.  
  135.             return Convert.ToString(CorrectNewNumber);
  136.         } //Ok
  137.         static string Drop(double x, int radix)
  138.         {
  139.             string setOfСharacters = "0123456789ABCDEF";
  140.             string numberString = Convert.ToString(x);
  141.             StringBuilder NewNumber = new StringBuilder();
  142.             int CountOfСharacter = numberString.Length - 2;
  143.             for (int i = 0; i < CountOfСharacter; i++)
  144.             {
  145.                 double integerPart = x * radix;
  146.                 NewNumber.Append(setOfСharacters[(int)Math.Truncate(integerPart)]);
  147.  
  148.                 if (integerPart - Math.Truncate(integerPart) != 0)
  149.                 {
  150.                     numberString = Convert.ToString(integerPart);
  151.                     numberString = "0" + numberString.Remove(0, numberString.IndexOf(','));
  152.                 }
  153.                 x = double.Parse(numberString);
  154.             }
  155.             numberString = Convert.ToString(NewNumber);
  156.             numberString = "," + numberString;
  157.             return numberString;
  158.  
  159.         } // Ok
  160.         static double ToDec(string numberString, int radix)
  161.         {
  162.             decimal numberDec = 0;
  163.             string setOfСharacters = "0123456789ABCDEF";
  164.             int v1 = numberString.IndexOf(',') != -1 ? numberString.IndexOf(',') - 1 : numberString.Length - 1;
  165.             if (numberString.IndexOf(',') != -1)
  166.             {
  167.                 numberString = numberString.Remove(numberString.IndexOf(','), 1);
  168.             }
  169.             for (int i = 0; i < numberString.Length; i++)
  170.             {
  171.                 numberDec = numberDec + setOfСharacters.IndexOf(numberString[i]) * (decimal)(Math.Pow(radix, v1 - i));
  172.             }
  173.             return (double)numberDec;
  174.         } // Ok
  175.         static int EnterRadix()
  176.         {
  177.             bool result = false;
  178.             int radix;
  179.             result = int.TryParse(Console.ReadLine(), out radix);
  180.             while (!result || radix > 16 || radix < 2)
  181.             {
  182.                 Console.Write("Incorrect value. Введите заново ");
  183.                 result = int.TryParse(Console.ReadLine(), out radix);
  184.             }
  185.             return radix;
  186.         }  // Ok
  187.         static bool CheckValue(string number, int radix)
  188.         {
  189.             number = number.Replace(",", String.Empty);
  190.             string check = "0123456789ABCDEF";
  191.             for (int i = 0; i < number.Length; i++)
  192.             {
  193.                 if (check.IndexOf(number[i]) >= radix || number.Length > 24)
  194.                 {
  195.                     return true;
  196.                 }
  197.             }
  198.             return false;
  199.         } //Ok
  200.  
  201.     }
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement