lrc
#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;
}