Está en la página 1de 5

class Program

{
byte r = 0;
string[] codigos = new string[2];
string[] paridades = new string[2];
string[] codificacion = new string[2];
static void Main(string[] args)
{

Program p = new Program();


Console.WriteLine("*********************************************************\n"
+"* Bienvenido a la programacion en C# del codigo Hamming *\n"
+"*********************************************************\n"
+" Para comenzar ingrese su codigo (debe estar en formato \n"
+" de 0 y 1, ademas de estar limitado a 7 datos)");
string c = Console.ReadLine();
if (p.VerificarDatoBinario(c))
{
if(p.VerificarRango(c))
{
p.Meterdatos(c, p);

Console.WriteLine("¿Desea decodificar?\n[S/N]");
c = Console.ReadLine();
switch (c)
{
case "S":
//Ejecutamos otra ves lo mismo xD
Console.WriteLine("Ingrese los bits, recordando que los datos son los siguientes ["+
p.codigos[0] +"]");
c = Console.ReadLine();
if (p.VerificarDatoBinario(c))
{
if (p.VerificarRango(c))
{
p.Meterdatos(c, p);
}
else
{
Console.WriteLine("Error (2): El rango de bits no fue el esperado, deben ser 7 bits o datos");
}
}
else
{
Console.WriteLine("Error (1): Los datos ingresados no estan en formato de 0 y 1");
}
Console.Read();
break;
case "N":
Console.WriteLine("Enter para cerra ventana");
break;
default:
Console.WriteLine("Respuesta incorrecta, saqueme 100 mejor");
break;
}
}
else
{
Console.WriteLine("Error (2): El rango de bits no fue el esperado, deben ser 7 bits o datos");
}
}
else
{
Console.WriteLine("Error (1): Los datos ingresados no estan en formato de 0 y 1");
}
Console.Read();
}

bool VerificarDatoBinario(string c)
{
char[] cc = c.ToCharArray();
bool b = false;
for (int i = 0; i < cc.Length; i++)
{
if (!(cc[i] == '0' || cc[i] == '1'))
{
b = true;
}
}

return !b;
}

bool VerificarRango(string c)
{
return (c.Length > 7 || c.Length < 7) ? false : true;
}

void Meterdatos(string c, Program pro)


{
char[] a = c.ToCharArray();
char[] p1 = { a[0], a[1], a[3], a[4], a[6] };
char[] p2 = { a[0], a[2], a[3], a[5], a[6] };
char[] p3 = { a[1], a[2], a[3] };
char[] p4 = { a[4], a[5], a[6] };
char[] p = { pro.Paridades(p1), pro.Paridades(p2), pro.Paridades(p3), pro.Paridades(p4) };
char[] cod = { p[0], p[1], a[0], p[2], a[1],a[2], a[3], p[3], a[4], a[5], a[6] };

for (int i = 0; i < p.Length; i++)


{
Console.WriteLine("La paridad "+ ( i + 1)+": "+p[i]);
}

codigos[r] = c;
paridades[r] = pro.Unir(p);
codificacion[r] = pro.Unir(cod);

Console.Write("Tu palabra + la paridad es: [");


for (int i = 0; i < cod.Length; i++)
{
Console.Write(cod[i]);
}
Console.Write("]\n");

if (r==1)
{
pro.Verificar(pro);
}
r++;
}

private void Verificar(Program p)


{
Console.WriteLine("Paridades almacenadas :["+p.paridades[0]+"]");
Console.WriteLine("Paridades encontradas :[" + p.paridades[1] + "]");

Console.WriteLine("Palabra + paridad 1: [" + p.codificacion[0]+"]");


Console.WriteLine("Palabra + paridad 2: [" + p.codificacion[1]+"]");
char[] error = p.VerificarParidades(p);
string detectarerror = p.Unir(error);
int posicion = p.ConvertirBinarioDecimal(detectarerror);
Console.WriteLine("Error en la posision: " + posicion);
}

int ConvertirBinarioDecimal(string p)
{
char[] b = p.ToCharArray();
int a = b.Length - 1;
int cc = 0, m = 0;
for (int i = 0; i < b.Length; i++)
{
if (a>-1)
{
if (b[i] == '1')
{
cc += (int)Math.Pow(2,m);
}
a--;
m++;
}
}
return cc;
}

char[] VerificarParidades(Program p)
{
char[] almacenadas = p.paridades[0].ToCharArray();
char[] encontradas = p.paridades[1].ToCharArray();

char[] errors = new char[4];


for (int i = 0; i < errors.Length; i++)
{
if (almacenadas[i] == encontradas[i])
{
errors[i] = '0';
}
else
{
errors[i] = '1';
}
}
return errors;
}

char Paridades(char[] p)
{
byte b = 0;
for (int i = 0; i < p.Length; i++)
{
if (p[i] == '1')
{
b++;
}
}
return b % 2 == 0 ? '0' : '1';
}

string Unir(char[] cc)


{
string c = string.Empty;
for (int i = 0; i < cc.Length; i++)
{
c += cc[i].ToString();
}
return c;
}
}

También podría gustarte