You are on page 1of 5

#include <stdio.h> #include <math.h> #include <string.

h> #define MAXINT 65536 #define SIZE 100 int arr[SIZE][SIZE]; int ele = 0, ind = 0; void summ(int i) { int j = 0; if (isPow2(i)) { arr[ele][ind] = calcPow(i); ind++; } else { j = findLowerOf2(i); arr[ele][ind] = calcPow(j); ind++; i = i - j; summ(i); } } int isPow2(int i) { if (MAXINT % i == 0) return 1; return 0; } int calcPow(int i) { int count = - 1; if (!isPow2(i)) printf("flow error..."); else while (i > 0) { i /= 2; count++; } return count; } int findLowerOf2(int i) { int count = - 1; if (isPow2(i)) return pow(2, i); else while (i > 0) {

i /= 2; count++; }

return pow(2, count); } void callSumm(int i) { ind = 0; summ(i); arr[ele][ind++] = - 1; ele++; } void dieError() { exit(1); } int howManyTimes(int val, int a[]) { int i, count = 0; for (i = 0; a[i] != - 1; i++) if (a[i] == val) count++; return count; } void checkInput(int argc, char str[]) { int i = 0; if (argc < 2) { printf("usage: filename.o 'The code string' "); printf("ex.a.out 110110"); dieError(); } for (i = 0; i < strlen(str); i++) if (!(str[i] == '0' || str[i] == '1')) { printf("Please enter a binary string only....."); dieError(); } }

int calr(int m) { int r = 0; for (r = 0; r <= m; r++) if (m <= pow(2, r) - 1-r) return r; }

int isEven(int i) { return i % 2 == 0; } int main(int argc, char *argv[]) {

int i, j, k = 0, flag, temp; char coded[SIZE]; int len; int m; int r; int count[SIZE][SIZE]; checkInput(argc, argv[1]); m = strlen(argv[1]); r = calr(m); len = m + r;

for (i = 1; i <= len; i++) callSumm(i); for (j = 0, k = 0; j < r; j++) { for (i = 0, k = 0; i < len; i++) if (howManyTimes(j, arr[i])) count[j][k++] = i + 1; count[j][k] = - 1; }

for (i = 0, j = 0; j < len; j++) { if (!isPow2(j + 1)) coded[j] = argv[1][i++]; else coded[j] = 'x'; } for (i = 0; i < r; i++) { for (flag = 0, j = 1; count[i][j] != - 1; j++) { temp = count[i][j] - 1; if (coded[temp] == '1') flag += 1; else if (coded[temp] == '0') flag += 0; }

temp = count[i][0] - 1; if (isEven(flag)) coded[temp] = '0'; else coded[temp] = '1'; } printf("The Hamming coded word for your data is"); for (i = 0; i < len; i++) printf("%c", coded[i]); char res[100]; int length_reciver, flag1 = 0; printf("\nEnter the length rEcived Hamin code:: "); scanf("%d", &length_reciver); if (length_reciver != len) { printf("\n Jaffa Errorrrrrr"); exit(0); } printf("\nEnter the recived Hamming code:"); for (i = 0; i <= length_reciver; i++) scanf("%c", &res[i]);

printf("\nThe lenght of the hamming code:: %d", len); printf("\n"); printf("\nThe haming code recived::");

for (i = 0; i <= length_reciver; i++) { printf("%c", res[i]); }

printf("\n This is the haming code::::"); for (i = 0; i < len; i++) { printf("%c", coded[i]); } if (length_reciver != len) { printf("\nThe reciver code has an error at length it self ha ha ha..."); } else { for (i = 0; i < len; i++) { if (res[i + 1] == coded[i]) { printf("\n this is the check::%c ===== %c", res[i + 1], coded[i]);

flag1 = 0; } else { printf("\n check::%c == %c this is wrong", res[i + 1], coded[i]); flag1 = 1; printf("The reciver code has an error::%d", i); exit(0); } } } if (flag1 == 1) { printf("\n The reciver code has an error::%d", i); } else printf("\n Hurrraa!!!! The reciver code has no error!!"); }

You might also like