C/Visual C - Ayuda conversion a bases

 
Vista:

Ayuda conversion a bases

Publicado por hmjmex (7 intervenciones) el 22/05/2007 00:23:19
Hola quisiera ver si es que alguien me puede ayudar, ya que tengo problemas para hacer la conversion entre bases, utilizando los metodos de conversion de bases.

Ya casi tengo el 1er paso solo que me hace falta convertir de decimal a hexadecimal, espero que alguien me pueda ayudar, no se como hacer la conversion utilizando que A=10,B=11,C=12,D=13,E=14 y F=15, el codigo es el siguiente:

Espero me puedan ayudar gracias

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

void main()
{
int res,numero,c,opcion,x=15,y=4;
long int residuo,resultado,numero1,binario,octal,cuaternario,hexa;
float potencia10;
char otra;
do
{
clrscr();
gotoxy(x,y);printf("introduce el numero que vas a convertir");
gotoxy(x+5,y+1);scanf("%d",&numero);
clrscr();
gotoxy(x,y+1);printf("escoge la base del numero que ingresaste ");
gotoxy(x,y+2);printf("1.-decimal");
gotoxy(x,y+3);printf("2.-binario ");
gotoxy(x,y+4);printf("3.-cuaternario ");
gotoxy(x,y+5);printf("4.-octal ");
gotoxy(x,y+6);printf("5.-hexadecimal ");
gotoxy(x+5,y+8);scanf("%d",&opcion);
switch(opcion)
{

case 1:
clrscr();
numero1=numero;
binario=0;
potencia10=1;
while (numero>=1)
{
residuo=numero%2;
numero=numero/2;
binario=binario+residuo*potencia10;
potencia10=potencia10*10;
}
gotoxy(x,y);printf("el numero %ld equivale a : %ld en binario ",numero1,binario);

numero=numero1;
octal=0;
potencia10=1;
while (numero>=1)
{
residuo=numero%8;
numero=numero/8;
octal=octal+residuo*potencia10;
potencia10=potencia10*10;
}
gotoxy (x+24,y+1);
printf(": %ld en octal ",octal);

numero=numero1;
cuaternario=0;
potencia10=1;
while (numero>=1)
{
residuo=numero%4;
numero=numero/4;
cuaternario=cuaternario+residuo*potencia10;
potencia10=potencia10*10;
}
gotoxy (x+24,y+2);
printf(": %ld en cuaternario ",cuaternario);

numero=numero1;
hexa=0;
potencia10=1;
while (numero>=1)
{
residuo=numero%16;
numero=numero/16;
hexa=hexa+residuo*potencia10;
potencia10=potencia10*10;
}
gotoxy (x+24,y+2);
printf(": %ld en hexadecimal ",hexa);
break;
}


//case 2:

//case 3:

gotoxy(0,y+5); printf(" deseas realizar otra operacion s/n: ");
otra=getche();
}
while (otra=='s');

getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda conversion a bases

Publicado por Nelek (816 intervenciones) el 22/05/2007 07:23:51
Hola,

normalmente si pones 0xA34D ya lo tienes en hexadecimal. Si lo que quieres es introducir directamente el valor en hexadecimal y pasarlo a decimal puedes intentar un casteo, es decir:

printf ("Dame el hexadecimal:");
scanf ("%x", nHex);

int nDec = (int) nHex;

O bien... Hacerte un switch para contemplar todos los casos nada mas adquirir el numero.

int nHex = 0;
switch (nNum)
{
case 10: nHex = 0xA; break;
case 11: nHex = 0xB; break;
//los demas
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda conversion a bases

Publicado por hmjmex (7 intervenciones) el 22/05/2007 16:43:08
GRACIAS POR TU AYUDA PERO LA PREGUNTA ERA AL REVES SI INTRODUZCO UN VALOR EN DECIMAL COMO LE HAGO PARA PASARLO A HEXADECIMAL, ES DECIR SI YO LE PONGO 15 QUE ME DA COMO RESULTADO LA F O SI PONGO 47 ME DE COMO RESULTADO 4F, POR QUE AHI EN CODIGO FUENTE NO SE COMO HACERLE, AHI TENGO EL PROBLEMA ESPERO ME PUEDAS AYUDAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda conversion a bases

Publicado por Nelek (816 intervenciones) el 23/05/2007 09:11:56
Ahm...

Entonces tendras que hacer lo siguiente.

Introduces el numero y vas haciendo divisiones por 16 para obtener las cifras que tocan, luego al ultimo divisor le hayas el resto y haces un switch con cada una de las cifras involucradas. Por ejemplo:

el rango del unsigned int va del 0 al 65535, no? y 65535 = 0xFFFF y 65535 = POW (16, 4);

unsigned int nTemp0 = 0, nTemp1 = 0, nTemp2 = 0, nTemp3 = 0;
unsigned int nDato = 0, nIntermedio = 0;
printf ("Dame el numero");
scanf ("%d", nDato);

nTemp0 = nDato / 4096;
nIntermedio = nDato % 16;

nTemp1 = nIntermedio / 256;
nIntermedio = nIntermedio % 256;

nTemp2 = nIntermedio / 16;
nTemp3 = nIntermedio % 16;

Con eso ya lo tienes separado en las cifras que toca, siendo nCifra0 la de la izquierda del todo (la letra/numero de mas peso) y nCifra3 la de la derecha (la de menos peso)

Eso seria para hacerlo a mano. Pero en verdad es tan rapido como...

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

void main( void )
{
char szHex [20];
int nDato = 0;

printf ("Dame el numero");
scanf ("%d", nDato);

_itoa( nDato, szHex, 16 );
printf( "el valor en hexadecimal del numero %d es: 0x%s\n", nDato, szHex);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

conversion de un decimal a hexadecimal y viceversa

Publicado por caro (1 intervención) el 26/05/2007 22:46:47
please necesito que me ayuden a convertir un decimal a hexadecimal y viceversa pero solo utilizando while.... y please lo mas sencillo posible

GRACIAS-... = (
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar