Last active
November 3, 2021 13:56
-
-
Save mukeshgurpude/706c41f5ce9d40a8299e8a9eb936c713 to your computer and use it in GitHub Desktop.
computer-networks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def xor(a: str, b: str) -> str: | |
| return bin(int(a, 2) ^ int(b, 2))[2:].zfill(len(a) - 1) | |
| def generator(data: str, divisor: str) -> str: | |
| initial = data | |
| for i in range(len(divisor)): | |
| if len(data) != len(divisor): data += '0' | |
| if data[0] == '0': | |
| data = xor(data, '0000') | |
| else: | |
| data = xor(data, divisor) | |
| return initial + data | |
| def checker(code: str, divisor: str) -> str: | |
| data, bits = code[:len(divisor)], code[len(divisor):] | |
| for i in range(len(divisor)): | |
| if len(data) != len(divisor): data += bits[i - 1] | |
| if data[0] == '0': | |
| data = xor(data, '0000') | |
| else: | |
| data = xor(data, divisor) | |
| return data == '000' | |
| if __name__ == '__main__': | |
| # Ask for data input | |
| data = input('Enter data: ') | |
| # Check if data is valid, it must be a string of 0 and 1 | |
| if not data.isdigit() or data.count('0') + data.count('1') != len(data): | |
| print('Data must be a string of 0 and 1') | |
| exit() | |
| divisor = '1101' | |
| print('Encoded Data: ', generator(data, divisor)) | |
| recv = input('Enter the received data: ') | |
| if checker(recv, divisor) == True: | |
| print('Data is correct') | |
| else: | |
| print('Data is not correct') |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <cmath> | |
| #include "functions.h" | |
| using namespace std; | |
| int main() { | |
| int m, r, n; | |
| cout << "Enter message length: "; | |
| cin >> m; | |
| // Use find_r function from temp.h to find r | |
| r = find_r(m); | |
| n = pow(2, r); | |
| int data_bits_reversed[n]; | |
| int data_bits[n]; | |
| cout<<"Enter the data: "; | |
| int count = r-1; | |
| for (int i = n - 1; i >= 0; i--) { | |
| if(i == pow(2, count)) { | |
| data_bits_reversed[i] = 0; | |
| count--; | |
| } else if( i <= (m + count)) { | |
| int bit; | |
| cin >> bit; | |
| data_bits_reversed[i] = bit; | |
| } else { | |
| data_bits_reversed[i] = 0; | |
| } | |
| } | |
| for(int i = 0; i < r; i++) { | |
| data_bits_reversed[(int) pow(2, i)] = r_value(n, data_bits_reversed, i); | |
| } | |
| for (int i = 0; i < n; i++){ | |
| data_bits[i] = data_bits_reversed[n - i - 1]; | |
| } | |
| // Print the data | |
| cout <<endl << "Encoded Data: "; | |
| count = 0; | |
| for (int i = 0; i < n; i++) { | |
| cout << data_bits[i]; | |
| if(data_bits[i] == 1) count++; | |
| } | |
| if(count%2 == 0) cout << endl << " (Even) Parity" << endl; | |
| else cout << " (Odd) Parity" << endl; | |
| return 0; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include<iostream> | |
| using namespace std; | |
| bool get_parity_bit(unsigned int number) { | |
| int parity = 0; | |
| while (number > 0){ | |
| parity = parity + number%2; | |
| number = number / 2; | |
| } | |
| return parity%2; | |
| } | |
| int main() { | |
| /* Assumed number in the decimal form | |
| e.g. | |
| number = 7 | |
| */ | |
| unsigned int number; | |
| bool expected_parity; | |
| cout<<"\tPlease enter the parity for this operation (even: 0, odd: 1):\t"; | |
| cin>>expected_parity; | |
| cout<<"\tPlease enter the received data:\t"; | |
| cin>>number; | |
| if( get_parity_bit(number) == expected_parity ) { | |
| cout<<"\t\tNo error in the received bits"<<endl; | |
| }else{ | |
| cout<<"\t\tParity mismatch, please rerequest the data from sender"<<endl; | |
| } | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment