jueves, 3 de febrero de 2011

Método para convertir un número en binario a GRAY y viceversa


Método para convertir un número en binario a GRAY


Para convertir un número binario a código Gray, se sigue el siguiente método:

1. Se suma el número en binario con el mismo, pero el segundo sumando debe correrse una cifra a la derecha. Ver el gráfico.
2. Se realiza una suma binaria cifra con cifra sin tomar en cuenta el acarreo y se obtiene la suma total.
3. Al resultado anterior se le elimina la ultima cifra del lado derecho (se elimina el cero que está en rojo), para obtener el código GRAY.
Ejercicios de binario a gray
(1010)2 convertir a gray
1010
1010
----
1111
 
(110101010001)2 convertir a gray
 
110101010001
110101010001
------------
101111111001
 
(101011)2 convertir a gray
 
101011
101011
--------
111110

Método para convertir código GRAY a binario

Para convertir de códio Gray a Binario, se utiliza un método similar, pero con algunas diferencias. Se aplican las sigientes reglas:
·  El bit más significativo(el más a la izquierda) es el código binario es el mismo que el bit correspondiente en el codigo Gray.
·  Sume cada bit generado del codigo binario al bit del codigo Gray en la siguiente poscion adyacente. Descarte acarreos.
Ejemplo:
Paso 1. El digito del codigo binario mas a la izquierda es el mismo que el digito del codigo Gray mas a la izquierda.
1
1
0
1
1
Gray
1




Binario
Paso 2. Sume el ultimo bit del codigo binario que se acaba de generar al bit del codigo Gray en la siguiente posicion. Descarte acarreos.(En negrilla bit que se suman).
1
1
0
1
1
Gray
1
0



Binario
Paso 3. Sume el ultimo bit del codigo binario que se acaba de generar al bit del codigo Gray en la siguiente posicion.
1
1
0
1
1
Gray
1
0
0


Binario
Paso 4. Sume el ultimo bit del codigo binario que se acaba de generar al bit del codigo Gray en la siguiente posicion.
1
1
0
1
1
Gray
1
0
0
1

Binario

Paso 5. Sume el ultimo bit del código binario que se acaba de generar al bit del código Gray en la siguiente posición. Descarte acarreos.
1
1
0
1
1
Gray
1
0
0
1
0
Binario

La conversión ha sido completada; el codigo binario es 10010
Ejercicios
1001 gray= (1110)2
10101111 gray= (11001010)2

bibliografia
http://html.rincondelvago.com/codigos-gray_1.html
 http://www.todomonografias.com/electronica-y-electricidad/codigos-gray/

3 comentarios:

  1. //un metodo en programacion en c++ seria
    #include
    #include
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;

    void ingresarNumero(int &nro);
    void obtenerDigitos(int nro,int a[50], int &n);
    void convertirNumero(int a[50], int n, int b[50], int &m);
    void mostrarGray(int b[50], int m);

    int main( ) {

    int nro,a[50],b[50],n=0,m=1,x;
    //b[m] empieza en 1 porque b[0] es 1 por defecto

    ingresarNumero(nro);
    obtenerDigitos(nro,a,n);
    convertirNumero(a,n,b,m );
    mostrarGray(b,m);
    system ("pause");
    return 0;
    }
    void ingresarNumero(int &nro){
    cout<<"Ingrese el n\xa3mero binario: ";cin>>nro;


    }
    void obtenerDigitos(int nro, int a[50], int &n){
    do{
    a[n]=nro%10;
    nro=nro/10;
    n++;
    }while(nro>0);
    }
    void convertirNumero(int a[50], int n, int b[50], int &m){
    b[0]=a[n-1];
    for(int j=n-1;j>0;j=j-1){
    if(a[j]==a[j-1]){
    b[m]=0;
    }else{
    b[m]=1;
    }
    m++;
    }
    }
    void mostrarGray(int b[50], int m){
    cout<<"Conversi\xa2n a Gray : ";
    for(int j=0;j<=m-1;j++){
    cout<<b[j];
    }
    cout<<endl<<endl;

    }

    ResponderEliminar
  2. Aquí el código para convertir de gray a binario, muy buen aporte Carlos, me sirvió para hacer esto (y)

    #include

    using namespace std;

    void ingresarNumero(int &nro);
    void obtenerDigitos(int nro,int a[50], int &n);
    void convertirNumero(int a[50], int n, int b[50], int &m);
    void mostrarGray(int b[50], int m);

    int main( ) {

    int nro,a[50],b[50],n=0,m=1,x;
    //b[m] empieza en 1 porque b[0] es 1 por defecto

    ingresarNumero(nro);
    obtenerDigitos(nro,a,n);
    convertirNumero(a,n,b,m );
    mostrarGray(b,m);
    return 0;
    }
    void ingresarNumero(int &nro){
    cout<<"Ingrese el n\xa3mero gray: ";cin>>nro;


    }
    void obtenerDigitos(int nro, int a[50], int &n){
    do{
    a[n]=nro%10;
    nro=nro/10;
    n++;
    }while(nro>0);
    }
    void convertirNumero(int a[50], int n, int b[50], int &m){
    b[0]=a[n-1];
    for(int j=n-1;j>0;j=j-1){
    if(a[j]==a[j-1]){
    b[m]=0;
    }else{
    b[m]=1;
    }
    a[j-1]=b[m]; // AQUI ESTA EL EXTRA!
    m++;
    }
    }
    void mostrarGray(int b[50], int m){
    cout<<"Conversi\xa2n a binario : ";
    for(int j=0;j<=m-1;j++){
    cout<<b[j];
    }
    cout<<endl<<endl;

    }

    ResponderEliminar
  3. Hola Carlos y KevRamos buen dia, muchas gracias por su aporte es importante para todos nosotros tener esta utilidad en caso de querer hacer un proyecto o practica sin necesidad de utilizar la logica TTL de hace algunas decadas. saludos

    ResponderEliminar