Tengo que hacer un ejercicio donde tengo que convertir un entero binario a su equivalente decimal, pero se tiene que ir agregando uno por uno y cuando uso el
cin automaticamente se pasa un espacio y no quiero que se pase espacio quiero que quede todo en una sola linea.
tambien que no sea algo complicado de hacer que boy empezando
se que se puede hacer con conio pero segun lei no lo recomiendan mucho y evito usarlo
:-X :-X :-X :silbar: :silbar: :silbar:
Vos queres que el usuario ingrese 101010, le de al enter, y al lado de ese numero aparezca el decimal?
queria que 101010 quedara en una sola linea, pero queria ingresar el entero binario por partes con diferentes variables algo haci
int a,b,c;
cin>>a; //ejemplo aqui 10
cin>>b; //ejemplo aqui 10
cin>>c; //ejemplo aqui 10
se veria algo haci
10
10
10
y quiero que cuando se vayan poniendo los numeros se vea todo en una sola linea y no brinque espacio
asi
101010
Usas string entonces y vas haciendo var = var + nuevodato
Cita de: XXX-ZERO-XXX en 7 Julio 2011, 05:32 AM
Usas string entonces y vas haciendo var = var + nuevodato
este ejercicio es de un libro("Como programar en C++, el Deitel)
y no creo aver visto eso todavia
asi dice el ejercicio:
CitarIntroduzca un entero (de cuatro dígitos) que contenga sólo 0s y 1s (es decir, un entero "binario") e imprima su equivalente decimal. (Sugerencia: utilice los operadores de módulo y de división para detectar los dígitos del número "binario" uno por uno, de derecha a izquierda. Al igual que en el sistema numérico decimal, donde el dígito más a la derecha tiene un valor posicional de 1, y el siguiente dígito a la izquierda tiene un valor posicional de 10, y a continuación de 100, y a continuación de 1000, etc., en un sistema numérico binario, el dígito más a la derecha tiene un valor posicional de 1, el siguiente dígito a la derecha tiene un valor posicional de 2, y a continuación de 4 , y a continuación de 8, etc. Por lo tanto, el número decimal 234 puede ser interpretado como 4 * 1 + 3 * 10 + 2 * 100. El equivalente decimal del número 1101 binario es 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 o bien, 1 + 0 + 4 + 8, es decir 13).
no se si se entienda lo que quiero hacer
aunque e notado que ponen ejercicios que se resuelve con cosas que aun no se ven o se veran en el prox capitulo.
Ah entonces es viendo como te dijieron que se haya, si 1101 es 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 entonces es porque tendrias que dar vuelta 1101 y multiplicar cada digito por 1 , el otro por 2, el otro por 4 y el ultimo por 8.
si pero como separar el "entero binario"??
yo tenia pensado hacerlo asi
int a,b,c,d;
cin>>a;
cin>>b;
cin>>c;
cin>>d;
/* utilizando 4 variables y que cada una tuviera un valor para
despues multiplicarlo
y luego hacer a*1+b*2+c*4+d*8
pero el problema esta que al ingresar el valor de las variables
se veria asi*/
1
1
0
1
//cuando yo quiero que se vea asi
1101
"Una pregunta" no es un título muy bueno para el mensaje, va en contra de las reglas, editalo. Pon un nombre que vaya acorde a tu duda.
Puedes usar http://www.cplusplus.com/reference/clibrary/cstring/strncat/ (http://www.cplusplus.com/reference/clibrary/cstring/strncat/).
Yo creo que el ejercicio apunta a que hagas algo mas o menos asi:
Pedir el numero una sola vez
Guardar en un entero auxiliar ese mismo numero
A ese auxiliar dividirlo por 10
Al numero que te da multiplicarlo por 10
Calcular la diferencia entre el numero que guardaste y el que obtuviste
Así estarías obteniendo la ultima cifra de tu numero binario
Si entendés que es lo que esta pasando ahí ya tenes un punto de partida
Suerte
Me parece el enunciado es bastante claro. El punto clave para obtener la solucion exacta es como, en ese libro y hasta ese punto, almacenan las palabras leidas mediante el objeto cin, utilizando un:
A) array de caracteres.
B) objeto de la clase string
El algoritmo es sencillo: inicias con un acumulador en cero y, por cada digito del numero binario empezando por el mas significativo y terminando con el menos, multiplicas el acumulador por dos y sumas el digito.
Por ejemplo en el caso de 1101:
1) Acumulador a 0
A D (A es el acumulador y D el digito procesado)
2) 0 * 2 + 1 == 1
3) 1 * 2 + 1 == 3
4) 3 * 2 + 0 == 6
5) 6 * 2 + 1 == 13
Un saludo
Esto es algo que hice el otro dia. El codigo siguiente te sirve para imprimir los cuatro digitos de una variable entera, separados por un espacio.
printf("%d %d %d %d", num / 1000, (num / 100) % 10, (num / 10) % 10, num % 10);
Vos no tendrias que separarlos, sino multiplicarlos por su 2**n (n es la posicion del digito) correspondiente y luego sumarlos.
Un saludo :)
Cita de: rir3760 en 7 Julio 2011, 17:19 PM
Me parece el enunciado es bastante claro. El punto clave para obtener la solucion exacta es como, en ese libro y hasta ese punto, almacenan las palabras leidas mediante el objeto cin, utilizando un:
A) array de caracteres.
B) objeto de la clase string
El algoritmo es sencillo: inicias con un acumulador en cero y, por cada digito del numero binario empezando por el mas significativo y terminando con el menos, multiplicas el acumulador por dos y sumas el digito.
Por ejemplo en el caso de 1101:
1) Acumulador a 0
A D (A es el acumulador y D el digito procesado)
2) 0 * 2 + 1 == 1
3) 1 * 2 + 1 == 3
4) 3 * 2 + 0 == 6
5) 6 * 2 + 1 == 13
Un saludo
muchas gracias esta fue la que me quedo mas clara.
A ver si tengo algo de tiempo mas al rato y ponerme a hacerlo a ver como sale
Gracias.
¡Buenas!
Aqui tienes el pseudocodigo:
caracter c;
entero x=0;
leer c;
mientras c != '\n'
si c == 0 ó c == 1
x <- x * 2 + c - '0';
sino
lo que quieras
fin si
leer c
fin mientras
imprimir x;
Asi lees el numero de una linea y lo transformas en decimal de un tiron.
¡Saludos!