SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: ecolve en Jueves 31 de Marzo de 2005, 02:53

Título: Conversiones
Publicado por: ecolve en Jueves 31 de Marzo de 2005, 02:53
:comp:
Hola soy estudiante de informatica y estoy haciendo dos programas....uno que me convierta de hexadecimal a decimal y el otro de binario a decimal.....estoy como enrredado en como hacer el proceso para convertirlo,aunque me han dicho que para hacer estos programas existe una funcion especial...la verdad que no se y espero que alquien pueda ayudarme..no siendo mas me despido y agradezco la ayuda que me puedan dar....

 :suerte:

 :gracias:
Título: Re: Conversiones
Publicado por: JuanK en Jueves 31 de Marzo de 2005, 04:38
printf
atoi
itoa
Título: Re: Conversiones
Publicado por: CiRRuS en Viernes 1 de Abril de 2005, 00:25
itoa no es estandar, te tocará implementarla si trabajas con linux, por ejemplo.

No conozco una función específica, pero la implementación de esas funciones no tiene ningún misterio. ¡Animo! y si tienes algun problema no dudes en preguntar.

Nos vemos :hola:
Título: Re: Conversiones
Publicado por: JuanK en Viernes 1 de Abril de 2005, 01:03
Cita de: "CiRRuS"
itoa no es estandar, te tocará implementarla si trabajas con linux, por ejemplo.

No conozco una función específica, pero la implementación de esas funciones no tiene ningún misterio. ¡Animo! y si tienes algun problema no dudes en preguntar.

Nos vemos :hola:
pero recuerdo haberlas usado bajo inux red hat 9  :blink:
o no?  :o
Título: Re: Conversiones
Publicado por: ecolve en Viernes 1 de Abril de 2005, 01:22
:comp:

 :ayuda:

pero entonces para convertir de hexa a decimal tengo que darle un valor de constante a los valores de 10-11-12-13-14-15 que son A-B-C-D-E-F??? o como hago la operacion para que me muestre el numero en decimal........al igual que el de binario,ya lo hice para que me convierta de decimal a binario pero lo contrario no fui capaz,tengo que aplicar algun ciclo que me evalue el numero binario que digito????...sigo intentando y si me pueden colaborar lo agradeceria...

 :gracias:

 :suerte:
Título: Re: Conversiones
Publicado por: © Jonathan © en Viernes 1 de Abril de 2005, 06:18
Si mal no recuerdo en la seccion Fuentes de la Web de Solocodigo :P un programador y usuario de esta comunidad dejo a disposicion los fuentes de sus programitas de conversiones :comp: . Talves te pueda servir :lightsabre: . Saludos :whistling:
Título: Re: Conversiones
Publicado por: carmamezo en Viernes 1 de Abril de 2005, 10:44
Hola a todos,
pues la verdad es que pasar de hexadecimal a decimal es mucho más fácil de lo que parece....  Tú único problema es el binario, recuerda que cualquier dato se guarda en tu PC en binario, por tanto lo único que necesitas es poder recoger y sacar los nºs en decimal, hexadecimal y binario.
Muy bien, para poder recoger un nº en hexadecimal y convertirlo a decimal lo único que tienes que hacer es lo sigte:
Código: Text
  1.  
  2. int a;
  3. printf("\nIntroduce un numero en hexadecimal: ");
  4. scanf("%x",&a);//lo recoges en hexadecimal
  5. printf("\nEl numero %x en decimal es: %d",a,a);
  6.  
  7.  
Pues ya ves que no tiene ningún misterio, ahora para pasar de decimal a hexadecimal, es igual pero al revés:
Código: Text
  1.  
  2. int a;
  3. printf("\nIntroduce un numero en decimal: ");
  4. scanf("%d",&a);
  5. printf("\nEl numero %d en hexadecimal es: %x",a,a);
  6.  
  7.  
Si lo que quieres es printear los numeros hexadecimales en mayúsculas: A en vez de a.  Lo que tienes que hacer es cambiar el %x por %X.

Y ya está, tan fácil como eso.

El binario es más complicado, pues no hay ningún %b que printee y escanee en binario.... Al menos eso creo.  Por tanto deberías hacer la operación paso a paso por tus medios.  Los operadores shift (>>,<<) que te permiten correr bits de una vble y los operadores AND (&) y OR (|) que te permiten hacer operaciones lógicas a nivel de bit dentro de una vble te serán de gran ayuda sin duda.  El resto te lo dejo a ti.
Un saludo.
Título: Re: Conversiones
Publicado por: © Jonathan © en Viernes 1 de Abril de 2005, 11:06
Tambien puede usar una estructura con una variable char y una UNION de ese char a ocho variables que corresponderian a cada bit, como sabemos la union utiliza la memoria de la variable mas grande(char=1byte) para almacenar otras variables.. si reservamos para un char en la union podriamos recorrerle cada bit, me parecio ver algo en internet cuando buscaba acerca de uniones.. asi obtendria el valor de cada bit del caracter que necesite. Saludos
Título: Re: Conversiones
Publicado por: sés en Viernes 1 de Abril de 2005, 12:01
Código: Text
  1. #ifdef CODIF_FAST
  2.     static char _cHex[16] = {
  3.         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  4.         'A', 'B', 'C', 'D', 'E', 'F'
  5.     };
  6.     #define HexToAsc( d ) _cHex[d]   // Hexadecimal To Ascii
  7.  
  8.     static BYTE _dHex[23] = {
  9.         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // '0'-'9'  (48-57)
  10.         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,                   // KKKKKKK  (58-64)
  11.         0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f                          // 'A'-'F'  (65-70)
  12.     };
  13.     #define AscToHex( c ) ((int)_dHex[(c)-'0'])  // Ascii To Hexadecimal
  14. #else
  15.     #define HexToAsc( d ) ((char)(((d)&#60;10) ? ('0'+(d)) : ('A'+(d)-10)))
  16.     #define AscToHex( c ) ((int)(((c)&#60;'A') ? ((c)-'0') : ((c)-'A'+10)))
  17. #endif  // FAST
  18.  
Título: Re: Conversiones
Publicado por: Blag en Viernes 1 de Abril de 2005, 16:24
Hacer un Binario a Decimal es bastante sencillo....... :)

Simplemente que hacer lo mismo que harías en una hoja de papel....Por ejemplo....

Citar
101001 --> 41.

En un papel lo harías así.....

Código: Text
  1.  
  2. 1x2(5) + 0x2(4) + 1x2(3) + 0x2(2) + 0x2(1) + 1x2(0)
  3.  
  4.  

Los números que están entre (), es el número al que tienes que elevar el 2.

Simplemente, cuenta cuantos dígitos tiene la cadena binaria. Multiplicas cada digito por 2 elevado a la potencia que le corresponde....los sumas....y problema solucionado  :lol:

Es incluso más sencillo que el Decimal a Binario  :comp:

Saludos,

Blag  :devil:
Título: Re: Conversiones
Publicado por: rir3760 en Viernes 1 de Abril de 2005, 17:54
Si tu asignatura te permite utilizar funciones de la biblioteca estandard entonces puedes convertir la representacion en cadena de un numero en base 2 (binario) a base 10  (decimal) con las funciones strtol y strtoul.

Si no puedes utilizar esas funciones entonces el proceso de crear tu propia funcion es relativamente sencillo, el pseudo-codigo es:

1. Inicializa las variables base_10 y contador a cero.
2. Lee el caracter cadena[contador].
3. Salir si el caracter es '\0' (fin de cadena).
4. Caso contrario multiplicar base_10 por N (N es la base, 2=binario, 8=octal, etc.) y sumarle el digito en la posicion cadena[contador], almacenar el resultado en la variable base_10. En otras palabras:

Código: Text
  1. if (isdigit(cadena[contador]))
  2.    digito = cadena[contador] - '0';
  3. else
  4.    digito = 10 + tolower(cadena[contador]) - 'a';
  5.  
  6. base_10 = base_10 * N + digito;
  7.  

5. Incrementar la variable contador y regresar al paso 2.

Un saludo
Título: Re: Conversiones
Publicado por: ecolve en Sábado 2 de Abril de 2005, 04:52
:comp:
 :bravo:

Hola.......gracias a todos por su ayuda...ya lo hice de manera exitosa,lo que estuvo un poco complicado fue la conversion de decimal a binario,de resto de decimal a hexadecimal y de decimal a octal es supersencillo...no siendo mas me despido y si necesitan este programa me envian un e_mail a mi correo....si les puedo colaborar en algo me dicen......

 :gracias:

 :suerte:
Título: Re: Conversiones
Publicado por: © Jonathan © en Domingo 3 de Abril de 2005, 07:09
Grandioso NEO, siguele pa delante nomas! :D .. Suerte y Existos!
Título: Re: Conversiones
Publicado por: Blag en Lunes 4 de Abril de 2005, 02:56
Excelente <Neo>  :bravo:

Porque no posteas tu código para ayudar a los demás miembros del foro, que puedan tener un problema similar  B)  Además......me da curiosidad de ver como resolviste el problema....Porque recuerda que en programación...
Citar
Existen miles de respuestas para un mismo problema
 :comp:

Saludos,

Blag  :devil:
Título: Re: Conversiones
Publicado por: ecolve en Miércoles 4 de Mayo de 2005, 01:54
:comp:

Hola voy a dejar el archivo adjunto del informe del proyecto...espero les sirva y si tienen alguna duda me escriben al correo o por medio del messenger...

P.D: El archivo lo tuve que dividir en tres por el tamaño...


 :good:

 :suerte:

 :lightsabre:
Título: Re: Conversiones
Publicado por: ecolve en Miércoles 4 de Mayo de 2005, 01:55
:comp:


....aqui va el segundo archivo...

 :devil:
Título: Re: Conversiones
Publicado por: ecolve en Miércoles 4 de Mayo de 2005, 01:57
:comp:

.....y el tercer archivo....espero le sirva a "alguien"...chao


 :ph34r: