
22/11/2003, 11:52
|
| | Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 21 años, 5 meses Puntos: 0 | |
Hola, el problema básico es que estas asignando a una posicion de memoria un entero, la linia
chain=chain + aux
no cambia el valor del caracter de la cadena, si no que cambiaria la direccion del primer elemento de la cadena chain (el nombre de una cadena es un apuntador a la primera posicion, igual que los vectores.)
Luego otra cosa, si asignas un entero aux a un caracter de chain, la cadena guardara el caracter de codigo ascii aux, con lo que si contiene un 0 o un 1 estarias guardando caracteres no imprimibles, sumandole el caracter '0' te devuelve el codigo correcto.
Por ultimo la conversion la realizaba al reves, yo he optado por darle la vuelta a la cadena usando una auxiliar, pero se podria hacer de otras maneras.
Espero haberte sido de ayuda.
Saludos!
#include <iostream.h>
#include <conio.h>
void main()
{
int dec, aux,i,j;
char chain[100],reverse[100];
cout << "Introducir Decimal: ";
cin >> dec;
if (dec < 0) {
cout << "\nERROR; Entrada no valida";
main();
}
else {
i=0; //indice de la cadena
while (dec > 0) {
aux = (dec % 2);
chain[i]= aux+'0'; //suma el 0 para transformar el número a su número deciaml
dec = (dec / 2);
i++;
}
chain[i]='\0'; //cierra la cadena
i--; //vuelve una posicion atras
for (j=0;i>=0;i--,j++) //le da la vuelta al numero
{reverse[j]=chain[i];}
reverse[j]='\0'; //cierra la cadena
cout << "\nEl numero en Binario es: " << reverse;
}
}
__________________ Sr.Propio |