M
gelöst, dank einem kollegen auf stackoverflow.com
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Encoder -----------------------------------------------------------------------------------------------------------------------------------
cout<< endl <<" Encoder "<< endl;
// create an input vector
bool bInput[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//bool bInput[] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 };
vector< bool > vbInput( bInput, bInput + sizeof( bInput ) / sizeof( bool ) );
// create the shift register
//bool bShiftReg[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
bool bShiftReg[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
// create an output vector
vector< bool > vbOutput(40);
// iterator for the input
vector<bool>::iterator itInput = vbInput.begin();
cout<<"\n Input: ";
for( itInput = vbInput.begin(); itInput < vbInput.end(); itInput++)
cout << " " << *itInput;
cout<<endl<<endl;
// iterator for the output
vector<bool>::iterator itOutput = vbOutput.begin();
for( itInput = vbInput.begin(); itInput < vbInput.end(); itInput++)
{
// calculate values of every flipflop and the output and save them in a temp array
bool bTempReg[10];
bTempReg[0] = *itInput ^ ( bShiftReg[ 4 ] ^ bShiftReg[ 8 ] );
bTempReg[1] = bShiftReg[0];
bTempReg[2] = bShiftReg[1];
bTempReg[3] = bShiftReg[2];
bTempReg[4] = bShiftReg[3];
bTempReg[5] = bShiftReg[4];
bTempReg[6] = bShiftReg[5];
bTempReg[7] = bShiftReg[6];
bTempReg[8] = bShiftReg[7];
bTempReg[9] = bShiftReg[8] ^ bShiftReg[9];
*itOutput = bShiftReg[ 9 ];
// assign values of the temp array to the flipflops
for( unsigned char ucIndex = 0; ucIndex < 10; ucIndex++ )
{
bShiftReg[ ucIndex ] = bTempReg[ ucIndex ];
}
/*cout<<"\n Schift Reg: ";
for( int i=0;i<10;i++)
{ cout << " " << bShiftReg[i]; }
cout<<" Output: " << *itOutput;*/
itOutput++;
}
cout<<"\n Output: ";
for( itOutput = vbOutput.begin(); itOutput < vbOutput.end(); itOutput++)
cout << " " << *itOutput;
cout<<endl<<endl;
// Decoder -----------------------------------------------------------------------------------------------------------------------------------
cout<< endl <<" Decoder "<< endl;
// load the old ouput to the new input
vbInput = vbOutput;
cout<<"\n Input: ";
for( itInput = vbInput.begin(); itInput < vbInput.end(); itInput++)
cout << " " << *itInput;
// reset the shift reg
for(int i = 0;i<10;i++) bShiftReg[i] = 1;
// set output iterator to the begin of the vector
itOutput = vbOutput.begin();
for( itInput = vbInput.begin(); itInput < vbInput.end(); itInput++)
{
// calculate values of every flipflop and the output and save them in a temp array
bool bTempReg[10];
bTempReg[0] = *itInput;
bTempReg[1] = bShiftReg[ 0 ] ^ *itInput;
bTempReg[2] = bShiftReg[1];
bTempReg[3] = bShiftReg[2];
bTempReg[4] = bShiftReg[3];
bTempReg[5] = bShiftReg[4];
bTempReg[6] = bShiftReg[5];
bTempReg[7] = bShiftReg[6];
bTempReg[8] = bShiftReg[7];
bTempReg[9] = bShiftReg[8];
*itOutput = ( ( *itInput ^ bShiftReg[0] ) ^ bShiftReg[5] ) ^ bShiftReg[9];
// assign values of the temp array to the flipflops
for( unsigned char ucIndex = 0; ucIndex < 10; ucIndex++ )
{
bShiftReg[ ucIndex ] = bTempReg[ ucIndex ];
}
/*cout<<"\n Schift Reg: ";
for( int i=0;i<10;i++)
{ cout << " " << bShiftReg[i]; }
cout<<" Output: " << *itOutput;*/
itOutput++;
}
cout<<"\n Output: ";
for( itOutput = vbOutput.begin(); itOutput < vbOutput.end(); itOutput++)
cout << " " << *itOutput;
cout<<endl<<endl;
return 0;
}