#include <iostream>
#include <math.h>
#include <conio.h>
#include <string>
using namespace std;
void binario_decimal();
void decimal_binario();
int binario(int num);
void decimal_hexadecimal();
void hexadecimal_decimal();
int exp ( int largo , int base, string numero );
void main()
{
int opcion;
//menu
do
{
system("cls");
cout<<"------------CONVERSOR------------"<<endl;
cout<<"1) Binario-decimal."<<endl;
cout<<"2) Decimal-binario."<<endl;
cout<<"3) Hexadecimal-decimal."<<endl;
cout<<"4) Decimal-hexadecimal."<<endl;
cout<<"5) Salir."<<endl;
cout <<"---------------------------------" << endl;
cout << "Introduce la opcion: " << endl;
cin>>opcion;
switch (opcion)
{
case 1:
binario_decimal();
break;
case 2:
decimal_binario();
break;
case 3:
hexadecimal_decimal();
break;
case 4:
decimal_hexadecimal();
break;
case 5:
cout<<"Fin del programa."<<endl;
break;
default:
cout<<"Opcion incorrecta, pruebe otra vez."<<endl;
break;
}
}while(opcion!=5);
}
void hexadecimal_decimal()
{
int numhexa;
printf("Introduce un numero hexadecimal: ");
//Introducimos un número en formato hexadecimal
scanf("%x",&numhexa);
printf("En decimal es %d \n",numhexa);
getchar();
system("pause");
}
void decimal_hexadecimal()
{
int numero;
cout<<"Introducir numero decimal para pasarlo a hexadecimal: ";
cin>>numero;
cout << hex << numero << endl;
system("pause");
}
void decimal_binario()
{
int decimal;
char binario[30];
cout<<"Decimal: ";
cin>>decimal;
itoa (decimal, binario, 2);
cout<<endl<<"Binario: "<<binario<<endl;
system("pause");
}
void binario_decimal()
{
char binario[10];
int i, exp, numero;
double exponente, resultado=0;//Como enteros no podemos usar funcion pow
bool error;
//Mientras exista error en el numero introducido sigue pidiendo numero
do
{
i=0;//Inicializamos indice para recorrer el array
error=false;
cout<<"Introduce el numero en binario: "<<endl;
cin>>binario;
//Recorremos el array en busca de errores (numero no en binario)
while ((error==false)&&(binario[i]!='\0'))
{
if ((binario[i]!='0')&&(binario[i]!='1'))
{
error=true;
}
else
{
i++;
}
}
}while(error==true);
//Decrementamos en uno el indice para situarnos en la ultima cifra introducida
//Sin decrementar estara apuntando al caracter nulo final del array
i--;
//Conservamos el valor del indice para usarlo en el exponente para calcular el decimal
exp=i;
while (i>=0)
{
//Pasa el caracter '1' a entero como 49 y el '0' como 48 por eso restamos 48
//para que el paso a entero sea correcto
numero=(binario[i]-48);
//Calculamos el exponente a usar en la formula a partir del numero de cifras
//introducido(variable exp) y el indice del numero a pasar a decimal(variable i)
exponente=(exp-i);
//Formula: Ej. 101 binario es= 1x2exp2 + 0x2exp1 + 1x2exp0
resultado=(resultado+(numero*(pow(2,exponente))));
i--;
}
cout<<"El numero en decimal es: "<<resultado<<endl;
system ("pause");
}
