¿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 respuestas
Respuesta de nader
2
2
nader, Programacion en C, programacion de videojuegos con allegro,...
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); }
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
- Anónimoahora mismo
Respuesta de itsp
0
0
itsp, Maestra en sistemas computacionales, asesora a nivel...
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.