0% found this document useful (0 votes)
28 views8 pages

22BCE3591 Assessment2

Uploaded by

Dhruv Jadav
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views8 pages

22BCE3591 Assessment2

Uploaded by

Dhruv Jadav
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

DHRUV KALPESH JADAV 22BCE3591

Computer Networks Lab


Lab Assessment – 2

Check Sum:
Code:
#include <stdio.h>
//Dhruv Kalpesh Jadav
//22BCE3591

int calculateSenderChecksum(int data[], int length) {


int sum = 0;
for(int i = 0; i < length; i++) {
sum += data[i];
}
int checksum = ~sum;
printf("\nMessage Sender:\n");
printf("Sum: %d\n", sum);
printf("Checksum: %d\n", checksum);
return checksum;
}

void validateReceiverChecksum(int data[], int length, int senderChecksum) {


int sum = 0;
for(int i = 0; i < length; i++) {
sum += data[i];
}
sum += senderChecksum;
int checksum = ~sum;
printf("\nMessage Reciever:\n");
printf("Sum: %d\n", sum);
printf("Checksum: %d\n", checksum);

if (checksum == 0) {
printf("\nData received is correct.\n");
} else {
printf("\nError detected in received data.\n");
}
}

int main() {
int n;
DHRUV KALPESH JADAV 22BCE3591

printf("\nEnter the number of elements: ");


scanf("%d", &n);

int data[n];
int dataR[n];
printf("Enter the elements of the array:\n");
for(int i = 0; i < n; i++) {
scanf("%d", &data[i]);
}

printf("\nEnter the elements of the recieved array:\n");


for(int i = 0; i < n; i++) {
scanf("%d", &dataR[i]);
}
int senderChecksum = calculateSenderChecksum(data, n);
validateReceiverChecksum(dataR, n, senderChecksum);
}

Output:
DHRUV KALPESH JADAV 22BCE3591

Hamming Code:
Code:
#include <stdio.h>
#include <math.h>
//Dhruv Kalpesh Jadav
//22BCE3591

int input[32];
int code[32];

int calculate_parity(int position, int code_length) {


int count = 0;
for (int i = position - 1; i < code_length; i += 2 * position) {
for (int j = i; j<i+position && j<code_length; j++) {
if (code[j] == 1) {
count++;
}
}
}
return (count % 2 ==0) ? 0:1;
}

int main() {
int n, parity_count = 0, code_length;

printf("Length of the Data Word: ");


scanf("%d", &n);
printf("Data Word (binary digits one by one):\n");
for (int i = 0; i < n; i++) {
scanf("%d", &input[i]);
}
while (n > pow(2, parity_count) - (parity_count + 1)) {
parity_count++;
}
code_length = n + parity_count;

for (int i = 0, j = 0, k = 0; i < code_length; i++) {


if (i == pow(2, k) - 1) {
code[i] = 0;
k++;
} else {
code[i] = input[j];
j++;
}
DHRUV KALPESH JADAV 22BCE3591

for (int i = 0; i < parity_count; i++) {


int position = pow(2, i);
code[position - 1] = calculate_parity(position, code_length);
}

printf("\nThe calculated message to be sent is: ");


for (int i = 0; i < code_length; i++) {
printf("%d", code[i]);
}
printf("\n");
printf("Received Data:\n");
for (int i = 0; i < code_length; i++) {
scanf("%d", &code[i]);
}
int error_position = 0;
for (int i = 0; i < parity_count; i++) {
int position = pow(2, i);
if (calculate_parity(position, code_length) != 0) {
error_position += position;
}
}

if (error_position == 0) {
printf("The received Data is correct.\n");
} else {
printf("Error at bit position: %d\n", error_position);
}
}
DHRUV KALPESH JADAV 22BCE3591

Output:

CRC:
Code:
#include <stdio.h>
#include <string.h>
//Dhruv Kalpesh Jadav
//22BCE3591

void xor1(char *result, char *a, char *b) {


int len = strlen(b);
for (int i = 1; i < len; i++) {
result[i - 1] = (a[i] == b[i]) ? '0' : '1';
}
result[len - 1] = '\0';
}

void mod2div(char *remainder, char *dividend, char *divisor) {


int pick = strlen(divisor);
char tmp[100];
DHRUV KALPESH JADAV 22BCE3591

strncpy(tmp, dividend, pick);


tmp[pick] = '\0';

int n = strlen(dividend);
while (pick < n) {
if (tmp[0] == '1') {
xor1(tmp, divisor, tmp);
} else {
char allZero[pick + 1];
memset(allZero, '0', pick);
allZero[pick] = '\0';
xor1(tmp, allZero, tmp);
}
strncat(tmp, &dividend[pick], 1);
pick++;
}

if (tmp[0] == '1') {
xor1(tmp, divisor, tmp);
} else {
char allZero[pick + 1];
memset(allZero, '0', pick);
allZero[pick] = '\0';
xor1(tmp, allZero, tmp);
}

strcpy(remainder, tmp);
}

void encodeData(char *data, char *key, char *encoded) {


int l_key = strlen(key);
char appended_data[100];
snprintf(appended_data, sizeof(appended_data), "%s%0*d", data, l_key - 1,
0);

char remainder[100];
mod2div(remainder, appended_data, key);

strcpy(encoded, data);
strcat(encoded, remainder);

printf("Encoded Data: %s\n", encoded);


}

void receiver(char *received_data, char *key) {


char remainder[100];
mod2div(remainder, received_data, key);
DHRUV KALPESH JADAV 22BCE3591

if (strchr(remainder, '1') != NULL) {


printf("There is some error in the received data.\n");
} else {
printf("Correct message received.\n");
}
}

int main() {
char data[100], key[100], received_data[100];

printf("Enter the data to be sent: ");


scanf("%s", data);

printf("Enter the divisor: ");


scanf("%s", key);

char encoded[200];
encodeData(data, key, encoded);

printf("\nEnter the received data: ");


scanf("%s", received_data);

receiver(received_data, key);
}
DHRUV KALPESH JADAV 22BCE3591

Output:

You might also like