Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
23 views

Assignment 2

The document describes 3 C programs that implement different techniques for error detection: checksum, parity checking, and cyclic redundancy check (CRC). The checksum program calculates checksums for data sent and received to check for errors. The parity program calculates parity bits for bits sent and received. The CRC program calculates CRC values for messages sent and received using a polynomial to check for errors. All programs test the calculated values at the sender and receiver to detect any errors in transmission.

Uploaded by

shubos467
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views

Assignment 2

The document describes 3 C programs that implement different techniques for error detection: checksum, parity checking, and cyclic redundancy check (CRC). The checksum program calculates checksums for data sent and received to check for errors. The parity program calculates parity bits for bits sent and received. The CRC program calculates CRC values for messages sent and received using a polynomial to check for errors. All programs test the calculated values at the sender and receiver to detect any errors in transmission.

Uploaded by

shubos467
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

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.

You might also like