/* SIMPLE HAMMING CODE*/
#include<stdio.h>
#include<math.h>
#include<ctype.h>
void assign(void);
void compare(void);
void rr1(void);
void rr2(void);
void rr4(void);
void rr8(void);
void print(void);
int i,ch=0;
int h[12],e[12],f[8];
int r1,r2,r4,r8;
void main()
{
printf("\n\n\tHAMMING CODE\n");
while(1)
{
printf("\n1.transmitter side.\t 2.receiver side.\t3.exit\n");
scanf("%d",&ch); //GET THE INPUT OF CHOICE
switch(ch)
{
case 1:
printf("\n hamming code at transmittr side\n"); //TRANSMITTER
printf("enter the 7 bit data:\n");
for(i=7;i>=1;i--)
scanf("%d",&f[i]); //GET THE 7 BIT DATA
assign(); //GENERATE THE HAMMING CODE
printf("HAMMING CODE\n");
print(); //PRINT THE RESULT
rr1();
rr2();
rr4();
rr8();
break;
case 2:
printf("\n hamming code at receiver side\n"); //RECEIVER
printf("enter the receiver side data\n");
for(i=11;i>=1;i--)
scanf("%d",&e[i]); //GET THE RECEIVER SIDE DATA
printf("\n HAMMING CODE IN RECEIVER SIDE\n");
for(i=11;i>=1;i--)
printf("%d",e[i]); //PRINT THE HAMMING CODE
compare(); //COMPARE THE RECEIVER HAMMING CODE AND THE RESULT OF //R1,R2,R4,R8
break;
default:
exit(1);
break;
}
}
}
void print() //DEFINITION OF PRINT() FUNCTION
{
for(i=11;i>=1;i--)
printf("%d",h[i]);//PRINT THE VALUE
}
void assign()//DEFINITION OF ASSIGN() FUNCTION
{ //TO GENERATE THE 11 DIGIT HAMMING CODE
h[11]=f[7];
h[10]=f[6];
h[9]=f[5];
h[8]=0;
h[7]=f[4];
h[6]=f[3];
h[5]=f[2];
h[4]=0;
h[3]=f[1];
h[2]=0;
h[1]=0;
}
void rr1() //DEFINITION OF RR1() FUNCTION
{
printf("\n r1\n");
r1=h[1]+h[3]+h[5]+h[7]+h[9]+h[11]; //ADD THE POSITION 1,3,5,7,9,11
if((r1==6) || (r1==4) || (r1==2) || (r1==0)) //IF IT IS EVEN
h[1]=0; //SET 0
else
h[1]=1; //OTHERWISE SET 1
print(); //CALLING FOR PRINT() FUNCTION
}
void rr2() //DEFINITION OF RR2()
{
printf("\n r2\n");
r2=h[2]+h[3]+h[6]+h[7]+h[10]+h[11]; //ADD THE POSITION 2,3,6,7,10,11
if((r2==6) || (r2==4) || (r2==2) ||(r2==0)) //IF IT IS EVEN SET 0
h[2]=0;
else
h[2]=1; //OTHERWISE SET 1
print();
}
void rr4() //DEFINITION OF RR4()
{
printf("\n r4\n");
r4=h[4]+h[5]+h[6]+h[7]; //ADD THE POSITION 4,5,6,7
if((r4==2) || (r4==0)|| (r4==4)) //IF IT IS EVEN SET 0
h[4]=0;
else //OTHERWISE SET 1
h[4]=1;
print();
}
void rr8() //DEFINITION OF RR8()
{
printf("\n r8\n");
r8=h[8]+h[9]+h[10]+h[11]; //ADD THE POSITION 8,9,10,11
if((r8==4) || (r8==2) || (r8==0)) //IF IT IS EVEN SET 0
h[8]=0;
else /OTHERWISE SET 1
h[8]=1;
print(); //CALLING THE PRINT();
}
void compare() //DEFINITION OF COMPARE()
{
int b=0;
for(i=11;i>=1;i--)
if(h[i]!=e[i])
b=i;
if(b==0)
printf("\n there is no error in receiver side");
else
printf("error is present at %dth bit",b);
}
No comments:
Post a Comment