Vous êtes sur la page 1sur 9

#include <cstdlib> #include <iostream> using namespace std; int int int int int int int int

int numerodeunos1=0; numerodeunos2=0; numerodeunos3=0; numerodeunos4=0; numerodeunos5=0; numerodeunos6=0; numerodeunos7=0; numerodeunos8=0; numerodeunos9=0;

int error=0; int paroimpar1, paroimpar2, paroimpar3, paroimpar4; int paroimpar5, paroimpar6, paroimpar7, paroimpar8, paroimpar9; class paridadcruzada { private: int v[16]; int w[16]; int x[4][4]; int y[5][5]; int z[25]; int a[25]; int longitud1; public: void CapturarPrimerDato(); void VoltearVector(); void ColocarEnMatriz(); int NumeroDeUnosFila(); void ColocarEnMatrizGrande(); void AgregarBitFila(); int NumeroDeUnosColumna(); void AgregarBitColumna(); void ColocarEnVector(); void ImprimirPrimerVectorEnviado(); void CapturarSegundoDato(); int CompararVectores(); void ImprimirResultado(); }; int main() { system("color f5"); paridadcruzada hacer; hacer.CapturarPrimerDato(); hacer.VoltearVector(); hacer.ColocarEnMatriz(); hacer.NumeroDeUnosFila(); hacer.ColocarEnMatrizGrande(); hacer.AgregarBitFila(); hacer.NumeroDeUnosColumna(); hacer.AgregarBitColumna(); hacer.ColocarEnVector();

hacer.ImprimirPrimerVectorEnviado(); hacer.CapturarSegundoDato(); hacer.CompararVectores(); hacer.ImprimirResultado(); system("PAUSE"); return EXIT_SUCCESS; return 0; } void paridadcruzada::CapturarPrimerDato() { cout<<"\t\t\t\t PARIDAD CRUZADA"; //cout<<"\n\n: Introduce la longitud del vector de datos"; //cin>>longitud1; longitud1=16; cout<<"\n\n\tPor favor, teclea un dato de 16 bits: \n\t\t\t"; if(longitud1==16) { for(int i=0; i<longitud1; i++) { cin>>v[i]; while(v[i]!=0&&v[i]!=1) { cout<<"\n Todos los bits deben ser cero o uno, intente de nuevo : \n\t\t\t"; cin>>v[i]; } } } //else if (longitud1<16) //{ // for(int i=0; i<longitud1; i++) //{ // cin>>v[i]; //while(v[i]!=0&&v[i]!=1) //{ // cout<<"\n Todos los bits deben ser cero o uno, intente de nue vo: \n\t\t\t"; //cin>>v[i]; //} //cout<<"\n"; //cout<<v[i]; //} //for(int i=longitud1;i<16;i++) //{v[i]=0; //cout<<v[i];} //} } void paridadcruzada::VoltearVector() { cout<<"\n\n"; for(int i=0;i<16;i++) { //cout<<v[i]; w[15-i]=v[i]; //cout<<v[i]; } cout<<"\n";

//for(int i=0;i<16;i++) //{ // cout<<w[i]; //} } void paridadcruzada::ColocarEnMatriz() { for(int i=0;i<16;i++) { while(i>=0&&i<=3){ x[i][0]=w[i];break;} while(i>=4&&i<=7){ x[i-4][1]=w[i];break;} while(i>=8&&i<=11){ x[i-8][2]=w[i];break;} while(i>=12&&i<=15){ x[i-12][3]=w[i];break;} } cout<<"\nLa matirz de datos sin paridad es:\n"; for(int j=0; j<4; j++){ for(int i=0; i<4; i++){ cout<<" "<<x[i][j];} cout<<"\n";} } void paridadcruzada::CapturarSegundoDato() { cout<<"\n\n\tAhora teclea el vector de datos de la linea anterior: \n\t\t\t" ; for(int i=0; i<25; i++) { cin>>a[i]; while(a[i]!=0&&a[i]!=1) { cout<<"\n Todos los bits deben ser cero o uno, intente de nuevo : \n\t\t\t"; cin>>a[i]; } } } int paridadcruzada::NumeroDeUnosFila() { int operacionaux1=0; int operacionaux2=0; int operacionaux3=0; int operacionaux4=0; for(int i=0; i<16; i++) { while(i>=0&&i<=3) { operacionaux1=x[i][0]+1; switch (operacionaux1) { case 1:numerodeunos1=numerodeunos1+0; break; case 2:numerodeunos1=numerodeunos1+1; break; }

break; } while(i>=4&&i<=7) { operacionaux2=x[i-4][1]+1; switch (operacionaux2) { case 1:numerodeunos2=numerodeunos2+0; case 2:numerodeunos2=numerodeunos2+1; } break; } while(i>=8&&i<=11) { operacionaux3=x[i-8][2]+1; switch (operacionaux3) { case 1:numerodeunos3=numerodeunos3+0; case 2:numerodeunos3=numerodeunos3+1; } break; } while(i>=12&&i<=15) { operacionaux4=x[i-12][3]+1; switch (operacionaux4) { case 1:numerodeunos4=numerodeunos4+0; case 2:numerodeunos4=numerodeunos4+1; } break; } } for(int j=0;j<4;j++) { switch(j) { case 0: { if(numerodeunos1%2==0) paroimpar1=0; else paroimpar1=1; break; } case 1: { if(numerodeunos2%2==0) paroimpar2=0; else paroimpar2=1; break; } case 2: { if(numerodeunos3%2==0) paroimpar3=0; else paroimpar3=1; break;

break; break;

break; break;

break; break;

} case 3: { if(numerodeunos4%2==0) paroimpar4=0; else paroimpar4=1; break; } } } //cout<<paroimpar1;cout<<paroimpar2;cout<<paroimpar3;cout<<paroimpar4; return paroimpar1, paroimpar2, paroimpar3, paroimpar4; } void paridadcruzada::ColocarEnMatrizGrande() { for(int i=0; i<16; i++) { while(i>=0&&i<=3){ y[i][0]=x[i][0];break;} while(i>=4&&i<=7){ y[i-4][1]=x[i-4][1];break;} while(i>=8&&i<=11){ y[i-8][2]=x[i-8][2];break;} while(i>=12&&i<=15){ y[i-12][3]=x[i-12][3];break;} } //for (int j=0; j<4; j++){ //for(int i=0; i<4; i++) // cout<<y[i][j]; //cout<<"\n";} } void paridadcruzada::AgregarBitFila() { for(int j=0;j<4;j++){ switch(j) { case 0: { if(paroimpar1==0) y[4][0]=paroimpar1; else if (paroimpar1==1) y[4][0]=paroimpar1; break; } case 1: { if(paroimpar2==0) y[4][1]=paroimpar2; else if (paroimpar2==1) y[4][1]=paroimpar2; break; } case 2:

{ if(paroimpar3==0) y[4][2]=paroimpar3; else if (paroimpar3==1) y[4][2]=paroimpar3; break; } case 3: { if(paroimpar4==0) y[4][3]=paroimpar4; else if (paroimpar4==1) y[4][3]=paroimpar4; break; } } } } int paridadcruzada::NumeroDeUnosColumna() { int operacionaux5=0; int operacionaux6=0; int operacionaux7=0; int operacionaux8=0; int operacionaux9=0; for(int j=0; j<20; j++) { while(j>=0&&j<=3) { operacionaux5=y[0][j]+1; switch (operacionaux5) { case 1:numerodeunos5=numerodeunos5+0; case 2:numerodeunos5=numerodeunos5+1; } break; } while(j>=4&&j<=7) { operacionaux6=y[1][j-4]+1; switch (operacionaux6) { case 1:numerodeunos6=numerodeunos6+0; case 2:numerodeunos6=numerodeunos6+1; } break; } while(j>=8&&j<=11) { operacionaux7=y[2][j-8]+1; switch (operacionaux7) { case 1:numerodeunos7=numerodeunos7+0; case 2:numerodeunos7=numerodeunos7+1; } break; }

break; break;

break; break;

break; break;

while(j>=12&&j<=15) { operacionaux8=y[3][j-12]+1; switch (operacionaux8) { case 1:numerodeunos8=numerodeunos8+0; case 2:numerodeunos8=numerodeunos8+1; } break; } while(j>=16&&j<=19) { operacionaux9=y[4][j-16]+1; switch (operacionaux9) { case 1:numerodeunos9=numerodeunos9+0; case 2:numerodeunos9=numerodeunos9+1; } break; } } for(int k=0;k<5;k++) { switch(k) { case 0: { if(numerodeunos5%2==0) paroimpar5=0; else paroimpar5=1; break; } case 1: { if(numerodeunos6%2==0) paroimpar6=0; else paroimpar6=1; break; } case 2: { if(numerodeunos7%2==0) paroimpar7=0; else paroimpar7=1; break; } case 3: { if(numerodeunos8%2==0) paroimpar8=0; else paroimpar8=1; break; } case 4: { if(numerodeunos9%2==0)

break; break;

break; break;

paroimpar9=0; else paroimpar9=1; break; } } } return paroimpar5, paroimpar6, paroimpar7, paroimpar8, paroimpar9; } void paridadcruzada::AgregarBitColumna() { for(int k=0;k<5;k++) switch(k) { case 0: { if(paroimpar5==0) y[0][4]=paroimpar5; else if (paroimpar5==1) y[0][4]=paroimpar5; break; } case 1: { if(paroimpar6==0) y[1][4]=paroimpar6; else if (paroimpar6==1) y[1][4]=paroimpar6; break; } case 2: { if(paroimpar7==0) y[2][4]=paroimpar7; else if (paroimpar7==1) y[2][4]=paroimpar7; break; } case 3: { if(paroimpar8==0) y[3][4]=paroimpar8; else if (paroimpar8==1) y[3][4]=paroimpar8; break; } case 4: { if(paroimpar9==0) y[4][4]=paroimpar9; else if (paroimpar9==1) y[4][4]=paroimpar9; break; } } }

void paridadcruzada::ColocarEnVector() { cout<<"\nLa matriz de datos con bits de paridad es:\n"; for (int j=0; j<5; j++){ for(int i=0; i<5; i++) cout<<" "<<y[i][j]; cout<<"\n";} for(int i=0; i<25; i++) { while(i>=0&&i<=4){ z[i]=y[i][0];break;} while(i>=5&&i<=9){ z[i]=y[i-5][1];break;} while(i>=10&&i<=14){ z[i]=y[i-10][2];break;} while(i>=15&&i<=19){ z[i]=y[i-15][3];break;} while(i>=20&&i<=24){ z[i]=y[i-20][4];break;} } } void paridadcruzada::ImprimirPrimerVectorEnviado() { cout<<"\nEl vector de datos con paridad cruzada es:\n"; for(int i=0; i<25; i++) cout<<" "<<z[i]; } int paridadcruzada::CompararVectores() { for(int i=0; i<25; i++) { while(z[i]!=a[i]){ error=error+1;break;} while(z[i]==a[i]){ error=error+0;break;} } return error; } void paridadcruzada::ImprimirResultado() { if(error==0) { system("color ac"); cout<<"\n\tMensaje Correcto!!!\n\n\t\t\t"; } else if(error!=0) { cout<<"\n\tError en el mensaje :(\n\n\t\t\t"; system("color bc"); } }