package crcdect;
import [Link].*;
public class crcdec {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new
InputStreamReader([Link]));
[Link]("Enter number of data bits: ");
int data_bits = [Link]([Link]());
int[] data = new int[data_bits];
[Link]("Enter data bits separated by spaces (0 or 1):");
String[] bits = [Link]().trim().split("\\s+");
for (int i = 0; i < data_bits; i++) {
data[i] = [Link](bits[i]);
}
int divisor_bits = 17;
int[] divisor = new int[]{1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1};
int tot_length = data_bits + divisor_bits - 1;
int[] div = new int[tot_length];
int[] rem = new int[tot_length];
int[] crc = new int[tot_length];
for (int i = 0; i < [Link]; i++)
div[i] = data[i];
[Link]("Dividend after appending 0's: ");
for (int i = 0; i < [Link]; i++)
[Link](div[i]);
[Link]();
for (int j = 0; j < [Link]; j++)
rem[j] = div[j];
rem = divide(divisor, rem);
for (int i = 0; i < [Link]; i++)
crc[i] = div[i] ^ rem[i];
[Link]("CRC code: ");
for (int i = 0; i < [Link]; i++)
[Link](crc[i]);
[Link]();
[Link]("Enter received CRC code separated by spaces:");
String[] receivedBits = [Link]().trim().split("\\s+");
for (int i = 0; i < [Link]; i++)
crc[i] = [Link](receivedBits[i]);
for (int j = 0; j < [Link]; j++)
rem[j] = crc[j];
rem = divide(divisor, rem);
boolean error = false;
for (int i = 0; i < [Link]; i++) {
if (rem[i] != 0) {
error = true;
break;
}
}
if (error)
[Link]("Error detected in received message!");
else
[Link]("No error in received message.");
[Link]("THANK YOU...");
}
static int[] divide(int[] divisor, int[] rem) {
int cur = 0;
while (true) {
for (int i = 0; i < [Link]; i++)
rem[cur + i] = rem[cur + i] ^ divisor[i];
while (cur < [Link] && rem[cur] == 0)
cur++;
if (([Link] - cur) < [Link])
break;
}
return rem;
}
}