Thursday, 15 September 2011

THE SIMPLE HAMMING CODE


/* 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