Vous êtes sur la page 1sur 7

CODIGOS DE REDUNDANCIA CCLICA

METODO CRC
Cdigo del Programa:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
void leens(char *a, int k)//NO contiene un espacio al final
{
for(int i=0; i<k;i++)
{
cout<<a[i];
}
}
void lee(char *a, int k) //Contiene un espacio al final
{
for(int i=0; i<k;i++)
{
cout<<a[i];
}
cout<<"\n";
}
void limpcad(char *a, int k)
{
for(int i=0; i<k;i++)
{
a[i]='0';
}
}
void rewrite(char *a, char x, int k)//a= cadena, x=caractes con el que se llenara la cadena, k=
maximo de la cadena
{
for(int i=0; i<k;i++)
{
a[i]=x;
}
}
int veres0(char *a, int k)
{
for(int i=0; i<k;i++)
{
if(a[i]=='1') return 1;
}
return 0;
}
int addcer(char *a, int k, int l)//a=mensaje, k=maxgen, l=maxmen
{ int i=0, j=k-1;
while(j>0)
{
a[l+i]='0';
++i, --j;
if(j=1)
{
a[l+i]='0';

++i;
a[l+i]='0';
++i;
return (l+i); }
}
}
int tamcad(char *a)
{ int k=0, i=0;
while(a[i])
{
++k;
++i;
}
return k;
}
char compor(char a, char b)
{ char res;
int x,y,z;
x=a-48;
y=b-48;
z=x+y;
if(z==0) res='0';
else res='1';
return res;
}
char compxor(char a, char b)
{ char res;
int x,y,z;
x=a-48;
y=b-48;
z=x+y;
if(z==1) res='1';
else res='0';
return res;
}
void compcad(char *a, char *b, char *c, int x) //a=mensaje, b=generador, c=residuo, x=max
generador
{ int i=0;
while(i<x)
{
c[i]=compxor(a[i],b[i]);
++i;
}
}
int sustdat(char *a, char *b,int x, int y, int z) //a=mensaje, b=residuo, x=max mensaje, y=max
residuo, z=pos mensaje
{ int i=0,co=0,coa=1;

char aux;
while(i<y)
{ if(b[i]=='1') break;
++i, ++co;
}
i=0;
if(y==co)
{
while(co)
{
b[i]=a[z];
++z, --co;
if(co=1){b[i]=a[z]; return z;}
}
}
i=0;
//aqui termina la fase de reacomodo del la cadena de caracteres
while(i<=y)
{
b[i]=b[i+co];
++i;
}
i=i-co;
i=i-1;
while(i<y)
{
b[i]=a[z];
++z, ++i;
}
if(z>x) return x;
return z;
}
void copycad(char *a, char *b)//a=cadena receptora, b=cadena donante
{
int i=0;
while(b[i])
{
a[i]=b[i];
++i;
}
}
void deter(char *men, char *gen, char *res, int maxmen, int maxgen, int maxres)
{
maxres=maxgen;
char esp[70];// " "
int posmen=0, cent;
cent=maxgen+3;
char resaux[50] = {0};
rewrite(esp,' ',70);
compcad(men,gen,res,maxgen);//a=mensaje, b=generador, c=residuo, x=max generador

posmen=sustdat(men,res,maxmen,maxres,maxgen); //a=mensaje, b=residuo, x=max


mensaje, y=max residuo, z=pos mensaje
leens(gen,maxgen); cout<<" | "; lee(men,maxmen);
leens(esp,cent); lee(gen,maxgen);
leens(esp,cent+1); lee(res,maxres);
while(posmen<(maxmen))
{
leens(esp,cent+posmen); lee(gen,maxgen);
compcad(res,gen,resaux,maxgen);
copycad(res,resaux);
posmen=sustdat(men,res,maxmen,maxres,posmen);
leens(esp,cent+posmen); lee(res,maxres);
}
}
void correccion(char *a, char *b, int x, int y)//a=mensaje, b=residuo, x=maxmen, y=maxres
{
char cer[50]; //ceros
int maxcer, maxmen;
maxmen=x;
maxcer=x-y;
++maxcer;
limpcad(cer,maxcer);
cout<<" Correccion: \n";
cout<<" Mensaje: ";lee(a,x);
cout<<" Residuo: ";leens(cer,maxcer); lee(b,y);
cout<<"
___________________________________ ";
for(int i=y; i>0; --i)
{
if(!b[y]) --y;
}
for(int j=x; j>0; --j)
{
if(!a[x]) --x;
}
while(y>=0)
{
a[x]=compor(a[x],b[y]);
--x, --y;
}
cout<<endl;
cout<<" Correcion: "; lee(a,maxmen+1);
}
int main(int argc, char *argv[])
{
int maxmen=0, maxgen=0, maxres=0, prob=0;
char comp;
char resp;
char men[50] = {0}; //mensaje
char gen[50] = {0}; //generador
char res[50] = {0}; //residuo

system("color 5E");
system("cls");
cout<<endl<<endl;
cout<<"
ESCUELA SUPERIOS DE INGENIERIA MECANICA Y ELECTRICA" <<
endl;
cout<<"
cout<<"
cout<<"
cout<<"
cout<<"
cout<<"
cout<<"
cout<<"

UNIDAD ZACATENCO" << endl<<endl;


MATERIA"<<endl;
Redes Basicas"<<endl<<endl;
PROFESOR"<<endl;
Camacho Gonzalez Marco Antonio"<<endl<<endl;
PARTICIPES"<<endl;
Palacios Pardo Gabriela"<<endl;
Guerrero Perdomo Ericka"<< endl << endl;

cout<<endl<<endl;
cout<<" FINALIDAD"<<endl;
cout<<" El programa a continuacion mostrado tiene la finalidad de detectar y corregir ";
cout<<" el error que puede presentarse en una trama de informacion, esto, al momento ";
cout<<" de ser enviado y/o recibido.";
cout<<endl<<endl;
cout<<" INSTRUCCIONES"<<endl;
cout<<" 1.- Introduzca el valor binario del generador"<<endl;
cout<<" 2.- Introduzca el valor binario del mensaje"<<endl;
cout<<" 3.- Indique si desea realizar la correcion del error"<<endl<<endl<<endl;
cout<<"******************************************************************************"<<endl <<endl;
cout<<"
DETECCION Y CORRECION DE ERROR"<<endl<<endl;

do
{
cout<<" Digite el valor del generador en binario: ";
cin>>gen; //Captura el valor en binario.
maxgen=tamcad(gen);
cout<<endl;
cout<<" Digite el valor del mensaje en binario: ";
cin>>men; //Captura el valor en binario.
maxmen=tamcad(men);
maxmen=addcer(men,maxgen,maxmen); //a=mensaje, k=maxgen, l=maxmen
cout<<"\n\n";
deter(men,gen,res,maxmen,maxgen,maxres);
cout<<endl<<endl;
cout<<" El residuo es: "; lee(res,maxgen);
prob=veres0(res,maxgen);
if(prob==1)
{
cout<<endl<<endl;
cout<<" Desea corregir el error (s=si, n=no): ";
cin>>comp;
cout<<endl;

if(comp=='n') return EXIT_SUCCESS;


else
correccion(men,res,maxmen,maxgen);//a=mensaje, b=residuo, x=maxmen,
y=maxres
cout<<"\n";
cout<<" La correccion del mensaje es: "; lee(men,maxmen);
cout<<endl<<endl;
limpcad(res,maxgen);
deter(men,gen,res,maxmen,maxgen,maxres);
//
cout<<"El residuo del mensaje corregido es es: "; lee(res,maxgen); cout<<"\n";
cout<<endl<<endl;
cout<<" El residuo del mensaje ya corregido es: 000000000000"; cout<<"\n";
cout<<endl<<endl;
cout<<"
FELICIDADES, EL MENSAJE HA SIDO CORREGIDO
EXITOSAMENTE!!!!\n";
cout<<endl<<endl;
//

cout<<" Desea realizar otro calculo? (z=si, d=no): ";


// cin>>resp;
//cout<<endl;

}
cout<<"******************************************************************************"<<endl<<endl;
cout<<" DESEA REALIZAR OTRO CALCULO? (z=si, d=no): ";
cin>>resp;
cout<<endl<<endl;
if(resp=='d') return EXIT_SUCCESS;
cout<<"
// GRACIAS POR SU PARTICIPACION //"<<endl;
cout<<endl;
}//
else
while(resp=='z');

system("PAUSE");
return EXIT_SUCCESS;
/*

cout<<"el mensaje no tiene errores \n";


system("PAUSE");

cout<<" Desea realizar otro calculo? (S=si, N=no); ";


cout<<resp;
cout<<endl;
if(resp=='N') return EXIT_SUCCESS;
else
system("PAUSE");
return EXIT_SUCCESS;*/

Interfaz Grafica:

Vous aimerez peut-être aussi