V can convert ny Binary Number in2 its Gray Code @ nytime.V dn't need 2 start 4m 0. Da algo is:
- Binary to Gray Code
- Start 4m MSB (Left side of the Number)
- g(MSB)=b(MSB)
- g(ith bit)=b(ith bit) XOR b(i+1 th bit)
Binary= 1 0 0 0 1 1 0
|\|\|\|\|\|\|
Gray = 1 1 0 0 1 0 1
- Gray Code to Binary
- Start from MSB
- b(MSB)=g(MSB)
- b(ith bit)=g(ith bit) if the number of 1's preceding g(ith bit) is Even
else b(ith bit)=NOT of g(ith bit)
| Gray | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
| Binary | 1 | 0 | 0 | 0 | 1 | 1 | 0 |
| Comments | MSB | Prec 1 is odd | Prec 1 is Even | Prec 1 is Even | Prec 1 is Even | Prec 1 is odd | Prec 1 is Odd |
// Header Files Inclusion
#include<stdio.h>
#include<conio.h>
#include<string.h>
// User defined Functions Prototype List
void printcenter(char *s,int c); // Function to print text in Center of Screen
void printtabbed(char *s,int t,int c); // Function to print text with preceding space from the left
void bintogray(char *t, char *f); // Function to Convert Binary Number into Gray Code
void graytobin(char *t, char *f); // Function to Convert Graycoded Number into Binary
void getinput(char *t); // Function to take input in formatted way
// Main Function definition
void main()
{
char f[65], t[65];
char ch;
int i;
textmode(C80);
textbackground(3);
_setcursortype(_NOCURSOR);
do{
clrscr();
textbackground(RED);
printcenter("\nBINARY and GRAY Code Interchanger", BROWN);
textbackground(3);
printcenter("\n-=Copy Righted by Arindam Roy=-",DARKGRAY);
printcenter("\nThis can process 64 bit numbers", YELLOW);
printtabbed("\n1. Binary -> Gray", 3, LIGHTBLUE);
printtabbed("\n2. Gray -> Binary", 3, LIGHTBLUE);
printtabbed("\n3. Exit", 3, LIGHTBLUE);
printcenter("\n<Enter Your Choice>", LIGHTGREEN+BLINK);
do
ch=getch();
while(ch<'1'||ch>'3');
if(ch=='1') printcenter("\nBinary -> Gray", LIGHTMAGENTA);
if(ch=='2') printcenter("\nGray -> Binary", LIGHTMAGENTA);
if(ch=='3')
break;
do{
printcenter("\n<Enter The Number>", LIGHTGREEN+BLINK);
printcenter("\n", BLACK);
getinput(t);
i=strlen(t)-1;
for(; i>=0;i--)
if(t[i]!='0' && t[i]!='1')
{
i=66;
break;
}
if(i==66)
printcenter("\n:::Invalid Entry. Reenter the Number:::", RED);
}while(i==66);
if(ch=='1')
bintogray(t,f);
if(ch=='2')
graytobin(t,f);
printcenter("\n The Output \n", MAGENTA+BLINK);
printcenter(f, BLACK);
printcenter("\n\n Do you want to Process another Number? (y/n)", RED);
do ch=getch(); while(toupper(ch)!='Y' && toupper(ch)!='N');
}while (toupper(ch)=='Y');
_setcursortype(_NORMALCURSOR);
textcolor(7);
textbackground(0);
clrscr();
}
// User defined Funcions' Definitions
void printcenter(char *s, int c)
{
int l;
l=strlen(s);
l=(80-l)/2;
gotoxy(l,wherey());
textcolor(c);
cprintf("%s",s);
textcolor(BLACK);
}
void printtabbed(char *s, int t, int c)
{
gotoxy(8*t, wherey());
textcolor(c);
cprintf("%s",s);
textcolor(BLACK);
}
void bintogray(char *t, char *f)
{
int i,l;
l=strlen(t);
f[0]=t[0];
for(i=1;i<l;i++)
{
if(t[i]==t[i-1])
f[i]='0';
else
f[i]='1';
}
f[i]='\0';
}
void graytobin(char *t, char *f)
{
int one=0,i;
f[0]=t[0];
if(f[0]=='1') one=1;
for(i=1; t[i]; i++)
{
if(!(one%2)) f[i]=t[i];
else f[i]=('1'-t[i])+48;
if(t[i]=='1') one++;
}
f[i]='\0';
}
void getinput(char *t)
{
int i=0;
do{
t[i]=getch();
if(t[i]=='\r'&& i) break;
t[i+1]='\0';
printcenter(t,BLACK);
i++;
}while(i<65);
t[i]='\0';
}
Comments