Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] traduciendo números binarios en c++

Estas en el tema de traduciendo números binarios en c++ en el foro de C/C++ en Foros del Web. Hola a todos, tengo la siguiente consulta, estoy preparando ejercicios verán he estado traduciendo un código que tengo de java a c++: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 16/06/2019, 21:44
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
traduciendo números binarios en c++

Hola a todos, tengo la siguiente consulta, estoy preparando ejercicios verán he estado traduciendo un código que tengo de java a c++:

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <iterator>
  4. using namespace std;
  5.     /**
  6.      * Código de: https://codigo--java.blogspot.com.uy/2013/06/java-basico-045-funcion-conversion.html
  7.      *
  8.      * 11. Desarrolla una función que muestre en binario un número entre 0 y 255.
  9.      */
  10.     int* binario(int a);
  11.     /*--------------------*/
  12.     int main(int argc, char** argv) {
  13.         int num;
  14.         cout << "\n Ingresa un número entre 0 y 255: ";
  15.         cin >> num;
  16.         if(num < 0 || num > 255){
  17.             cout << "\n ERROR";
  18.         } else {
  19.             int* xbinario = binario(num);
  20.             cout << "\n El binario de " << num << " es: ";
  21.             for (int i = sizeof(xbinario) - 1; i >= 0; i--) {
  22.                 cout << *(xbinario + i);
  23.             }
  24.             cout << "\n";
  25.         }
  26.         return 0;
  27.     }
  28.     int* binario(int a){
  29.         static int binario[1000];        
  30.         if(a > 0 && a <= 255){
  31.             int cont = 0;
  32.             int var = a;
  33.             while (var != 0) {                
  34.                 var = var/2;
  35.                 cont ++;
  36.             }
  37.             int t = 0;
  38.             while (a != 0) {                
  39.                 binario[t] = a%2;
  40.                 a = a/2;
  41.                 t++;
  42.             }
  43.         }
  44.         return binario;        
  45.     }

El problema que tengo es que si ingreso una cantidad 255, me muestra bien los 11111111, pero si ingreso 10 me sucede esto:

Cita:
Ingresa un número entre 0 y 255: 10

El binario de 10 es: 00001010
¿cómo puedo hacer para variar la cantidad de elementos usando sizeof o otro? ya que las librerias array o vector no están permitidas para la institución que estoy preparando material.

Espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias
  #2 (permalink)  
Antiguo 17/06/2019, 15:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 14 años, 1 mes
Puntos: 10
Respuesta: traduciendo números binarios en c++

Hola. No entiendo muy bien la pregunta, puesto que el programa parece funcionar bien.

Si te refieres a que no muestre ceros a la izquierda, te muestro una adaptación a tu código que ofrece eso:

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3. /**
  4.  * Código de: https://codigo--java.blogspot.com.uy/2013/06/java-basico-045-funcion-conversion.html
  5.  *
  6.  * 11. Desarrolla una función que muestre en binario un número entre 0 y 255.
  7.  */
  8. int binario(int num_decimal);
  9. /*--------------------*/
  10. int main(int argc, char** argv)
  11. {
  12.     int num;
  13.     cout << "\nIngresa un número entre 0 y 255: ";
  14.     cin >> num;
  15.     if(num < 0 || num > 255)
  16.     {
  17.         cout << "\n ERROR";
  18.     }
  19.     else
  20.     {
  21.         cout << "\nEl binario de " << num << " es "<<binario(num);
  22.     }
  23.     return 0;
  24. }
  25.  
  26. int binario(int num_decimal)
  27. {
  28.     int resto, divisor = 2;
  29.     int dividendo = num_decimal;
  30.     int resultado=0;
  31.     int multiplicador = 1;
  32.     while(dividendo >= divisor)  //Mientras el dividendo sea mayor o igual que el divisor, es decir, mayor o igual que 2.
  33.     {
  34.         resto = dividendo % 2;
  35.         if(resto == 1)
  36.         {
  37.             resultado = resultado + multiplicador;
  38.         }
  39.         dividendo = dividendo/divisor; // Actualizamos el valor del dividendo dividiendolo entre 2.
  40.         multiplicador*=10;
  41.     }
  42.     if (dividendo == 1)
  43.     {
  44.     resultado = resultado + multiplicador;
  45.     }
  46.     return resultado;
  47. }

(algortimo sacado de aquí)
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 26/06/2019, 12:18
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: traduciendo números binarios en c++

Hola dehm gracias por responderme, me sirvió lo que me dijiste, a raíz de eso encontré una solución más simple del problema:

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <iterator>
  4. using namespace std;
  5.     /**
  6.      * Código de: https://www.discoduroderoer.es/ejercicios-propuestos-y-resueltos-metodos-y-funciones-de-java/
  7.      *
  8.      * 11. Crea una aplicación que nos convierta un número en base decimal a binario.
  9.      * Esto lo realizara un método al que le pasaremos el numero como parámetro,
  10.      * devolverá un String con el numero convertido a binario.
  11.      *
  12.      * Para convertir un numero decimal a binario, debemos dividir entre 2 el numero
  13.      * y el resultado de esa división se divide entre 2 de nuevo hasta que no se
  14.      * pueda dividir mas, el resto que obtengamos de cada división formara el
  15.      * numero binario, de abajo a arriba.
  16.      *
  17.      * Veamos un ejemplo: si introducimos un 8 nos deberá devolver 1000
  18.      */
  19.     string binario(int num);
  20.     /*--------------------*/
  21.     int main(int argc, char** argv) {
  22.         int num;
  23.         cout << "\n Ingresa un número entre 0 y 255: ";
  24.         cin >> num;
  25.         if(num < 0 || num > 255) {
  26.             cout << "\n ERROR";
  27.         } else {
  28.             cout << "\n El binario de " << num << " es " << binario(num);
  29.         }
  30.         return 0;
  31.     }
  32.     string binario(int num) {
  33.         string binario= "";
  34.         string digito;
  35.         for(int i = num; i > 0; i /= 2){
  36.             //System.out.println(i + " / " + 2 + " resto: " + (i % 2));
  37.             if(i % 2 == 1){
  38.                 digito = "1";
  39.             }else{
  40.                 digito = "0";
  41.             }
  42.             //Se añade el digito al principio (mira la imagen del post)
  43.             binario = digito + binario;
  44.         }
  45.         return binario;
  46.     }

Gracias por la ayuda. Saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias
  #4 (permalink)  
Antiguo 28/06/2019, 08:39
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: traduciendo números binarios en c++

Puedes simplificar el codigo,
- no necesitas la variable digito.
- no necesitas el if
- puedes directamente convertir el resultado de i%2 usando to_string
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 06/07/2019, 08:39
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: traduciendo números binarios en c++

Una version recursiva: http://bit.ly/2XY8spK
__________________
Visita mi perfil en LinkedIn

Última edición por CalgaryCorpus; 07/07/2019 a las 10:29
  #6 (permalink)  
Antiguo 17/08/2019, 04:16
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: traduciendo números binarios en c++

hola detective, he visto el programa y como hacia mucho tiempo que no hacia ningun ejerccio no he podido resistirme , te paso mi verson

Código C:
Ver original
  1. // Desarrolla una función que muestre en binario un número entre 0 y 255
  2.  
  3. #include <stdio.h>
  4.  
  5. int decAbinario(int numero){
  6.    
  7.     int enbinario=0;
  8.    
  9.     for(int i=0,potencia=1; i<=8 ; i++,potencia*=10,numero>>=1)
  10.         if(numero%2)enbinario+=potencia;   
  11.        
  12.     return enbinario;
  13. }
  14.  
  15. int main(){
  16.    
  17.     int num;
  18.  
  19.     do{
  20.         printf("Introduce un numero entre el 0 y el 255: ");
  21.         scanf("%i", &num);
  22.     }while(num<0 || num>255);
  23.    
  24.     printf("\ntu numero en binario es: %i \n\n", decAbinario(num));
  25.  
  26.     return 0;
  27. }
  #7 (permalink)  
Antiguo 02/09/2019, 05:09
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: traduciendo números binarios en c++

hola detective, te mando otra version, esta devuelve una cadena

Código C:
Ver original
  1. // Desarrolla una función que muestre en binario un número entre 0 y 255
  2.  
  3. #include <stdio.h>
  4.  
  5. char* decAbinario(char* enBinario, int numero){
  6.    
  7.     for(int i=7; i>=0 ; i--,numero>>=1)
  8.         enBinario[i] = (numero&1) ? '1' : '0';
  9.    
  10.     return enBinario;
  11. }
  12.  
  13. int main(){
  14.    
  15.     int num;
  16.     char enBinario[8];
  17.  
  18.     do{
  19.         printf("\nIntroduce un numero entre el 0 y el 255: ");
  20.         scanf("%i", &num);
  21.     }while(num<0 || num>255);
  22.    
  23.     printf("\ntu numero en binario es: %s \n\n", decAbinario(enBinario,num));
  24.  
  25.     return 0;
  26. }

Última edición por vizen; 02/09/2019 a las 07:33 Razón: mejora

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:27.