Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace TranslateScaleOfNotation
- {
- class HeadClass
- {
- enum Menu
- {
- TranslateNumber = 1,
- DisplayLastTranslete = 2,
- Exit = 3
- } //Ok
- static void Main(string[] args)
- {
- Console.Title = "Перевод чисел из различных СС";
- while (true)
- {
- ChooseMenu();
- }
- } //Ok
- public static void ChooseMenu()
- {
- Console.Clear();
- Console.WriteLine("Программа переводит число из одной системы счисления в другую");
- Console.WriteLine("Выберите действие:\n1)Перевести число - 1\n2)Вывести на экран последние преобразование - 2\n3)Выйти - 3");
- bool flag = false;
- int choice;
- Console.Write("Ваш выбор: ");
- flag = int.TryParse(Console.ReadLine(), out choice);
- if (!flag)
- {
- choice = 2;
- }
- while (!flag || choice > 3 || choice < 1)
- {
- if (choice > 3 || choice < 1)
- {
- Console.Write("Число вне границ 1<=x<=3 ");
- }
- Console.WriteLine("Некорректное значение");
- Console.Write("Ваш выбор: ");
- flag = int.TryParse(Console.ReadLine(), out choice);
- if (!flag)
- {
- choice = 2;
- }
- }
- switch ((Menu)choice)
- {
- case Menu.TranslateNumber:
- {
- Console.Write("Выберете основание системы счисления из которой будем переводить от 2 до 16: ");
- int radix = EnterRadix();
- Console.Write("Выберете основание системы счисления в которую будем переводить от 2 до 16: ");
- int radixTwo = EnterRadix();
- string value;
- do
- {
- Console.Write("Введите число: ");
- value = Console.ReadLine();
- if (CheckValue(value, radix))
- {
- Console.WriteLine("Incorrect value");
- if (value.Length > 24)
- {
- Console.WriteLine("слишком много цифр");
- }
- }
- } while (CheckValue(value, radix));
- double dec = ToDec(value, radix);
- if (dec - Math.Truncate((dec)) != 0)
- {
- double left = Math.Truncate(dec);
- string temp = Convert.ToString(dec);
- temp = "0" + temp.Remove(0, temp.IndexOf(','));
- double right = double.Parse(temp);
- Console.WriteLine("Результат: {0}{1}", Cel(left, radixTwo), Drop(right, radixTwo));
- Console.ReadKey();
- }
- else
- {
- double left = Math.Truncate(dec);
- Console.WriteLine("Результат: {0}", Cel(left, radixTwo));
- Console.ReadLine();
- }
- }
- break;
- case Menu.DisplayLastTranslete:
- {
- Console.WriteLine("Пока не реализовано.");
- Console.ReadKey();
- }
- break;
- case Menu.Exit:
- { Environment.Exit(0); }
- break;
- default:
- {
- Console.WriteLine("Действие не выбрано");
- }
- break;
- }
- }
- static string Cel(double integerNumber, int radix)
- {
- string setOfСharacters = "0123456789ABCDEF";
- StringBuilder NewNumber = new StringBuilder();
- while (integerNumber >= radix)
- {
- if (integerNumber % radix > 9)
- {
- NewNumber.Append(setOfСharacters[(int)(integerNumber % radix)]); // исправ str.Append(value[value.IndexOf(Convert.ToString(x % radix))]);
- }
- else
- {
- NewNumber = NewNumber.Append((integerNumber % radix));
- }
- integerNumber = Math.Truncate(integerNumber / radix);
- }
- NewNumber.Append(setOfСharacters[(int)integerNumber]);
- StringBuilder CorrectNewNumber = new StringBuilder();
- for (int i = NewNumber.Length - 1; i >= 0; i--)
- {
- CorrectNewNumber.Append(NewNumber[i]);
- }
- return Convert.ToString(CorrectNewNumber);
- } //Ok
- static string Drop(double x, int radix)
- {
- string setOfСharacters = "0123456789ABCDEF";
- string numberString = Convert.ToString(x);
- StringBuilder NewNumber = new StringBuilder();
- int CountOfСharacter = numberString.Length - 2;
- for (int i = 0; i < CountOfСharacter; i++)
- {
- double integerPart = x * radix;
- NewNumber.Append(setOfСharacters[(int)Math.Truncate(integerPart)]);
- if (integerPart - Math.Truncate(integerPart) != 0)
- {
- numberString = Convert.ToString(integerPart);
- numberString = "0" + numberString.Remove(0, numberString.IndexOf(','));
- }
- x = double.Parse(numberString);
- }
- numberString = Convert.ToString(NewNumber);
- numberString = "," + numberString;
- return numberString;
- } // Ok
- static double ToDec(string numberString, int radix)
- {
- decimal numberDec = 0;
- string setOfСharacters = "0123456789ABCDEF";
- int v1 = numberString.IndexOf(',') != -1 ? numberString.IndexOf(',') - 1 : numberString.Length - 1;
- if (numberString.IndexOf(',') != -1)
- {
- numberString = numberString.Remove(numberString.IndexOf(','), 1);
- }
- for (int i = 0; i < numberString.Length; i++)
- {
- numberDec = numberDec + setOfСharacters.IndexOf(numberString[i]) * (decimal)(Math.Pow(radix, v1 - i));
- }
- return (double)numberDec;
- } // Ok
- static int EnterRadix()
- {
- bool result = false;
- int radix;
- result = int.TryParse(Console.ReadLine(), out radix);
- while (!result || radix > 16 || radix < 2)
- {
- Console.Write("Incorrect value. Введите заново ");
- result = int.TryParse(Console.ReadLine(), out radix);
- }
- return radix;
- } // Ok
- static bool CheckValue(string number, int radix)
- {
- number = number.Replace(",", String.Empty);
- string check = "0123456789ABCDEF";
- for (int i = 0; i < number.Length; i++)
- {
- if (check.IndexOf(number[i]) >= radix || number.Length > 24)
- {
- return true;
- }
- }
- return false;
- } //Ok
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement