Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: drk00 en 7 Julio 2011, 01:36 AM

Título: [?]Ayuda con un ejercicio
Publicado por: drk00 en 7 Julio 2011, 01:36 AM
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:
Título: Re: Una pregunta
Publicado por: PiroskY en 7 Julio 2011, 04:55 AM
Vos queres que el usuario ingrese 101010, le de al enter, y al lado de ese numero aparezca el decimal?
Título: Re: Una pregunta
Publicado por: drk00 en 7 Julio 2011, 05:22 AM
queria que 101010 quedara en una sola linea, pero queria ingresar el entero binario por partes con diferentes variables algo haci

Código (cpp) [Seleccionar]
int a,b,c;
cin>>a; //ejemplo aqui 10
cin>>b; //ejemplo aqui 10
cin>>c; //ejemplo aqui 10


se veria algo haci
Código (cpp) [Seleccionar]

10
10
10

y quiero que cuando se vayan poniendo los numeros se vea todo en una sola linea y no brinque espacio
asi
Código (cpp) [Seleccionar]
101010





Título: Re: Una pregunta
Publicado por: Edu en 7 Julio 2011, 05:32 AM
Usas string entonces y vas haciendo var = var + nuevodato
Título: Re: Una pregunta
Publicado por: drk00 en 7 Julio 2011, 05:48 AM
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.
Título: Re: Una pregunta
Publicado por: Edu en 7 Julio 2011, 06:36 AM
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.
Título: Re: Una pregunta
Publicado por: drk00 en 7 Julio 2011, 06:45 AM
si pero como separar el "entero binario"??
yo tenia pensado hacerlo asi
Código (cpp) [Seleccionar]
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

Título: Re: Una pregunta
Publicado por: leogtz en 7 Julio 2011, 07:02 AM
"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.
Título: Re: [?]Ayuda con un ejercicio
Publicado por: Queta en 7 Julio 2011, 13:24 PM
Puedes usar http://www.cplusplus.com/reference/clibrary/cstring/strncat/ (http://www.cplusplus.com/reference/clibrary/cstring/strncat/).
Título: Re: [?]Ayuda con un ejercicio
Publicado por: PiroskY en 7 Julio 2011, 16:10 PM
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
Título: Re: [?]Ayuda con un ejercicio
Publicado por: 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
Título: Re: [?]Ayuda con un ejercicio
Publicado por: criskapunk en 7 Julio 2011, 18:00 PM
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 :)
Título: Re: [?]Ayuda con un ejercicio
Publicado por: drk00 en 7 Julio 2011, 21:12 PM
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.
Título: Re: [?]Ayuda con un ejercicio
Publicado por: do-while en 7 Julio 2011, 21:43 PM
¡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!