#include <iostream>
using namespace std;
//#include <conio.h>
int main( )
{
int i,j,k,l;
//Get Frame
int fs;
cout << "\n Enter Frame size: " ;
cin >> fs;
int f[ 20 ] ;
cout << "\n Enter Frame:" ;
for ( i= 0 ; i< fs; i++ )
{
cin >> f[ i] ;
}
//Get Generator
int gs;
cout << "\n Enter Generator size: " ;
cin >> gs;
int g[ 20 ] ;
cout << "\n Enter Generator:" ;
for ( i= 0 ; i< gs; i++ )
{
cin >> g[ i] ;
}
cout << "\n Sender Side:" ;
cout << "\n Frame: " ;
for ( i= 0 ; i< fs; i++ )
{
cout << f[ i] ;
}
cout << "\n Generator :" ;
for ( i= 0 ; i< gs; i++ )
{
cout << g[ i] ;
}
//Append 0's
int rs= gs- 1 ;
cout << "\n Number of 0's to be appended: " << rs;
for ( i= fs; i< fs+ rs; i++ )
{
f[ i] = 0 ;
}
int temp[ 20 ] ;
for ( i= 0 ; i< 20 ; i++ )
{
temp[ i] = f[ i] ;
}
cout << "\n Message after appending 0's :" ;
for ( i= 0 ; i< fs+ rs; i++ )
{
cout << temp[ i] ;
}
//Division
for ( i= 0 ; i< fs; i++ )
{
j= 0 ;
k= i;
//check whether it is divisible or not
if ( temp[ k] >= g[ j] )
{
for ( j= 0 ,k= i; j< gs; j++ ,k++ )
{
if ( ( temp[ k] == 1 && g[ j] == 1 ) || ( temp[ k] == 0 && g[ j] == 0 ) )
{
temp[ k] = 0 ;
}
else
{
temp[ k] = 1 ;
}
}
}
}
//CRC
int crc[ 15 ] ;
for ( i= 0 ,j= fs; i< rs; i++ ,j++ )
{
crc[ i] = temp[ j] ;
}
cout << "\n CRC bits: " ;
for ( i= 0 ; i< rs; i++ )
{
cout << crc[ i] ;
}
cout << "\n Transmitted Frame: " ;
int tf[ 15 ] ;
for ( i= 0 ; i< fs; i++ )
{
tf[ i] = f[ i] ;
}
for ( i= fs,j= 0 ; i< fs+ rs; i++ ,j++ )
{
tf[ i] = crc[ j] ;
}
for ( i= 0 ; i< fs+ rs; i++ )
{
cout << tf[ i] ;
}
cout << "\n Receiver side : " ;
cout << "\n Received Frame: " ;
for ( i= 0 ; i< fs+ rs; i++ )
{
cout << tf[ i] ;
}
for ( i= 0 ; i< fs+ rs; i++ )
{
temp[ i] = tf[ i] ;
}
//Division
for ( i= 0 ; i< fs+ rs; i++ )
{
j= 0 ;
k= i;
if ( temp[ k] >= g[ j] )
{
for ( j= 0 ,k= i; j< gs; j++ ,k++ )
{
if ( ( temp[ k] == 1 && g[ j] == 1 ) || ( temp[ k] == 0 && g[ j] == 0 ) )
{
temp[ k] = 0 ;
}
else
{
temp[ k] = 1 ;
}
}
}
}
cout << "\n Reaminder: " ;
int rrem[ 15 ] ;
for ( i= fs,j= 0 ; i< fs+ rs; i++ ,j++ )
{
rrem[ j] = temp[ i] ;
}
for ( i= 0 ; i< rs; i++ )
{
cout << rrem[ i] ;
}
int flag= 0 ;
for ( i= 0 ; i< rs; i++ )
{
if ( rrem[ i] ! = 0 )
{
flag= 1 ;
}
}
if ( flag== 0 )
{
cout << "\n Since Remainder Is 0 Hence Message Transmitted From Sender To Receriver Is Correct" ;
}
else
{
cout << "\n Since Remainder Is Not 0 Hence Message Transmitted From Sender To Receriver Contains Error" ;
}
//getch();
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovLyNpbmNsdWRlIDxjb25pby5oPgogCmludCBtYWluKCkKewogICAgaW50IGksaixrLGw7CiAgICAgCiAgICAvL0dldCBGcmFtZQogICAgaW50IGZzOwogICAgY291dDw8IlxuIEVudGVyIEZyYW1lIHNpemU6ICI7CiAgICBjaW4+PmZzOwogICAgIAogICAgaW50IGZbMjBdOwogICAgIAogICAgY291dDw8IlxuIEVudGVyIEZyYW1lOiI7CiAgICBmb3IoaT0wO2k8ZnM7aSsrKQogICAgewogICAgICAgIGNpbj4+ZltpXTsKICAgIH0KIAogICAgLy9HZXQgR2VuZXJhdG9yCiAgICBpbnQgZ3M7CiAgICBjb3V0PDwiXG4gRW50ZXIgR2VuZXJhdG9yIHNpemU6ICI7CiAgICBjaW4+PmdzOwogICAgIAogICAgaW50IGdbMjBdOwogICAgIAogICAgY291dDw8IlxuIEVudGVyIEdlbmVyYXRvcjoiOwogICAgZm9yKGk9MDtpPGdzO2krKykKICAgIHsKICAgICAgICBjaW4+PmdbaV07CiAgICB9CiAKICAgIGNvdXQ8PCJcbiBTZW5kZXIgU2lkZToiOwogICAgY291dDw8IlxuIEZyYW1lOiAiOwogICAgZm9yKGk9MDtpPGZzO2krKykKICAgIHsKICAgICAgICBjb3V0PDxmW2ldOwogICAgfQogICAgY291dDw8IlxuIEdlbmVyYXRvciA6IjsKICAgIGZvcihpPTA7aTxncztpKyspCiAgICB7CiAgICAgICAgY291dDw8Z1tpXTsKICAgIH0KIAogICAgLy9BcHBlbmQgMCdzCiAgICBpbnQgcnM9Z3MtMTsKICAgIGNvdXQ8PCJcbiBOdW1iZXIgb2YgMCdzIHRvIGJlIGFwcGVuZGVkOiAiPDxyczsKICAgIGZvciAoaT1mcztpPGZzK3JzO2krKykKICAgIHsKICAgICAgICBmW2ldPTA7CiAgICB9CiAKICAgIGludCB0ZW1wWzIwXTsKICAgIGZvcihpPTA7aTwyMDtpKyspCiAgICB7CiAgICAgICAgdGVtcFtpXT1mW2ldOwogICAgfQogCiAgICBjb3V0PDwiXG4gTWVzc2FnZSBhZnRlciBhcHBlbmRpbmcgMCdzIDoiOwogICAgZm9yKGk9MDsgaTxmcytycztpKyspCiAgICB7CiAgICAgICAgY291dDw8dGVtcFtpXTsKICAgIH0KIAogICAgLy9EaXZpc2lvbgogICAgZm9yKGk9MDtpPGZzO2krKykKICAgIHsKICAgICAgICBqPTA7CiAgICAgICAgaz1pOwogICAgICAgIC8vY2hlY2sgd2hldGhlciBpdCBpcyBkaXZpc2libGUgb3Igbm90CiAgICAgICAgaWYgKHRlbXBba10+PWdbal0pCiAgICAgICAgewogICAgICAgICAgICBmb3Ioaj0wLGs9aTtqPGdzO2orKyxrKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCh0ZW1wW2tdPT0xICYmIGdbal09PTEpIHx8ICh0ZW1wW2tdPT0wICYmIGdbal09PTApKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRlbXBba109MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0ZW1wW2tdPTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIC8vQ1JDCiAgICBpbnQgY3JjWzE1XTsKICAgIGZvcihpPTAsaj1mcztpPHJzO2krKyxqKyspCiAgICB7CiAgICAgICAgY3JjW2ldPXRlbXBbal07CiAgICB9CiAKICAgIGNvdXQ8PCJcbiBDUkMgYml0czogIjsKICAgIGZvcihpPTA7aTxycztpKyspCiAgICB7CiAgICAgICAgY291dDw8Y3JjW2ldOwogICAgfQogCiAgICBjb3V0PDwiXG4gVHJhbnNtaXR0ZWQgRnJhbWU6ICI7CiAgICBpbnQgdGZbMTVdOwogICAgZm9yKGk9MDtpPGZzO2krKykKICAgIHsKICAgICAgICB0ZltpXT1mW2ldOwogICAgfQogICAgZm9yKGk9ZnMsaj0wO2k8ZnMrcnM7aSsrLGorKykKICAgIHsKICAgICAgICB0ZltpXT1jcmNbal07CiAgICB9CiAgICBmb3IoaT0wO2k8ZnMrcnM7aSsrKQogICAgewogICAgICAgIGNvdXQ8PHRmW2ldOwogICAgfQogCiAgICBjb3V0PDwiXG4gUmVjZWl2ZXIgc2lkZSA6ICI7CiAgICBjb3V0PDwiXG4gUmVjZWl2ZWQgRnJhbWU6ICI7CiAgICBmb3IoaT0wO2k8ZnMrcnM7aSsrKQogICAgewogICAgICAgIGNvdXQ8PHRmW2ldOwogICAgfQogCiAgICBmb3IoaT0wO2k8ZnMrcnM7aSsrKQogICAgewogICAgICAgIHRlbXBbaV09dGZbaV07CiAgICB9CiAKICAgIC8vRGl2aXNpb24KICAgIGZvcihpPTA7aTxmcytycztpKyspCiAgICB7CiAgICAgICAgaj0wOwogICAgICAgIGs9aTsKICAgICAgICBpZiAodGVtcFtrXT49Z1tqXSkKICAgICAgICB7CiAgICAgICAgICAgIGZvcihqPTAsaz1pO2o8Z3M7aisrLGsrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoKHRlbXBba109PTEgJiYgZ1tqXT09MSkgfHwgKHRlbXBba109PTAgJiYgZ1tqXT09MCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGVtcFtrXT0wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRlbXBba109MTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIAogICAgY291dDw8IlxuIFJlYW1pbmRlcjogIjsKICAgIGludCBycmVtWzE1XTsKICAgIGZvciAoaT1mcyxqPTA7aTxmcytycztpKyssaisrKQogICAgewogICAgICAgIHJyZW1bal09IHRlbXBbaV07CiAgICB9CiAgICBmb3IoaT0wO2k8cnM7aSsrKQogICAgewogICAgICAgIGNvdXQ8PHJyZW1baV07CiAgICB9CiAKICAgIGludCBmbGFnPTA7CiAgICBmb3IoaT0wO2k8cnM7aSsrKQogICAgewogICAgICAgIGlmKHJyZW1baV0hPTApCiAgICAgICAgewogICAgICAgICAgICBmbGFnPTE7CiAgICAgICAgfQogICAgfQogCiAgICBpZihmbGFnPT0wKQogICAgewogICAgICAgIGNvdXQ8PCJcbiBTaW5jZSBSZW1haW5kZXIgSXMgMCBIZW5jZSBNZXNzYWdlIFRyYW5zbWl0dGVkIEZyb20gU2VuZGVyIFRvIFJlY2VyaXZlciBJcyBDb3JyZWN0IjsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBjb3V0PDwiXG4gU2luY2UgUmVtYWluZGVyIElzIE5vdCAwIEhlbmNlIE1lc3NhZ2UgVHJhbnNtaXR0ZWQgRnJvbSBTZW5kZXIgVG8gUmVjZXJpdmVyIENvbnRhaW5zIEVycm9yIjsKICAgIH0KICAgIC8vZ2V0Y2goKTsKICAgIHJldHVybiAwOwp9Cg==