Advertisement
stefanpu

Convert from one numeral system to another - refactoring

Feb 14th, 2013
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.67 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. /*
  5.  * Write a program to convert from any numeral system of given
  6.  * base s to any other numeral system of base d (2 ≤ s, d ≤ 16).
  7.  */
  8.  
  9. namespace ConvertFromAnyToAny
  10. {
  11.     class ConvertFromAnyToAny
  12.     {
  13.         static void Main()
  14.         {
  15.             //Заб.: можеш да създадеш метод InputData(), в който  да вкараш методите
  16.             // InputNumeralSystems и InputNumber, но не съм сигурен, че това е добра идея
  17.             //защото се добавя още едно ниво на абстракция.
  18.             byte s;
  19.             byte d;
  20.             InputNumeralSystems(out s, out d);
  21.  
  22.             //Отделен метод за числото, който върши само това - въвежда число под формата
  23.             //на стринг.
  24.             string number = InputNumberAsString();
  25.             // Виж как number.ToUpper() е извън InputNumberAsString()
  26.             number = number.ToUpper();
  27.  
  28.             int decNumber = ToDec(number, s);
  29.             List<char> convertedNumber = FromDec(decNumber, d);
  30.  
  31.             //Трябва да изкараш принтирането на конвертираното число извън метода FromDec.
  32.             //В идеалният случай един метод трябва да върши едно нещо и това нещо да се разбира
  33.             //от името му. Добър пример за това е ToDec (макар че, както вече ти споменах, ху-
  34.             //баво е да избягваш съкращения в именуването)
  35.             PrintConvertedNumber(convertedNumber);
  36.         }
  37.  
  38.         private static string InputNumberAsString()
  39.         {
  40.             Console.Write("Please enter the number: ");
  41.             string number = Console.ReadLine();
  42.             return number;
  43.         }
  44.  
  45.         private static void InputNumeralSystems(out byte s, out byte d)
  46.         {
  47.             Console.Write("Please enter s: ");
  48.             s = byte.Parse(Console.ReadLine());
  49.             Console.Write("Please enter d: ");
  50.             d = byte.Parse(Console.ReadLine());
  51.         }
  52.  
  53.         static int ToDec(string number, byte s)
  54.         {
  55.             char[] hexValues = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  56.             int decNumber = 0;
  57.             for (int i = number.Length - 1, power = 0; i >= 0; i--, power++)
  58.             {
  59.                 for (int j = 0; j < s; j++)
  60.                 {
  61.                     if (number[i] == hexValues[j])
  62.                     {
  63.                         decNumber += (int)Math.Pow(s, power) * j;
  64.                     }
  65.                 }
  66.             }
  67.             return decNumber;
  68.         }
  69.  
  70.         static List<char> FromDec(int decNumber, int d)
  71.         {
  72.             char[] hexValues = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  73.             List<char> newDigits = new List<char>();
  74.             while (decNumber > 0)
  75.             {
  76.                 newDigits.Add(hexValues[decNumber % d]);
  77.                 decNumber /= d;
  78.             }
  79.             return newDigits;
  80.         }
  81.  
  82.         private static void PrintConvertedNumber(List<char> newDigits)
  83.         {
  84.             Console.Write("The converted representation of the number is: ");
  85.             for (int i = newDigits.Count - 1; i >= 0; i--)
  86.             {
  87.                 Console.Write(newDigits[i]);
  88.             }
  89.             Console.WriteLine();
  90.         }
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement