haver si me podeis ayudar
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
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
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;
}
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;
}
