ASSIGNMENT-2
1) Write a C program to perform checksum for error detection for both the
sender and receiver side.
Code -
#include <stdio.h>
#de ine DATA_SIZE 10
int calculateChecksum(int data[]) {
int checksum = 0;
for (int i = 0; i < DATA_SIZE; i++) {
checksum += data[i];
}
return checksum;
}
int main() {
int data[DATA_SIZE];
int senderChecksum, receiverChecksum;
printf("Sender Side:\n");
printf("Enter %d integers:\n", DATA_SIZE);
for (int i = 0; i < DATA_SIZE; i++) {
scanf("%d", &data[i]);
}
senderChecksum = calculateChecksum(data);
printf("Checksum generated at sender side: %d\n", senderChecksum);
printf("\nReceiver Side:\n");
printf("Enter %d integers received:\n", DATA_SIZE);
for (int i = 0; i < DATA_SIZE; i++) {
scanf("%d", &data[i]);
}
receiverChecksum = calculateChecksum(data);
printf("Checksum generated at receiver side: %d\n", receiverChecksum);
if (senderChecksum == receiverChecksum) {
printf("Checksums match. No errors detected.\n");
} else {
printf("Checksums do not match. Errors detected.\n");
}
return 0;
}
Output -
Sender Side:
Enter 10 integers:
56
35
8
67
23
56
34
21
34
56
Checksum generated at sender side: 390
Receiver Side:
Enter 10 integers received:
56
35
10
67
23
56
34
21
36
56
Checksum generated at receiver side: 394
Checksums do not match. Errors detected.
2)Write a C program to perform parity checker for error detection for both the
sender and receiver side.
Code -
#include <stdio.h>
#de ine DATA_SIZE 8
int calculateParityBit(int data[]) {
int count = 0;
for (int i = 0; i < DATA_SIZE; i++) {
if (data[i] == 1) {
count++;
}
}
return count % 2;
}
int main() {
int data[DATA_SIZE];
int senderParity, receiverParity;
printf("Sender Side:\n");
printf("Enter %d bits (0s and 1s):\n", DATA_SIZE);
for (int i = 0; i < DATA_SIZE; i++) {
scanf("%d", &data[i]);
}
senderParity = calculateParityBit(data);
printf("Parity bit generated at sender side: %d\n", senderParity);
printf("\nReceiver Side:\n");
printf("Enter %d bits received (0s and 1s):\n", DATA_SIZE);
for (int i = 0; i < DATA_SIZE; i++) {
scanf("%d", &data[i]);
}
receiverParity = calculateParityBit(data);
printf("Parity bit generated at receiver side: %d\n", receiverParity);
if (senderParity == receiverParity) {
printf("Parity bits match. No errors detected.\n");
} else {
printf("Parity bits do not match. Errors detected.\n");
}
return 0;
}
Output -
Sender Side:
Enter 8 bits (0s and 1s):
0
1
0
0
1
1
0
1
Parity bit generated at sender side: 0
Receiver Side:
Enter 8 bits received (0s and 1s):
1
1
1
0
0
1
1
1
Parity bit generated at receiver side: 0
Parity bits match. No errors detected.
3)Write a C program to perform CRC (Cyclic Redundancy Check) for error
detection for both the sender and receiver side.
Code -
#include <stdio.h>
#include <string.h>
#de ine POLYNOMIAL 0x04C11DB7
unsigned int crc32(const unsigned char *message, unsigned int size) {
unsigned int crc = 0xffffffff;
for (unsigned int i = 0; i < size; i++) {
crc ^= message[i];
for (int j = 0; j < 8; j++) {
if (crc & 0x80000000) {
crc = (crc << 1) ^ POLYNOMIAL;
} else {
crc = crc << 1;
}
}
}
return crc;
}
int main() {
unsigned char message[100];
unsigned int senderCRC, receiverCRC;
printf("Sender Side:\n");
printf("Enter message to send: ");
fgets((char *)message, sizeof(message), stdin);
message[strlen((char *)message) - 1] = '\0';
unsigned int size = strlen((char *)message);
senderCRC = crc32(message, size);
printf("CRC generated at sender side: 0x%08X\n", senderCRC);
printf("\nReceiver Side:\n");
printf("Enter received message: ");
fgets((char *)message, sizeof(message), stdin);
message[strlen((char *)message) - 1] = '\0';
size = strlen((char *)message);
receiverCRC = crc32(message, size);
printf("CRC generated at receiver side: 0x%08X\n", receiverCRC);
if (senderCRC == receiverCRC) {
printf("CRCs match. No errors detected.\n");
} else {
printf("CRCs do not match. Errors detected.\n");
}
return 0;
}
Output -
Sender Side:
Enter message to send: 0xABBBBBBBB
CRC generated at sender side: 0x2A2185B9
Receiver Side:
Enter received message: 0xABBBBBBBB
CRC generated at receiver side: 0x2A2185B9
CRCs match. No errors detected.