#include #include #include using namespace std; // Function to calculate the number of parity bits needed int calculateParityBits(int dataBits) { int parityBits = 0; while (pow(2, parityBits) < dataBits + parityBits + 1) { parityBits++; } return parityBits; } // Function to encode the data using Hamming code vector encodeData(vector data) { int dataBits = data.size(); int parityBits = calculateParityBits(dataBits); vector encoded(dataBits + parityBits, 0); // Set the data bits int j = 0; for (int i = 0; i < encoded.size(); i++) { if (i + 1 == pow(2, j)) { j++; } else { encoded[i] = data[i - j]; } } // Calculate and set the parity bits for (int i = 0; i < parityBits; i++) { int parityBit = pow(2, i); int sum = 0; for (int j = parityBit - 1; j < encoded.size(); j += 2 * parityBit) { for (int k = 0; k < parityBit; k++) { if (j + k < encoded.size()) { sum += encoded[j + k]; } } } encoded[parityBit - 1] = sum % 2; } return encoded; } // Function to check for errors in the encoded data int checkForErrors(vector encoded) { int parityBits = calculateParityBits(encoded.size() - calculateParityBits(encoded.size())); int errorPosition = 0; for (int i = 0; i < parityBits; i++) { int parityBit = pow(2, i); int sum = 0; for (int j = parityBit - 1; j < encoded.size(); j += 2 * parityBit) { for (int k = 0; k < parityBit; k++) { if (j + k < encoded.size()) { sum += encoded[j + k]; } } } errorPosition += (sum % 2) * parityBit; } return errorPosition; } int main() { int dataBits; cout<<"Enter the number of data bits:\t"; cin >> dataBits; vector data(dataBits); cout<> data[i]; } vector encoded = encodeData(data); cout< receivedEncoded(encoded.size()); for (int i = 0; i < encoded.size(); i++) { cin >> receivedEncoded[i]; } int errorPosition = checkForErrors(receivedEncoded); if (errorPosition == 0) { cout<<"No errors detected."<