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