algorytm.org

Implementacja w C#



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zamiana z i na system dziesiętny - Implementacja w C#
Ocena użytkownikóww: *****  / 7
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 23 listopada 2006 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

systemy_cs/Systemy.cs:
//
// Konwersja z i na system dziesietny
//
// www.algorytm.org
// (c)2007 by Tomasz Lubinski
//

using System;

namespace systemy_cs
{
	/// <summary>
	/// Konwersja z i na system dziesietny.
	/// </summary>
	class Systemy
	{
		private static int MAX_BASE = 36;
		private static String pattern = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

		/// <summary>
		/// Convert number to given base
		/// </summary>
		/// <param name="n">number to convert</param>
		/// <param name="newBase">base of result</param>
		/// <returns>returns converted n or null if an error occurs</returns>
		public static String convertTo(int n, int newBase)
		{
			String result = "";

			//base is too big or too small
			if ((newBase > MAX_BASE) || (newBase < 2))
				return null;

			//n is equal to 0, do not process, return "0"
			if (n == 0)
				return "0";

			//process until n > 0
			while (n>0)
			{
				result = pattern[n % newBase] + result;
				n /= newBase;
			}

			return result;
		}

		/// <summary>
		/// Returns value of character in a given base
		/// </summary>
		/// <param name="x">character to check</param>
		/// <param name="baseOfX">base of x</param>
		/// <returns>return value of x or -1 if an error occurs</returns>
		private static int valueOf(char x, int baseOfX)
		{
			for (int i=0; i<baseOfX; i++)
			{
				if (x == pattern[i])
				{
					return i;
				}
			}
			return -1;
		}

		/// <summary>
		/// Convert n to decimal
		/// </summary>
		/// <param name="n">number to convert</param>
		/// <param name="baseOfN">base of a given n</param>
		/// <returns>returns converted n or 0 if an error occurs</returns>
		public static int convertFrom(String n, int baseOfN)
		{
			int i, x;
			int p = 1;
			int result = 0;

			//base is too big or too small
			if ((baseOfN > MAX_BASE) || (baseOfN < 2))
				return 0;

			n = n.ToUpper();

			for (i=n.Length-1; i>=0; i--)
			{
				x = valueOf(n[i], baseOfN);
				if (x < 0)
				{
					return 0;
				}
				result += (x * p);
				p *= baseOfN;
			}

			return result;
		}
	
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
		   Console.WriteLine("3568 w systemie dwojkowym = " + convertTo(3568, 2));

		   Console.WriteLine("3568 w systemie trojkowym = " + convertTo(3568, 3));

		   Console.WriteLine("3568 w systemie osemkowym = " + convertTo(3568, 8));

		   Console.WriteLine("3568 w systemie szesnastkowym = " + convertTo(3568, 16));

		   Console.WriteLine("3568 w systemie dwudziestkowym = " + convertTo(3568, 20));

		   Console.WriteLine("100010010 w systemie dwojkowym to " + convertFrom("100010010", 2) + " w systemie dziesietnym");

		   Console.WriteLine("7542 w systemie ósemkowym to " + convertFrom("7542", 8) + " w systemie dziesietnym");

		   Console.WriteLine("E854 w systemie szesnastkowym to " + convertFrom("E854", 16) + " w systemie dziesietnym");
		}
	}
}
Dodaj komentarz