haver si me podeis ayudar

Sarita
25 de Enero del 2006
Hola gente, el otro dia dia justamente me meti en este foro i vi q alguien havia propuesto un exercicio, y resulta q es uno mismo que tengo que entregar yo, y quisiera saber si alguien lo podria hacer, seguramente no es muy dificil, xo yo estoy començando en esto y e visto que por aqui hay gente que sabe muxo, asi que si alguien lo sabe me seria d gran ayuda, yo lo tng medio echo utilizando "while", aunque tb se puede usar for, nse tb se usan arrays y eso. Weno gente spero q me podais ayudar, muchas gracias ciaoo

El anunciado es:

"Realizar un programa en C que pida al usuario por teclado un número entero y positivo N, la base en que está este número (2=binaria, 8=octal, 10=decimal) y en que base queremos que represente el valor N (2, 8 o 10). A continuación el programa nos representará un número N en la base deseada.

El usuario nunca entrará un número N mayor de 8 dígitos. El usuario tampoco entrará caracteres incorrectos (si es binario, caracteres diferentes de 0 y 1; etc.)." eso si utilizando arrays


pd: recordad k hay algo q va referente a la tabla ASCII

Noel Solw
25 de Enero del 2006
Te envio un programa que hace lo pedido.
No he tenido para revisarlo con ejemplo, por eso te pido por favor que lo corras con datos adecuados.
Por cualquier problema, comunicate conmigo.

exito ! ! !

// program bases.cpp

// Realizar un programa en C que pida al usuario por teclado un numero entero
// y positivo N, la base en que esta este numero (2=binaria, 8=octal, 10=decimal)
// y en que base queremos que represente el valor N (2, 8 o 10).
// A continuacion el programa nos representara un numero N en la base deseada.
// El usuario nunca entrara un numero N mayor de 8 digitos. El usuario tampoco
// entrara caracteres incorrectos (si es binario, caracteres diferentes de
// 0 y 1; etc.)." eso si utilizando arrays
// pd: recordad k hay algo q va referente a la tabla ASCII

// written in c++, ver 4.52 - 25/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 2,8,10 para la base de " << msg[index];
cin >> base;
ok = (base == 2 || base == 8 || base == 10);
}
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;
}