Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Beginner
Oct 29, 2015

Generating Gray Codes in C

This is C source code, written in the GCC platform (Ubuntu, 14.04 LTS, Linux).

The code generates Gray Codes. At first a palindrome number is being generated. If we Push n elements in the stack, then it generates a palindrome number of length (2^n) -1. This is the special property. Then it can generate Gray code of maximum n bit. Note that, you have to Push elements sequentially in decreasing order (e.g 4,3,2,1). It generates 121312141213121. It can generate grey code of maximum 4 bit. The code:

/*
	This is a Process of generating Palindrome number from some given numbers.	
	This is a Process of generating Grey code from some given numbers.	
	It actually takes the help of palindrome generation.
*/


#include <stdio.h>
#define max 10
#define maxim 300
#define maxr 550
#define maxc 9

int pushA (int[], int*, int*);
int cpyAC (int[], int[], int*);
int palgen (int[], int[], int[], int*, int*);
void display (int[], int*);
void displayA (int[], int*);
int greycode (int A[maxr][maxc], int*, int*, int[], int*);
void grycddisp (int A[maxr][maxc], int*, int*);

//----------------------------------------------------

int pushA (int a[max], int *top, int *item)
{

    printf("\n\tEnter element: ");
    scanf("%d", &(*item));
    a[++(*top)] = (*item);
    printf("\n\tPush is successful...\n");
    return (*top);

}

//----------------------------------------------------

int cpyAC (int a[max], int c[max], int *top)
{

  int i= -1, j= -1, toc;
  while (j < *top)
    c[++i] = a[++j];
  toc= i;		
  return (toc);

}

//----------------------------------------------------

int palgen (int a[max], int b[maxim], int c[max], int *top, int *toc)

{

  int i, j, k, tob, x;
  j= -1;
  i= (*top);			
  k= (*toc);			

  while (k > -1)
  {

    b[++j] = c[k];

    (*toc)--;
    k= (*toc);

    while (b[j] != a[i])
    {
      i--;
    }

    while (i <= (*top))
    {

      c[++k] = a[++i];
      (*toc)++;
    
      i+= 0;
    }

    (*toc)--;
    k = (*toc);
    k+= 0;
   
  }
  tob= j;			
  return (tob);
  
}

//---------------------------------------------------

int greycode (int A[maxr][maxc], int *row, int *col, int b[maxim], int *tob)
{

printf("\n\n\t\tRow= %d, Col= %d\n\n", *row, *col);					//create co-ordinate
  int i=0, j, value, k;

  while (i < (*row))
  {
    j=(*col);
    while (j >0 )
    {
      j--;
    }
    i++;
  }

					//greycode generation
  i= 0;
  j= (*col);
  while (j > 0)
  {
    A[i][j] = 0;  
    j--;
  }

  while (i< (*row)-1 )
  {
    i++; 
    j=(*col);

    while (j>0)
    {
      A[i][j] = A[i-1][j];
      j--;
    }


    k= (*tob);
    value = b[k];
    (*tob)--;

    j= value;

//   printf("\n\t*tob = %d\tb[k]= %d\tvalue= %d\t\ti= %d\tj= %d", *tob, b[k], value, i,j);

    if (A[i][j] == 0)
      A[i][j] = 1;
    else
      A[i][j] = 0;

    i+=0;
  }

}

//------------------------------------------------------------

void grycddisp (int A[maxr][maxc], int *row, int *col)
{

  int i= 0, j;

  while (i < (*row))
  {
    j=(*col);
    while (j >0 )
    {
      printf("\t\t%d", A[i][j]);
      j--;
    }
    printf("\n");
    i++;
  }

}

//------------------------------------------------------------

void displayA (int a[max], int *top)
{

  int i;
  printf("\n\tYou entered...\n");
  i= (*top);
  while (i >= 0)
  {
    printf("\n\t%d", a[i--]);
  }

}

//---------------------------------------------------

void display (int b[maxim], int *tob)
{

  int i;
  printf("\n\tThe items of Stack are shown...{B}\n");
  i= (*tob);
  printf("\n\n\t\t");
  while (i >= 0)
  {
    printf("%d", b[i--]);
  }
}

//----------------------------------------------------

void main (void)
{

  int a[max], b[maxim], c[max], item=0, top =(-1), toc, tob;
  int A[maxr][maxc], row =1, col =0, bit =0;
  char ch;
  system ("clear");
  printf ("\n\tThis is a Process of generating Grey Code of n-bit.\n\tPlease insert n numbers in decreasing order.\n\te.g 4,3,2,1 for 4-bit grey code.\n\n");

  if (top == -1)
    printf("\n\tInitially Stack is empty...\n");
  
  printf("\n\tYou have to give data, please start insertion.\n\tPress 'y' for insert, 'n' for exit.\n\n");
  ch= getchar();
  while (ch == 'y') 
  {
    top= pushA (a, &top, &item);
    printf("\n\t'y' :insert\n\t'n' :exit.\n");
    getchar();    
    ch= getchar();
    getchar();
    if( top == (max-1) )
    {
      printf("\n\tSorry...\n\tStack is full.\n\tPush operation is not possible...\n\n");
      break;
    }
  }

  system("clear");
  displayA (a, &top);

  if(top == -1)
    printf("\n\tSorry...\n\tStack is empty...\n\tCopy is done...\n\n");
  else
   toc= cpyAC (a, c, &top);			

  tob= palgen (a, b, c, &top, &toc);		

  if(tob == -1)
    printf("\n\tSorry...\n\tStack is empty...\n\n");
  else
    display (b, &tob);

//-------------------------------------------------------

  printf("\n\tEnter the bit number of Grey code: ");
  scanf("%d", &bit);

  col= bit;
  while (bit > 0)
  {
    row= (row*2);
    bit --;
  }
  
  greycode (A, &row, &col, b, &tob);
  grycddisp (A, &row, &col);

  printf ("\n\n\tT  H  A  N  K    Y  O  U\n\n");  

}
Arup Goswami
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date