EXP 2.pdfhuihgyygitfyrdthyryjrfgijhgfxcuhb

swethaj789 4 views 4 slides Aug 27, 2025
Slide 1
Slide 1 of 4
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4

About This Presentation

yfgyguyhuhgygyhgcvhmjhbgfryukijvcfvj


Slide Content

#include <stdio.h>
#include <string.h>
#include <conio.h> // For getch()
#include <dos.h> // Optional: For delay()
#define MAX 256
// XOR operation used for CRC
void xorOperation(char *dividend, const char *divisor, int len) {
int i;
for (i = 1; i < len; i++) {
dividend[i] = (dividend[i] == divisor[i]) ? '0' : '1';
}
}
// CRC Computation
void computeCRC(const char *data, const char *poly, int polyLen) {
char dividend[MAX], remainder[MAX], zeroDivisor[MAX];
int dataLen, i, j;
dataLen = strlen(data);
// Create the dividend with zeros appended
strcpy(dividend, data);
for (i = 0; i < polyLen - 1; i++) {
dividend[dataLen + i] = '0';
}
dividend[dataLen + polyLen - 1] = '\0';
// Copy initial bits to remainder
strncpy(remainder, dividend, polyLen);
remainder[polyLen] = '\0';
// Prepare all-zero divisor
for (i = 0; i < polyLen; i++) {

zeroDivisor[i] = '0';
}
zeroDivisor[polyLen] = '\0';
// Perform division
for (i = polyLen; i <= strlen(dividend); i++) {
if (remainder[0] == '1') {
xorOperation(remainder, poly, polyLen);
} else {
xorOperation(remainder, zeroDivisor, polyLen);
}
// Shift left and bring next bit
for (j = 0; j < polyLen - 1; j++) {
remainder[j] = remainder[j + 1];
}
remainder[polyLen - 1] = dividend[i];
}
// Final remainder is the CRC
printf("\nCRC: ");
for (i = 0; i < polyLen - 1; i++) {
printf("%c", remainder[i]);
}
// Display final codeword
printf("\nTransmitted Codeword: %s", data);
for (i = 0; i < polyLen - 1; i++) {
printf("%c", remainder[i]);
}
printf("\n");
}

// Main Menu
int main() {
int choice;
char data[MAX];
const char *crc12 = "1100000001111"; // CRC-12
const char *crc16 = "11000000000000101"; // CRC-16
const char *crcCCITT = "10001000000100001"; // CRC-CCITT
clrscr(); // Clear screen for Turbo C
do {
printf("\n--- CRC Computation ---\n");
printf("1. CRC-12\n");
printf("2. CRC-16\n");
printf("3. CRC-CCITT\n");
printf("4. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
if (choice >= 1 && choice <= 3) {
printf("Enter the binary data: ");
scanf("%s", data);
}
switch (choice) {
case 1:
printf("\nUsing Generator Polynomial: CRC-12\n");
computeCRC(data, crc12, strlen(crc12));
break;
case 2:
printf("\nUsing Generator Polynomial: CRC-16\n");
computeCRC(data, crc16, strlen(crc16));

break;
case 3:
printf("\nUsing Generator Polynomial: CRC-CCITT\n");
computeCRC(data, crcCCITT, strlen(crcCCITT));
break;
case 4:
printf("\n Exiting...\n");
break;
default:
printf("\n Invalid choice. Try again.\n");
}

} while (choice != 4);

printf("\nPress any key to exit...");
getch(); // Wait for key press before closing
return 0;
}