necesito ayuda

manuel
27 de Enero del 2006
que onda mucha, necesito que alguien me ayude a hacer un programa de convierte de una base m a una base n, por ejemplo: convertir 25 de base 10, a base 2

Noel Solw
27 de Enero del 2006
// program basesb.cpp

// Enviado por manuel el d?a 26 de enero de 2006
// que onda mucha, necesito que alguien me ayude a hacer un programa de
// convierte de una base m a una base n, por ejemplo:
// convertir 25 de base 10, a base 2

// written in c++, ver 4.52 - 26/12/06

#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

int GetNum(char *N)
{
char temp[20];
cout << " entre un numero de hasta 8 cifras, N : ";
cin >> temp;
int ok = strlen(temp) < 9;
if(!ok)
cout << "N tinen mas que 8 cifras - pruebe otra vez";
else
strcpy(N,temp);
cout << endl;
return ok;
} // GET NUM

int GetBase(int index)
{
char *msg[] = {"entrada : ",
"salida : "};
int base,ok = 0;
while(!ok)
{
cout << "escriba un numero entre 2 y 10 (incluidos) para la base de "
<< msg[index];
cin >> base;
ok = (base > 1 && base < 11);
}
return base;
} // GET BASE

int Check(char *N,int base)
{
for(int i = 0;i < strlen(N);i++)
{
int x = N[i] - '0';
if(x < 0 || x > base - 1)
{
cout << "en N hay un caracter incorrecto o una cifra demasiado grande"
<< endl;
return 0;
}
}
return 1;
}

char GetChoice()
{
cout << endl <<
"para salir entre 's', si quiere continuar cualquier otra tecla --> ";
char choice = getche();
return choice;
} // GET CHOICE

unsigned long FromBaseInToDecimal(char *num_in,int base_in)
{ // convierte el string de entrada en un valor numerico decimal
if(base_in == 10)
return atol(num_in);
unsigned long result = 0;
for(int i = 0;i < strlen(num_in);i++)
result = result*base_in + num_in[i] - '0';
return result;
} // FROM BASE IN TO DECIMAL

void FromDecimalToBaseOut(char *num_out,unsigned long decimal,int base_out)
{ // convierte el valor numerico a la base de salida
ltoa(decimal,num_out,base_out);
} // FROM DECIMAL TO BASE OUT

int main()
{
char num_in[9],num_out[31],choice = '*';
int base_in,base_out,ok;
while(choice != 's')
{
ok = 0;
while(!ok)
{
while(!ok)
ok = GetNum(num_in);
base_in = GetBase(0);
ok = Check(num_in,base_in);
if(ok)
base_out = GetBase(1);
} // WHILE NOT OK
if(base_in == base_out)
strcpy(num_out,num_in);
else
FromDecimalToBaseOut(num_out,FromBaseInToDecimal(num_in,base_in),
base_out);
cout << endl;
cout << "entrada en base " << setw(2) << base_in << " : "
<< num_in << endl;
cout << " salida en base " << setw(2) << base_out << " : "
<< num_out << endl;
choice = GetChoice();
cout << endl << endl;
} // WHILE CHOICE NOT 's'
cout << "end of program - good bye ! ! !" << endl;
return 0;
}