From c1d03dc970991f478afb29763ec63e17b6996a9c Mon Sep 17 00:00:00 2001 From: Kshitij Date: Thu, 3 Oct 2024 01:11:43 +0530 Subject: [PATCH] Added full working hamming code. --- Codes/Code-A4 (Hamming Code).cpp | 103 +++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Codes/Code-A4 (Hamming Code).cpp diff --git a/Codes/Code-A4 (Hamming Code).cpp b/Codes/Code-A4 (Hamming Code).cpp new file mode 100644 index 0000000..30ae775 --- /dev/null +++ b/Codes/Code-A4 (Hamming Code).cpp @@ -0,0 +1,103 @@ +#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."<