convertir de decimal a hexadecimal

Iniciado por chaarlyyyy, 28 Mayo 2010, 22:29 PM

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

chaarlyyyy

Lo que me sucede es q al imprimir me aparecen los numeros y no las letra EJ:si pongo el 6719 debiera quedar en hexadecimal 1A3F y en ves de eso me aparece 1 10 3 15 es decir el numero correspondiente a la letra intente varias veces pero siempre me da lo mismo aki esta el codigo q tngo

#include<stdio.h>
#include<conio.h>

void main()
{
int i,num,n,dividendo,cociente,resto,a[10];
clrscr();
printf("Ingrese numero: ");
scanf("%d",& num);
n=0;
for(dividendo = num; dividendo > 0;n++)
{
  cociente=dividendo/16;
  resto=dividendo%16;
  a[n]=resto;
  dividendo=cociente;
}
   printf("El numero decimal %d equivale en Hexadecimal a: ", num);
  for( i=n-1; i>=0; i--)
  {
   if(a=='10')
   {
   a='A';
   printf("%c",a);
   }
   if(a=='11')
   {
   a='B';
   printf("%c",a);
   }
   if(a=='12')
   {
   a='C';
   printf("%c",a);
   }
   if(a=='13')
   {
   a='D';
   printf("%c",a);
   }
   if(a=='14')
   {
   a='E';
   printf("%c",a);
   }
   if(a=='15')
   {
   a='F';
   printf("%c",a);
   }
   else
   {
    printf("%d",a);
   }
}
  getch();
}

Akai

#1
El problema lo tienes, en que no puedes guardar un carácter (A,B,C,E,F etc) en un vector de enteros.

lo que deberías hacer, es en vez de que a[n] sea una letra, es imprimir esa letra por pantalla en vez de asignarla al vector.

ejemplo:

if(a[i]== 10)
printf("A");


Ahora algunas cosas relativas al programa, en vez de tantas comprobaciones con if, n o sería mejor usar if, else if, y else? void main es una mala costumbre, main siempre debería retornar algo.

int main(){
variables;
instrucciones;
return 0;}


conio.h no es una librería estandar, para evitar su uso, podrías utilizar otras funciones como getchar, gets etc que si son estándares. Otra función de conio.h, clrscr te puede dar problemas según el sistema operativo donde ejectutes el programa

danyof

Otra opcion, en vez de usar tantos if es crear por ejemplo un vector llamado

letras en donde letras[0]=A, letras[1]=B... asi hasta la F y que si el numero que tienes que mostrar es una letra llame al elemento que sea de ese vector:

Por ejemplo:

Si el numero es 10:

printf(letras[10-10]

si el numero es 13:

printf(letras[13-10]

No se si me explique con suficiente claridad....

Te comento esta alternativa porque me parece mucho mas comodo que usar tanto if... ademas, que antes que usar tanto if casi seria mejor usar un switch case...

Niko^

ufff pero no es mas facil pasarlo a hexadecimal directamente ?
algo asi:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int decimal;
   
    printf("introduzca un numero decimal: ");
    scanf("%d", &decimal);
    printf("el numero en hexadecimal es: %x\n", decimal);
    system("pause");
}



pero boe si te queres complicar lo estas haciendo bien por lo visto
coincido con danyof para mi es mejor usar vectores

Akai

Niko, todo depende si es el típico ejercicio de cuando empiezas a programar. Está claro, las opciones sobre que tipo de datos imprimes te ayudan, pero si te han pedido lo otro...

danyof

Es que en este caso el vector es muy util ya que estas mostrando cosas por pantalla...

Los if y los switch vienen bien si en cada caso o en cada condicion tienes que hacer una ristra de tareas:

reservar memoria, abrir un archivo, llamar a tal funcion, etc etc...

pero para un simple printf mas comodo con vectores :)