Anexos

PROGRAMACION EN C++

La programación en C++ para la comprobación de resultados del Codificador ReedSolomon (7,3) es la siguiente.

#include <iostream.h>
#include <math.h>
#include <conio.h>
using namespace std;
void LeerEntrada (int Entrada [3])
{
int i;
cout <<endl<<endl<<«Introduce los simbolos a codificar: «<<endl<<endl;
for (i=0; i<3; i++)
{
cout<<«Simbolo «<<i+1<<«: «;
cin>>Entrada [i];
}
}
void ImprimeEntrada (int Entrada [3])
{
cout<<endl<<«El mensaje introducido es: «;
for (int i=0; i<3; i++)
{
cout<<Entrada[i];
if (i<=1)
{
cout<<«,»;
}
}
}
int Galois(int NG, int Dd)
{
int RG;
switch(NG)
{
case4:
switch (Dd)
{
case0:
RG=0;
break;
case1:
RG=4; break;
case2:
RG=3;
break;
case3:
RG=7;
break;
case4:
RG=6;
break;
case5:
RG=2;
break;
case6:
RG=5;
break;
case7:
RG=1;
break;
}
break;
case5:
switch (Dd)
{
case0:
RG=0;
break;
case1:
RG=5;
break;
case2:
RG=1;
break;
case3:
RG=4;
break;
case4:
RG=2;
break;
case5:
RG=7;
break;
case6:
RG=3;
break;
case7:
RG=6;
break;
}
break;
case7:
switch (Dd)
{
case0:
RG=0;
break;
case1:
RG=7;
break;
case2:
RG=5;
break;
case3:
RG=2;
break;
case4:
RG=1;
break;
case5:
RG=6;
break;
case6:
RG=4;
break;
case7:
RG=3;
break;
}
break;
}
return RG;
}
void DecBin (int Da[4],bool DatosBin [4][3])
{
int i,j,k,l;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
DatosBin[i][j]=Da[i]%2;
Da[i]=Da[i]/2;
}
}
cout<<endl<<«Numero en binario: «;
for(k=3;k>=0;k–)
{
for(l=2;l>=0;l–)
{
cout<<DatosBin[k][l];
}
if (k>=1)
{
cout<<«,»;
}
}
cout<<endl;
}
int BinDec (bool DatoBin[4][3])
{
int Dd,a,temp;
Dd=0;
cout<<endl;
for(int l=0;l<3;l++)
{
//cout<<DatoBin[0][l];
switch(DatoBin[0][l])
{
case0:
a=0;
break;
case1:
a=1;
break;
default:
cout<<«Los digitos no son correctos»<<endl;
}
temp = a*pow (2,l);
Dd = temp + Dd;
//Decimal=Numbinario[a]* pow(2,a)+Decimal;*/
}
cout<<«En decimal es «<< Dd<<endl;
return Dd;
}
void BinDec4 (bool DatoBin1[4][3],int CodDec[4])
{
int a,temp;
for(int k=3;k>=0;k–)
{
CodDec[k]=0;
}
//cout<<«El codigo es: «;
temp=0;
for(int l=0;l<3;l++)
{
//cout<<DatoBin1[0][l]<<» «;
switch(DatoBin1[0][l])
{
case0:
a=0;
break;
case1:
a=1;
break;
default:
cout<<«Los digitos no son correctos»<<endl;
}
temp = a * pow (2,l);
CodDec[0] = temp + CodDec[0];
//Decimal=Numbinario[a]* pow(2,a)+Decimal;*/
}
//cout<<CodDec[0]<<«, «;
temp=0;
for(int l=0;l<3;l++)
{
//cout<<DatoBin1[0][l]<<» «;
switch(DatoBin1[1][l])
{
case0:
a=0;
break;
case1:
a=1;
break;
default:
cout<<«Los digitos no son correctos»<<endl;
}
temp = a * pow (2,l);
CodDec[1] = temp + CodDec[1];
//Decimal=Numbinario[a]* pow(2,a)+Decimal;*/
}
//cout<<CodDec[1]<<«, «;
temp=0;
for(int l=0;l<3;l++)
{
//cout<<DatoBin1[0][l]<<» «;
switch(DatoBin1[2][l])
{
case0:
a=0;
break;
case1:
a=1;
break;
default:
cout<<«Los digitos no son correctos»<<endl;
}
temp = a * pow (2,l);
CodDec[2] = temp + CodDec[2];
//Decimal=Numbinario[a]* pow(2,a)+Decimal;*/
}
//cout<<CodDec[2]<<«, «;
temp=0;
for(int l=0;l<3;l++)
{
//cout<<DatoBin1[0][l]<<» «;
switch(DatoBin1[3][l])
{
case0:
a=0;
break;
case1:
a=1;
break;
default:
cout<<«Los digitos no son correctos»<<endl;
}
temp = a * pow (2,l);
CodDec[3] = temp + CodDec[3];
//Decimal=Numbinario[a]* pow(2,a)+Decimal;*/
}
//cout<<CodDec[3]<<«, «<<endl;
}
void XorR4 (bool Operacion[4][3],bool Daxor[4][3],bool Resultado[4][3])
{
cout<<endl<<«El resultado de la X-OR es: «;
for(int l=2;l>=0;l–)
{
//cout<<Operacion[0][l];
//cout<<Daxor[1][l];
Resultado[0][l] = Operacion[0][l] xor Daxor[1][l];
cout<<Resultado[0][l];
}
cout<<endl;
}
void XorR4_2 (bool Operacion[4][3],bool Daxor[4][3],bool Resultado[4][3])
{
cout<<endl<<«El resultado de la X-OR es: «;
for(int l=2;l>=0;l–)
{
//cout<<Operacion[0][l];
//cout<<Daxor[1][l];
Resultado[0][l] = Operacion[0][l] xor Daxor[2][l];
cout<<Resultado[0][l];
}
cout<<endl;
}
void Xor (bool Operacion[4][3],bool Daxor[4][3],bool Resultado[4][3])
{
bool CopiaBin[4][3];
for(int k=3;k>=0;k–)
{
for(int l=2;l>=0;l–)
{
CopiaBin[k][l]= Operacion[k][l];
}
}
for(int l=2;l>=0;l–)
{
Operacion[3][l]=Daxor[3][l];
}
for(int l=2;l>=0;l–)
{
Operacion[2][l]=Daxor[2][l] xor CopiaBin[3][l];
}
for(int l=2;l>=0;l–)
{
Operacion[1][l]=Daxor[1][l] xor CopiaBin[2][l];
}
for(int l=2;l>=0;l–)
{
Operacion[0][l]=Daxor[0][l] xor CopiaBin[1][l];
}
}
int main(void)
{
system(«cls»);
int Entrada [3],Salida[7], Dd, Da[4],Codigo[4];
bool
DaBin[4][3],DdBin[3],DaBin2[4][3],ResulDaBin[4][3],ResulDaBin1[4][3],Registro[4][3];
char resp;
do
{
system(«cls»);
cout <<endl<<endl<< » CODIFICADOR REED-SOLOMON» << endl << endl;
LeerEntrada(Entrada);
ImprimeEntrada(Entrada);
Salida[0]=Entrada[0];
Salida[1]=Entrada[1];
Salida[2]=Entrada[2];
cout<<endl<<«————–PRIMERA VUELTA———-«<<endl;
Dd=Entrada[0];
Da[3]=Galois(5,Dd);
Da[2]=Galois(7,Dd);
Da[1]=Galois(7,Dd);
Da[0]=Galois(4,Dd);
cout << endl<<«El resultado de la funcion: » << Da[3]<<«, «<<Da[2]
<<«, «<<Da[1]<<«, «<<Da[0]<<endl;
DecBin(Da,DaBin);
DecBin(Entrada,DaBin2);
for(int k=3;k>=0;k–)
{
for(int l=2;l>=0;l–)
{
Registro[k][l]=DaBin[k][l];
}
}
cout<<endl<<«Registros: «;
for(int k=3;k>=0;k–)
{
for(int l=2;l>=0;l–)
{
cout<<Registro[k][l];
}
if (k>=1)
{
cout<<«,»;
}
}
cout<<endl;
cout<<endl<<«————–SEGUNDA VUELTA———-«<<endl;
XorR4(DaBin,DaBin2,ResulDaBin);
Dd=BinDec(ResulDaBin);
Da[3]=Galois(5,Dd);
Da[2]=Galois(7,Dd);
Da[1]=Galois(7,Dd);
Da[0]=Galois(4,Dd);
cout << endl<<«El resultado de la funcion: » << Da[3]<<«, «<<Da[2]
<<«, «<<Da[1]<<«, «<<Da[0]<<endl;
DecBin(Da,DaBin);
Xor(Registro,DaBin,ResulDaBin);
cout<<endl<<«Registros: «;
for(int k=3;k>=0;k–)
{
for(int l=2;l>=0;l–)
{
cout<<Registro[k][l];
}
if (k>=1)
{
cout<<«,»;
}
}
cout<<endl<<endl<<«————–TERCERA VUELTA———-«<<endl;