Grejov kod

stanje
Zatvorena za pisanje odgovora.
Pozdrav ljudi,može li mi ko objasniti kako se konvertuje dekadni broj u Grejov kod?

Prvo konvertuj u BCD, a onda BCD u Grejov kod.
Ako ne znaš kako da uradiš neku od ovih konverzija, pitaj, pa ću ti objasniti.
Ukoliko ti treba samo konvertor:
Kod:
/////////////////////////////////////////////////////////////
////     Coverting a decimal number to Gray code       /////
///////////////////////////////////////////////////////////



# include<stdio.h>
# include<conio.h>
# include<stdlib.h>
static int a[8],b[8],k=1,i;
void main()
{   int n1;
	 clrscr();
	 printf("Enter any Numbers :");
	 scanf("%d",&n1);
	 while(n1!=0)   /* converting number to its binary equivalent */
	 {  a[i]=n1 % 2;
		 n1/=2;
		 i++;
	 }
	/* printing binary equivalent */
		 printf("\nThe binary code of the given number is :");
	 for(i=7;i>=0;i--)
	 printf("%d",a[i]);


	 /* gray code conversion */
	 b[0]=a[7];

	 for(i=7;i>=0;i--)
	 {  if(a[i]==0 && a[i-1]==0)
		 b[k]=0;
		 if(a[i]==1 && a[i-1]==1)
		 b[k]=0;
		 if(a[i]==0 && a[i-1]==1)
		 b[k]=1;
		 if(a[i]==1 && a[i-1]==0)
		 b[k]=1;
		 k++;
	 }

	 /* printing the gray code */
	 printf("\nThe gray code of the given number is :");
	 for(i=0;i<8;i++)
	 printf("%d",b[i]);
}

Kod nije moj, a nemam ovde Visual Studio da ga testiram. Ukoliko ne radi, javi, pa ću pogledati večeras.
 
Poslednja izmena:
E ipak ne treba.

Našao sam na netu,na sajtu jednog fakulteta ima nešto malo o sistemima,pa sam vidio kako se to radi.

Evo mog koda za Pascal,taman mi trebalo za jedan zadatak.

Kod:
program koder;
 var
 t,grej,bin:string;
zb,l,g,br,i,j,n,k,x,x1:longint;
 a:longint;
  begin
   writeln ('Prirodan broj koji treba konvertovati?');
   readln (n);
   writeln ('Koliko bitova?');
   readln (k);
    repeat
    if n>=2 then br:=n mod 2      {konverzija dekadnog u binarni}
    else br:=n;
    n:=n div 2;
    str(br,t);
      bin:=t+bin;                {ide t+bin,jer se rezultat zapisuje od dole,naprema gore}
     until n=0;
 l:=length(bin);
  for i:=1 to l do
   begin
    if i>1 then
     begin
    val(bin[i],x,a);               {konverzija stringa u broj}
    val(bin[i-1],x1,a);
    zb:=x+x1;
    if zb=1 then t:='1'               {granicni slucajevi}
    else
    if zb=0 then t:='0'
    else
    if zb=2 then t:='0';
    grej:=grej+t;
    end;
    if i=1 then grej:=grej+bin[i];
     end;
  l:=length(grej);                            {dodavanje nula,odnosno bitova ako nema dovoljno}
  if l<k then
   begin
    repeat
    grej:='0'+grej;
    l:=length(grej);
    until l=k;
    end;
    writeln (grej);
    readln;
  end.
 
Poslednja izmena:
Pa naravno,vidiš da sam gore kod napisao.


Uglavnom,ako nekoga zanima.Evo ja ću da objasnim.


Npr,imamo broj 19(dekadni),i treba ga pretvoriti u Grejev kod sa 5 bita.

19 MOD 2 =1
9 MOD 2 =1
4 MOD 2 = 0
2 MOD 2 = 0
1 MOD 2 = 1

Sad to pročitate od dole prema gore,i dobije se ovo:

10011

E sad kako pretvoriti binarni u Grejev?Lako...
Spustite prvu cifru(radite s lijeva,prema desno).
I počinjete da sabirate cifru koja se nalazi za jedno mjesto u desno,sa onom što se nalazi lijevo:

1 (spuštena)
0(dakle 0 desno od prve cifre)+1(lijevo cifra,u ovom slučaju to je prva cifra)=1
0(cifra desno od prethodne nule)+0(prethodna nula)=0
1(cifra desno od prethodne cifre)+0(prethodna cifra)=1
1(cifra desno od prethodne cifre)+1(prethodna cifra)=0
Kod:
Dakle 1+1=0!
      0+0=0!
      1+0=1!

E sad,pročitate ovo iznad ovog objašnjenja,od goreprema dole.

Dobijete:

11010(Grej)
 
stanje
Zatvorena za pisanje odgovora.

Back
Top