Académique Documents
Professionnel Documents
Culture Documents
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
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<<"
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;
}
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;
/*
Interfaz Grafica: