OneCompiler

hamming

131

#include <stdio.h>

int main()
{
int bit[20];
int bits_at_rcvr[20], t, t1, t2, t3, k, t4;

printf("Enter seven bits of data one at a time\n");
scanf("%d", &bit[0]);
scanf("%d", &bit[1]);
scanf("%d", &bit[2]);
scanf("%d", &bit[4]);
scanf("%d", &bit[5]);
scanf("%d", &bit[6]);
scanf("%d", &bit[8]);

// Here we calculate parity , which is even in this case

bit[10] = bit[8] ^ bit[6] ^ bit[4] ^ bit[2] ^ bit[0];
bit[9] = bit[8] ^ bit[5] ^ bit[4] ^ bit[1] ^ bit[0];
bit[7] = bit[6] ^ bit[5] ^ bit[4];
bit[3] = bit[0] ^ bit[1] ^ bit[2];

printf("\nThe data obtained after encoding is\n");
for (k = 0; k < 11; k++)
printf("%d", bit[k]);

printf("\n\nEnter the received data bits one at a time\n");
for (k = 0; k < 11; k++)
scanf("%d", &bits_at_rcvr[k]);

t4 = bits_at_rcvr[3] ^ bits_at_rcvr[2] ^ bits_at_rcvr[1] ^ bits_at_rcvr[0];
t3 = bits_at_rcvr[7] ^ bits_at_rcvr[6] ^ bits_at_rcvr[5] ^ bits_at_rcvr[4];
t2 = bits_at_rcvr[9] ^ bits_at_rcvr[8] ^ bits_at_rcvr[5] ^ bits_at_rcvr[4] ^ bits_at_rcvr[1] ^ bits_at_rcvr[0];
t1 = bits_at_rcvr[10] ^ bits_at_rcvr[8] ^ bits_at_rcvr[6] ^ bits_at_rcvr[4] ^ bits_at_rcvr[2] ^ bits_at_rcvr[0];
t = t4 * 8 + t3 * 4 + t2 * 2 + t1 * 1;

if (t == 0)
{
printf("\nNo error has occured during data transmission\n");
}
else
{
printf("\nAn error has occured on position %d", t);

printf("\nThe data sent is : ");
for (k = 0; k < 11; k++)
  printf("%d", bit[k]);

printf("\nThe received data is : ");
for (k = 0; k < 11; k++)
  printf("%d", bits_at_rcvr[k]);
printf("\nThe correct message is\n");

// if the error bit is 0, we change it to 1 and if it is 1, we change it to 0
if (bits_at_rcvr[11 - t] == 0)
  bits_at_rcvr[11 - t] = 1;
else
  bits_at_rcvr[11 - t] = 0;
for (k = 0; k < 11; k++)
{
  printf("%d", bits_at_rcvr[k]);
}

}

printf("\n");

return 0;
}