Autor Tema: rutina de conversion de base10 a base4  (Leído 1415 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
rutina de conversion de base10 a base4
« en: 06 de Abril de 2017, 21:43:59 »
saludos.
hice una rutina de conversion de decimal a base cuatro. a ver si me dan el visto bueno, o tal vez alguien encuentra un bug

void convertir_decimal_base4(int Num, int *n1,int *n2,int *n3,int *n4){
   *n1=(num%4);
   num=num/4;
   
   *n2=(num%4);
   num=num/4;
   
   *n3=num%4;
   num=num/4;
   *n4=num;
   printf(lcd_putc,"%u%u%u%u",*n4,*n3,*n2,*n1);
}
 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:rutina de conversion de base10 a base4
« Respuesta #1 en: 07 de Abril de 2017, 00:05:54 »
Siempre suponiendo que num sea un numero de 8 bits no veo NINGUN problema.

Ahora no se que sera mas rapido (si el compilador se da cuenta que  el modulo es producto de 2 y si la division tambien), todo depende del compilador como desea hacerlo pero podes hacerlo tambien asi:

Código: C
  1. void convertir_decimal_base4(int num, int *n1,int *n2,int *n3,int *n4){
  2.  *n1=num&0x3;
  3.    num>>= 2;
  4.  *n2=num&0x3;
  5.    num>>= 2;
  6.  *n3=num&0x3;
  7.    num>>= 2;
  8.  *n4=num&0x3;
  9. }

Al menos asi no se va a pasar si es que el int es de 16 bits, depende del compilador que sea de 8 o 16.
La otra es usar un array, en ves de 4 argumentos, es mas rapido para pasar, ya que pasas solo un puntero y no 4.

Código: C
  1. void convertir_decimal_base4(int num, int *n){
  2.   int i;
  3.   for(i = 0; i<4; i++)
  4.   {
  5.      n[i]=num&0x3;
  6.      num>>= 2;
  7.   }
  8. }

o

Código: C
  1. void convertir_decimal_base4(int num, int *n){
  2.   int i;
  3.   for(i = 0; i<4; i++)
  4.   {
  5.      *n=num&0x3;
  6.      n++;
  7.      num>>= 2;
  8.   }
  9. }

o

Código: C
  1. void convertir_decimal_base4(int num, int *n){
  2.   num &= 0xFF;        //Proteccion
  3.   while(num!=0)
  4.   {
  5.      *n=num&0x3;
  6.      n++;
  7.      num>>= 2;
  8.   }
  9. }

Te lo dejo a tu gusto.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:rutina de conversion de base10 a base4
« Respuesta #2 en: 07 de Abril de 2017, 09:27:13 »
 :shock: :shock: :shock: :shock:
ok, me quedo con el segundo ejemplo. que hariamos sin los punteros.

saludos

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:rutina de conversion de base10 a base4
« Respuesta #3 en: 07 de Abril de 2017, 09:50:09 »
killerjc muchas gracias.
una consulta, es posible agrupar varios pines de diferentes puertos en un solo vector o estructura?

gracias

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:rutina de conversion de base10 a base4
« Respuesta #4 en: 07 de Abril de 2017, 12:21:31 »
he podido agruparlo de esta manera
Void setear_bin_salida(int i,int1 j){
   switch(i){
      case 0: BIN_SALIDA1=j;break;
      case 1: BIN_SALIDA2=j;break;
      case 2: BIN_SALIDA3=j;break;
      case 3: BIN_SALIDA4=j;break;
      case 4: BIN_SALIDA5=j;break;
      case 5: BIN_SALIDA6=j;break;
      case 6: BIN_SALIDA7=j;break;
      case 7: BIN_SALIDA8=j;break;
      case 8: BIN_SALIDA9=j;break;
      case 9: BIN_SALIDA10=j;break;
      case 10: BIN_SALIDA11=j;break;
`}
claro BIN_SALIDA estan renombrados con #bit=puerto.0

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:rutina de conversion de base10 a base4
« Respuesta #5 en: 07 de Abril de 2017, 12:48:47 »
No creo que exista otra solución mas que la que ya implementaste.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:rutina de conversion de base10 a base4
« Respuesta #6 en: 07 de Abril de 2017, 13:37:46 »
ya ok, se agradece KILLERJC, ademas con esa funcion me va bien