Foro de elhacker.net

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



Título: [?]Ayuda con un ejercicio
Publicado por: drk00 en 7 Julio 2011, 01:36
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
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
queria que 101010 quedara en una sola linea, pero queria ingresar el entero binario por partes con diferentes variables algo haci

Código
  1. int a,b,c;
  2. cin>>a; //ejemplo aqui 10
  3. cin>>b; //ejemplo aqui 10
  4. cin>>c; //ejemplo aqui 10

se veria algo haci
Código
  1. 10
  2. 10
  3. 10
  4.  
y quiero que cuando se vayan poniendo los numeros se vea todo en una sola linea y no brinque espacio
asi
Código
  1. 101010







Título: Re: Una pregunta
Publicado por: Edu en 7 Julio 2011, 05:32
Usas string entonces y vas haciendo var = var + nuevodato


Título: Re: Una pregunta
Publicado por: drk00 en 7 Julio 2011, 05:48
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:
Citar
Introduzca 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
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
si pero como separar el "entero binario"??
yo tenia pensado hacerlo asi
Código
  1. int a,b,c,d;
  2. cin>>a;
  3. cin>>b;  
  4. cin>>c;
  5. cin>>d;
  6. /* utilizando 4 variables y que cada una tuviera un valor para
  7. despues multiplicarlo
  8. y luego hacer a*1+b*2+c*4+d*8
  9. pero el problema esta que al ingresar el valor de las variables
  10. se veria asi*/
  11.  
  12. 1
  13. 1
  14. 0
  15. 1
  16.  
  17. //cuando yo quiero que se vea asi
  18. 1101
  19.  


Título: Re: Una pregunta
Publicado por: leogtz en 7 Julio 2011, 07:02
"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
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
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
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
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.

Código
  1. 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
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
¡Buenas!

Aqui tienes el pseudocodigo:

Código:

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!