Autor
|
Tema: Ayuda para crear tabla de conversión de decimales (Leído 2,860 veces)
|
++c
Desconectado
Mensajes: 29
|
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: #include <stdio.h> /* conversor de decimal a binario */ int main(){ int numero; printf("Introduzca un numero en decimal: "); while(numero>=2){ numero/=2; } }
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: #include <stdio.h> /* tabla decimal a binario,octal y hexadecimal */ int main(){ int numero,contador=1; while(contador<=4){ numero=0; numero++; while(numero>=2){ printf("Decimal %d \t%d",contador ,numero %2); numero/=2; } contador++; } }
Gracias. Un saludo
|
|
|
En línea
|
|
|
|
Yoel Alejandro
|
Aquí hay una propuesta que imprime una tabla con los valores en binario de todos los números desde 1 hasta 256: #include <stdio.h> /* conversor de decimal a binario */ int main() { int i, numero; int base; "------------------------\n"); for ( i = 1; i <= 256; i++ ) { numero = i; base = 2; while(numero >= 1) { numero/=base; } } }
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: #include <stdio.h> /* conversor de decimal a binario */ int main() { int i, numero, resto; int base; printf("decimal\tbinario\toctal\thex\n" "------------------------\n"); for ( i = 1; i <= 256; i++ ) { numero = i; /* binario */ base = 2; while(numero >= 1) { numero/=base; } /* octal */ base = 8; numero = i; /* rescatamos el valor de numero */ while(numero >= 1) { numero/=base; } /* hexadecimal */ base = 16; numero = i; /* rescatamos el valor de numero */ while(numero >= 1) { resto = numero % base; if ( resto < 10 ) else printf("%c", 'A' + resto - 10 ); numero/=base; } } }
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
Mensajes: 1.248
|
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 typedef union { int entero; struct { unsigned short : 6; unsigned short valor : 3; } octal; struct { unsigned short : 4; unsigned short valor: 4; } hex; struct { unsigned short : 7; unsigned short valor: 1; } bin; } conversor; int main( ) { int numero; printf( "Introduce un numero: " ); conversor conver; conver.entero = numero; int i; for ( i = 0; i < 3; i++ ) // 128 requiere 3 digitos hexadecimales { printf( "%d", conver. octal. valor ); conver.entero <<= 3; } conver.entero = numero; for ( i = 0; i < 2; i++ ) // 128 requiere 2 digitos hexadecimales { printf( "%x", conver. hex. valor ); conver.entero <<= 4; } conver.entero = numero; for ( i = 0; i < 8; i++ ) // 128 requiere 8 digitos binarios { printf( "%d", conver. bin. valor ); conver.entero <<= 1; } }
Al fin y al cabo el ordenador hace muchas veces buena parte del trabajo por nosotros.
|
|
|
En línea
|
|
|
|
Yoel Alejandro
|
¿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
|
|
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
Blaster
Desconectado
Mensajes: 190
|
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#include <stdio.h> #include <string.h> #define HEX "0123456789ABCDEF" int main(void) { char hex[20] = ""; int dec = 255, temp = dec, fact = 1, resto = 0, i; for(; dec; fact *= 10, dec = dec / 2) resto += (dec % 2) * fact; printf("Binario: %d\n", resto ); dec = temp, resto = 0, fact = 1; for(; dec; fact *= 10, dec = dec / 8) resto += (dec % 8) * fact; dec = temp; for(i = 0; dec; i++, dec = dec / 16) hex[i] = HEX[(dec % 16)]; printf("Hexadecimal: %s\n", strrev (hex )); return 0; }
Saludos
|
|
« Última modificación: 22 Mayo 2014, 19:02 pm por Blaster »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
¡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: #include <stdio.h> #define DIGITOS "0123456789ABCDEF"/*"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"*/ int main(){ int i,n_digitos,numero,base,cociente,num; char cadena[11]; for (numero=1;numero<=256;numero++){ printf("\n%3d",numero); for(base=2;base<=14/*37*/;base+=6/*base++*/){ if (base==14) base=16; cociente=num=numero; for (n_digitos=0;num;n_digitos++,num/=base); for (i=n_digitos-1;cociente;i--,cociente/=base) cadena[i]=DIGITOS[cociente % base]; cadena[n_digitos]='\0'; printf(" en BASE (%d)=%-9s ",base,cadena); } } return 0; }
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: 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Crear una tabla.
Programación Visual Basic
|
777Rubenix777
|
4
|
2,058
|
7 Julio 2010, 15:01 pm
por ssccaann43 ©
|
|
|
[Ayuda]Crear Tabla Relacionadas
PHP
|
rolly21102
|
1
|
4,648
|
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
|
28 Abril 2011, 04:55 am
por leogtz
|
|
|
[Ayuda] Matriz para rellenar una tabla
Programación C/C++
|
sora_ori
|
2
|
3,570
|
18 Enero 2013, 19:47 pm
por leosansan
|
|
|
Conversión .sec a .py para tabla PAT
Scripting
|
LesterVynn
|
0
|
2,017
|
19 Agosto 2015, 21:12 pm
por LesterVynn
|
|