elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda para crear tabla de conversión de decimales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda para crear tabla de conversión de decimales  (Leído 2,860 veces)
++c

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Ayuda para crear tabla de conversión de decimales
« en: 21 Mayo 2014, 23:32 pm »

Hola,

el problema que tengo es que no se como acertar en crear un bucle para sacar decimales del 1 al 256 y obtener su binario, octal y hex.

El objetivo final es poder crear una lista para números del 1 al 256 de conversión decimal a binario, decimal a octal y decimal a hex.

Primero he comenzado con la conversión del código de decimal a binario, realizando este código:

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. /* conversor de decimal a binario */
  5.  
  6. int main(){
  7.  
  8.    int numero;
  9.  
  10.    printf("Introduzca un numero en decimal: ");
  11.    scanf("%d",&numero);
  12.    while(numero>=2){
  13.  
  14.        printf("\t%d",numero%2);
  15.        numero/=2;
  16.    }
  17.    printf("\t %d",numero);
  18.    printf("\n");
  19. }

Una vez conseguido la primera parte me propongo a crear la lista del 1 al 256, primero lo he intentado con un bucle for pero me creaba bucle infinito. Después he pasado a usar otro bucle while con variable contador para sacar decimales hasta el límite (256) pero no consigo interpretar como sacar la conversión de un decimal seguido del otro.

Aquí va como he tenido que dejar el código:

Código
  1. #include <stdio.h>
  2.  
  3. /* tabla decimal a binario,octal y hexadecimal */
  4.  
  5. int main(){
  6.  
  7.    int numero,contador=1;
  8.  
  9.    while(contador<=4){
  10.            numero=0;
  11.            numero++;
  12.            while(numero>=2){
  13.                    printf("Decimal %d \t%d",contador,numero%2);
  14.                    numero/=2;
  15.            }
  16.            printf("\t %d",numero);
  17.            contador++;
  18.    }
  19. }
  20.  

Gracias.

Un saludo


En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Ayuda para crear tabla de conversión de decimales
« Respuesta #1 en: 22 Mayo 2014, 03:43 am »

Aquí hay una propuesta que imprime una tabla con los valores en binario de todos los números desde 1 hasta 256:
Código
  1. #include <stdio.h>
  2.  
  3. /* conversor de decimal a binario */
  4. int main() {
  5.  
  6.   int i, numero;
  7.   int base;
  8.  
  9.   printf("decimal\tbinario\n"
  10.          "------------------------\n");
  11.   for ( i = 1; i <= 256; i++ ) {
  12.  
  13.      numero = i;
  14.      printf( "%d\t", numero );
  15.      base = 2;
  16.      while(numero >= 1) {
  17.  
  18.         printf("%d ", numero%base);
  19.         numero/=base;
  20.      }
  21.      printf("\n");
  22.   }
  23. }

Ten en cuenta que el número binario aparece invertido, no se si sea un problema para tí. Si es así, avisa para decirte cómo podrías corregirlo.

Ahora, una propuesta que imprime en binario, octal y hexadecimal.Sólo tienes que cambiar el valor de la variable base, y en el caso de hex, debes imprimir letras cuando corresponda a digitos entre 10 y 15:
Código
  1. #include <stdio.h>
  2.  
  3. /* conversor de decimal a binario */
  4. int main() {
  5.  
  6.   int i, numero, resto;
  7.   int base;
  8.  
  9.   printf("decimal\tbinario\toctal\thex\n"
  10.          "------------------------\n");
  11.   for ( i = 1; i <= 256; i++ ) {
  12.  
  13.      numero = i;
  14.      printf( "%d\t", numero );
  15.  
  16.      /* binario */
  17.      base = 2;
  18.      while(numero >= 1) {
  19.  
  20.         printf("%d", numero%base);
  21.         numero/=base;
  22.      }
  23.  
  24.      /* octal */
  25.      printf("   ");
  26.      base = 8;
  27.      numero = i; /* rescatamos el valor de numero */
  28.      while(numero >= 1) {
  29.  
  30.         printf("%d", numero%base);
  31.         numero/=base;
  32.      }
  33.  
  34.      /* hexadecimal */
  35.      printf("   ");
  36.      base = 16;
  37.      numero = i; /* rescatamos el valor de numero */
  38.      while(numero >= 1) {
  39.  
  40.         resto = numero % base;
  41.         if ( resto < 10 )
  42.            printf("%d", numero%base);
  43.         else
  44.            printf("%c", 'A' + resto - 10 );
  45.         numero/=base;
  46.      }
  47.  
  48.      printf("\n");
  49.   }
  50. }

Aquí la salida con los primeros 20 números, y como puedes ver la tabla sale un poco desordenada. Se requiere hacer más código si quieres embellecerla, jeje

decimal   binario   octal    hex
------------------------
1   1   1   1
2   01   2   2
3   11   3   3
4   001   4   4
5   101   5   5
6   011   6   6
7   111   7   7
8   0001   01   8
9   1001   11   9
10   0101   21   A
11   1101   31   B
12   0011   41   C
13   1011   51   D
14   0111   61   E
15   1111   71   F
16   00001   02   01
17   10001   12   11
18   01001   22   21
19   11001   32   31
20   00101   42   41


En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda para crear tabla de conversión de decimales
« Respuesta #2 en: 22 Mayo 2014, 08:39 am »

Con estructuras, uniones y desplazamientos binarios se puede conseguir el mismo efecto y sin hacer apenas operaciones... aunque lo mismo se sale un poco de lo que pretendía tu profesor con la práctica :)

Código
  1. typedef union
  2. {
  3.  int entero;
  4.  struct
  5.  {
  6.    unsigned short : 6;
  7.    unsigned short valor : 3;
  8.  } octal;
  9.  
  10.  struct
  11.  {
  12.    unsigned short : 4;
  13.    unsigned short valor: 4;
  14.  } hex;
  15.  
  16.  struct
  17.  {
  18.    unsigned short : 7;
  19.    unsigned short valor: 1;
  20.  } bin;
  21. } conversor;
  22.  
  23. int main( )
  24. {
  25.  int numero;
  26.  
  27.  printf( "Introduce un numero: " );
  28.  scanf( "%d", &numero );
  29.  
  30.  conversor conver;
  31.  conver.entero = numero;
  32.  
  33.  printf( "octal: " );
  34.  int i;
  35.  for ( i = 0; i < 3; i++ ) // 128 requiere 3 digitos hexadecimales
  36.  {
  37.    printf( "%d", conver.octal.valor );
  38.    conver.entero <<= 3;
  39.  }
  40.  printf ("\n" );
  41.  
  42.  conver.entero = numero;
  43.  printf( "hexadecimal: " );
  44.  for ( i = 0; i < 2; i++ ) // 128 requiere 2 digitos hexadecimales
  45.  {
  46.    printf( "%x", conver.hex.valor );
  47.    conver.entero <<= 4;
  48.  }
  49.  printf( "\n" );
  50.  
  51.  conver.entero = numero;
  52.  printf( "binario: " );
  53.  for ( i = 0; i < 8; i++ ) // 128 requiere 8 digitos binarios
  54.  {
  55.    printf( "%d", conver.bin.valor );
  56.    conver.entero <<= 1;
  57.  }
  58.  printf( "\n" );
  59. }

Al fin y al cabo el ordenador hace muchas veces buena parte del trabajo por nosotros.
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Ayuda para crear tabla de conversión de decimales
« Respuesta #3 en: 22 Mayo 2014, 18:36 pm »

¿Por qué me siento algo aludido con el mensaje anterior?, Jaja, broma.

Bueno, traté de dar una solución con métodos elementales, ya ese era más o menos el estilo del programa originalmente presentado. Pero esperemos que al autor aclare qué tipo de programación está dispuesto a usar .....

Y como decimos los programadores, entre más "bajo" o elemental el nivel que usemos, más trabajo para uno  ;D
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Ayuda para crear tabla de conversión de decimales
« Respuesta #4 en: 22 Mayo 2014, 18:57 pm »

Bueno, traté de dar una solución con métodos elementales, ya ese era más o menos el estilo del programa originalmente presentado.

En ese caso pongo otra opción muy sencilla parecida al de yoel_alejandro

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define HEX "0123456789ABCDEF"
  5.  
  6. int main(void)
  7. {
  8.    char hex[20] = "";
  9.    int dec = 255, temp = dec, fact = 1, resto = 0, i;
  10.  
  11.    for(; dec; fact *= 10, dec = dec / 2)
  12.       resto += (dec % 2) * fact;
  13.    printf("Binario: %d\n", resto);
  14.  
  15.    dec = temp, resto = 0, fact = 1;
  16.  
  17.    for(; dec; fact *= 10, dec = dec / 8)
  18.       resto += (dec % 8) * fact;
  19.    printf("Octal: %d\n", resto);
  20.  
  21.    dec = temp;
  22.  
  23.    for(i = 0; dec;  i++, dec = dec / 16)
  24.       hex[i] = HEX[(dec % 16)];
  25.    printf("Hexadecimal: %s\n", strrev(hex));
  26.  
  27.    return 0;
  28. }
  29.  

Saludos
« Última modificación: 22 Mayo 2014, 19:02 pm por Blaster » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda para crear tabla de conversión de decimales
« Respuesta #5 en: 22 Mayo 2014, 20:38 pm »

¡Que manía con obtener las cadenas a la inversa y luego tener que darles la vuelta!

¡¡ ¡Es broma !!!, ¿ehhhh?.

Pero esa es en esencia la diferencia sustancial con códigos anteriores: calculo previamente la longitud de la cadena contenedora del número en la base en cuestión y luego la relleno al revés. Además de otras sutiles diferencias:

Código
  1. #include <stdio.h>
  2.  
  3. #define DIGITOS   "0123456789ABCDEF"/*"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"*/
  4.  
  5. int main(){
  6.  int i,n_digitos,numero,base,cociente,num;
  7.  char cadena[11];
  8.  for (numero=1;numero<=256;numero++){
  9.    printf("\n%3d",numero);
  10.    for(base=2;base<=14/*37*/;base+=6/*base++*/){
  11.      if (base==14)
  12.        base=16;
  13.      cociente=num=numero;
  14.      for (n_digitos=0;num;n_digitos++,num/=base);
  15.      for (i=n_digitos-1;cociente;i--,cociente/=base)
  16.        cadena[i]=DIGITOS[cociente % base];
  17.      cadena[n_digitos]='\0';
  18.      printf("  en BASE (%d)=%-9s ",base,cadena);
  19.    }
  20.  }
  21.  return 0;
  22. }

Y creo que se ve que el código "estaba" para otra cosa. Concreta mente para obtener un número decimal en las bases de 2 a 36, cosa que se consigue activando lo que está desactivado, pero ese ya sería otro problema.

Y aquí la salida para los veinte últimos:

Citar

236  en BASE (2)=11101100    en BASE (8)=354         en BASE (16)=EC
237  en BASE (2)=11101101    en BASE (8)=355         en BASE (16)=ED
238  en BASE (2)=11101110    en BASE (8)=356         en BASE (16)=EE
239  en BASE (2)=11101111    en BASE (8)=357         en BASE (16)=EF
240  en BASE (2)=11110000    en BASE (8)=360         en BASE (16)=F0
241  en BASE (2)=11110001    en BASE (8)=361         en BASE (16)=F1
242  en BASE (2)=11110010    en BASE (8)=362         en BASE (16)=F2
243  en BASE (2)=11110011    en BASE (8)=363         en BASE (16)=F3
244  en BASE (2)=11110100    en BASE (8)=364         en BASE (16)=F4
245  en BASE (2)=11110101    en BASE (8)=365         en BASE (16)=F5
246  en BASE (2)=11110110    en BASE (8)=366         en BASE (16)=F6
247  en BASE (2)=11110111    en BASE (8)=367         en BASE (16)=F7
248  en BASE (2)=11111000    en BASE (8)=370         en BASE (16)=F8
249  en BASE (2)=11111001    en BASE (8)=371         en BASE (16)=F9
250  en BASE (2)=11111010    en BASE (8)=372         en BASE (16)=FA
251  en BASE (2)=11111011    en BASE (8)=373         en BASE (16)=FB
252  en BASE (2)=11111100    en BASE (8)=374         en BASE (16)=FC
253  en BASE (2)=11111101    en BASE (8)=375         en BASE (16)=FD
254  en BASE (2)=11111110    en BASE (8)=376         en BASE (16)=FE
255  en BASE (2)=11111111    en BASE (8)=377         en BASE (16)=FF
256  en BASE (2)=100000000   en BASE (8)=400         en BASE (16)=100


Y un fuerte saludo para yoel_alejandro del que hace semanas que no sabíamos nada. Se te ha echado de menos campeón.

¡¡¡¡ Saluditos! ..... !!!!


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crear una tabla.
Programación Visual Basic
777Rubenix777 4 2,058 Último mensaje 7 Julio 2010, 15:01 pm
por ssccaann43 ©
[Ayuda]Crear Tabla Relacionadas
PHP
rolly21102 1 4,648 Último mensaje 2 Febrero 2011, 07:15 am
por zarkiel
ayuda con pseudocodigo, crear tabla de multplicar « 1 2 3 »
Programación C/C++
attackers 23 11,737 Último mensaje 28 Abril 2011, 04:55 am
por leogtz
[Ayuda] Matriz para rellenar una tabla
Programación C/C++
sora_ori 2 3,570 Último mensaje 18 Enero 2013, 19:47 pm
por leosansan
Conversión .sec a .py para tabla PAT
Scripting
LesterVynn 0 2,017 Último mensaje 19 Agosto 2015, 21:12 pm
por LesterVynn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines