OneCompiler

lrc

131

#include <stdio.h>
#include <string.h>

int main()
{

char msg[50], pty[50], lrc_computed[50], lrc_received[50];
printf("Enter message bits : ");
scanf("%s", msg);

int parity;
// Asking for which type of parity to use
printf("Enter the type of parity\n");
printf("Enter 2 for Even Parity\nEnter 3 for Odd Parity : ");
scanf("%d", &parity);

// calculating total bits in msg.
int msglen = strlen(msg);

int i, j;

char comp_msg[50];
for (i = 0; i <= 32 - msglen; i++)
{
if (i < (32 - msglen))
{
comp_msg[i] = '0';
}
else
{
for (j = 0; j < msglen; j++)
{
comp_msg[i] = msg[j];
i++;
}
}
}

printf("Message = %s\n", comp_msg);

char matrix[50][50];
// printing bits in a matrix format
int k = 0;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 8; j++)
{
matrix[i][j] = comp_msg[k];
k++;
}
}

int count_ones;
printf("Original Data : \n");
for (i = 0; i < 4; i++)
{
count_ones = 0;
for (j = 0; j < 8; j++)
{
printf("%c ", matrix[i][j]);
}
printf("\n");
}
printf("\n");

// Traversing Matrix Columnwise and counting 1s in every column
for (i = 0; i < 8; i++)
{
count_ones = 0;
for (j = 0; j < 4; j++)
{
if (matrix[j][i] == '1')
{
count_ones++;
}
}

if (parity == 2)
{
  if (count_ones % 2 == 0)
  {
    lrc_received[i] = '0';
  }
  else
  {
    lrc_received[i] = '1';
  }
}
else
{
  if (count_ones % 2 == 0)
  {
    lrc_received[i] = '1';
  }
  else
  {
    lrc_received[i] = '0';
  }
}

}

printf("LRC (SENDER SIDE) : %s\n", lrc_received);
printf("\n");

printf("Message to be transmitted (Data + LRC) : ");
printf("%s%s\n", msg, lrc_received);

// On RECEIVER SIDE
char msg_rec[50];
printf("Enter message received on RECEIVER SIDE : ");
scanf("%s", msg);

int msg_rec_len = msglen;
printf("On Receiver side : \n");

for (i = 0; i <= 32 - msg_rec_len; i++)
{
if (i < (32 - msg_rec_len))
{
msg_rec[i] = '0';
}
else
{
for (j = 0; j < msg_rec_len; j++)
{
msg_rec[i] = msg[j];
i++;
}
}
}
k = 0;

for (i = 0; i < 4; i++)
{
for (j = 0; j < 8; j++)
{
matrix[i][j] = msg_rec[k];
k++;
}
}
for (i = 0; i < 4; i++)
{
count_ones = 0;
for (j = 0; j < 8; j++)
{
printf("%c ", matrix[i][j]);
}
printf("\n");
}
printf("\n");

for (i = 0; i < 8; i++)
{
count_ones = 0;
for (j = 0; j < 4; j++)
{
if (matrix[j][i] == '1')
{
count_ones++;
}
}

if (parity == 2)
{
  if (count_ones % 2 == 0)
  {
    lrc_computed[i] = '0';
  }
  else
  {
    lrc_computed[i] = '1';
  }
}
else
{
  if (count_ones % 2 == 0)
  {
    lrc_computed[i] = '1';
  }
  else
  {
    lrc_computed[i] = '0';
  }
}

}

printf("LRC (RECEIVER SIDE) : %s\n", lrc_computed);
printf("\n");

// For a message to be valid,LRC on both sides must be same.
int flag = 0;
for (i = 0; i < strlen(lrc_computed); i++)
{
if (lrc_received[i] != lrc_computed[i])
{
flag = 1;
break;
}
}

if (flag == 0)
{
printf("Successfu!!!,NO changes made.\n");
}
else
{
printf("Error, some bits have been changed.\n");
}

return 0;
}