Programa que cambie bases numéricas

¿Cómo estas?... Espero puedas realizar este favor u orientarme al respecto... Necesito hacer un programa en C o C++ que cambie un numero de cualquier base numérica a otra base numérica diferente... Llevo algunas semanas intentando y no más no me sale y pues no se programar mucho
3

3 respuestas

Respuesta
2
Haber, aquí te doy un algoritmo para cambiar cualquier numero en base de 2 a 10, a base 10...
#include<stdio.h>
void main(){
int numero; /a convertir
int base; /base en que estaexpresado
int resultado; /ovbio
int resto; /resto de division
int potencia; / valor por el que se multiplica cada cifra
printf("numero y base?");
scanf("%d", &numero);
scanf("%d", &base);
/compruebo que está entre 2 y 10
if (base < 2 "o" base > 10){
printf("BASE INCORRECTA");
exit(0);
}
potencia = 1;
resultado = 0;
do{
resto = numero %10;
numero = numero / 10;
resultado = resultado + (resto * potencia);
potencia = potencia * base;
} while (numero =! 0);
printf("resultado = %d
", resultado);
}
Respuesta
1
En c y c++ puedes pasar de base numérica solamente asignando el valor de una variable de un tipo a otra de otro tipo, pero debes tener en cuenta el tamaño de cada variable
unsigned char | 8 bits | 0 to 255
char | 8 bits | -128 to 127
enum | 16 bits | -32,768 to 32,767
unsigned int | 16 bits | 0 to 65,535
short int | 16 bits | -32,768 to 32,767
int | 16 bits | -32,768 to 32,767
unsigned long | 32 bits | 0 to 4,294,967,295
long | 32 bits | -2,147,483,648 to 2,147,483,647
float | 32 bits | 3.4 * (10**-38) to 3.4 * (10**+38)
double | 64 bits | 1.7 * (10**-308) to 1.7 * (10**+308)
long double | 80 bits | 3.4 * (10**-4932) to 1.1 * (10**+4932)
De esta forma solo puedes pasar un numero de una base numérica más pequeña sin correr el riesgo de que el dato se dañe, o de uno más grande a un pequeño pero si el dato alcanza en el tamaño del tipo más pequeño.
por ejemplo puedes almacenar en un double long el numero 234 y luego pasarlo a un int que puede almacenar hasta 32768 y en numero pasara al int como 234, pero si almacenas en un double long 40000 y luego intentas pasarlo a un int que no puede almacenar un numero de ese tamaño el nuemro se convertira en -25536
Así que solo puedes pasar de un tipo mayor a uno menor si el tipo más pequeño es capaz de almacenar la cifra que contiene el tipo grande
Y de un tipo menor a un mayo si lo puedes hacer con una simple asignación
Y para pasar de cadenas a bases numéricas puedes usar
atoi --> array a integer
atof --> array a float
atol --> array a long
Te pego un código de muestra para que mires como se hacen las asignacines
#include"conio.h"
#include"stdio.h"
#include"stdlib.h"
void main()
{clrscr();
char *cad;
float f;
int i;
double long d;
gets(cad);
puts(cad);
printf("
Entero %d",atoi(cad));
printf("
Long %ld",atol(cad));
printf("
Float %f",atof(cad));
i=atoi(cad);
f=i;
printf("
* %f",f);
f=atof(cad);
i=f;
printf("
* %i",i);
printf("
** %f",f);
d=atol(cad);
i=d;
printf("
* %d",i);
getch();
}
Espero te sea de ayuda.. si no fui muy claro y aun tienes inconvenientes no dudes en avisarme y te ayudare con gusto.
Hola gracias tu respuesta... el problemilla es que creo que no fuiste muy claro o yo muy torpe y no ntendi nada de lo que me pasaste... el punto del programa que necesito hacer es cambiar bases numéricas ej.binario a octal, hexadecimala a decimal... cosas así espero puedas ser más specifico gracias
Lo siento no me llego ami correo tu respuesta siento demorarme
Bien para pasar de bases numéricas
Podemos usar la librería iostream.h
Dec
cout<<dec<<x; // conversión la salida es decimal
cin>>dec>>x; // conversión la entrada es decimal
Hex
out<<hex<<x; // conversion la salida es hexadecimal
cin>>hex>>x; // conversion la entrada es hexadecimal
oct
cout<<oct<<x; // Conversion la salida es octal
cin>>oct>>x; // conversion la entrada es octal
Tambien puedes hacerlo con la funcion scanf();
//los numeros octales los precedes con un 0 y los hexadecimeles con 0x
//entra un numero decimal un octal (0 numero) y un hexadecimal (0x numero)
scanf( "%i %i %i", &idec, &ioct, &ihex );
//introduce un numero hexadecimal
scanf( "%x", &xhex );
//introduce un numero Decimal
scanf( "%d", &ddec );
//introduce un numero Octal
scanf( "%o", &ooct );
Siento mucho la demora no me llego tu respuesta a mi correo pensé que no rebizabas a un
Respuesta
Existe una función que se llama atoi, que en su sintaxis convierte una cadena a un numérico de la base que se le indique (decimal, octal o hexadecimal).
Si lo quieres hacer manual, haz manejando el numero como arreglo de caracteres, elemento por elemento. Tienes que seguir el proceso de conversión manual.
Cualquier cosa estamos en contacto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas