Mi método:
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//Este es el numero binario que se recoge por pantalla
int numbinario;
//Esta es la variable donde se guarda el resultado
int numdecimal=0;
//Esta variabe nps marcara la posicion
int contador = 0;
//recogemos la variable por pantalla
Console.WriteLine("Escriba un numero binario");
numbinario = int.Parse(Console.ReadLine());
//llamamos a la funcion que convierte de binario a decimal
ConvertirDecimal(numbinario, ref contador, ref numdecimal);
//mostramos por pantalla
Console.WriteLine(numdecimal);
Console.ReadKey();
}
//Esta funcion convierte de binario a decimal
public static void ConvertirDecimal(int numbinario, ref int contador, ref int numdecimal)
{
//Esta variable se utiliza para distinguir entre 1 y 0
int primer= numbinario;
//Si el resto de devidir el nubinario para 10 es 1 se realiza la accion.
primer %= 10;
if (primer == 1)
{
//Para pasar a decimal la base a de ser dos
int exponente = 2;
//El resultado de 2 exponente a 0 es 1
if (contador == 0)
{
exponente = 1;
}
//El resultado de 2 exponente a 1 es 2
else if (contador == 1)
{
exponente = 2;
}
else
{
//100 es 4. Con contador = 3, si no restara el programa me diria que 100 es 16
int aux = contador - 2;
while (aux >= 0)
{
exponente = exponente * 2;
aux--;
}
}
//101=4+0+1
numdecimal = numdecimal + exponente;
}
//sumamos una posicion
contador++;
//mientras numbinario sea mayor de 0, se repetira la funcion
if (numbinario > 0)
{
ConvertirDecimal(numbinario / 10, ref contador, ref numdecimal);
}
}
}
}
Método del profesor:
namespace ConsoleApplication2
{
class Program
{
static double Adecimal(string n)
{
//.Length te dice el tamaño de la variable. El tamaño de 10100 = 5
//n[0] devuelve el ultimo numero. n[0] de 10100 es 0.
//Si tamaño es mayor que 0 y el ultimo numero es 1 realiza la accion
if ((n.Length > 0) && ((n[0]) == '1'))
//Math.Pow realiza una potencia
// calcula la potencia de 2 elevado al tamaño -1.
//y suma el resultado de la repeticion de la funcion.
//n.Remove(0,1) borra empezando por el primer lugar, 1 posicion
return Math.Pow(2, n.Length - 1) + Adecimal(n.Remove(0, 1));
//Si el tamaño es distinto de 0, vueleve a llamar a la funcion
// recuerda que n.Remove(0,1) borra empezando por el ultimo lugar, 1 posicion
else if (n.Length != 0)
return Adecimal(n.Remove(0, 1));
// si no se cumple ninguna condicion devuelve 0.
else
return 0;
}
public static void Main(string[] args)
{
Console.Write("Introduce un valor en binario: ");
// recoge por pantalla el numero binario en forma de texto.
string n = Console.ReadLine();
//devuelve por pantalla el resultado de la funcion Adecimal
Console.Write("El valor de {0} en decimal es: {1}", n, Adecimal(n));
Console.ReadKey();
}
}
}
Comprobaciones realizadas
10100=20
1000=8
101=5
100=4
0 comentarios:
Publicar un comentario