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

Dudas sobre binario a decimal

Estas en el tema de Dudas sobre binario a decimal en el foro de C/C++ en Foros del Web. últimamente he estado publicando duda tras duda. y gracias a los que se toman su tiempo en ayudarme , enserio, muchas gracias. bueno. tengo otra ...
  #1 (permalink)  
Antiguo 26/02/2014, 11:21
 
Fecha de Ingreso: febrero-2014
Ubicación: Guadalajara
Mensajes: 34
Antigüedad: 10 años, 10 meses
Puntos: 0
Dudas sobre binario a decimal

últimamente he estado publicando duda tras duda. y gracias a los que se toman su tiempo en ayudarme , enserio, muchas gracias.

bueno. tengo otra duda sobre un programa que convierte de binario a decimal .

practicamente ya tengo la idea, pero estoy algo confudido.


la idea consiste en dividir el numero uno a uno por ejemplo: 10101 aplicaría modulo de 10 para separarlo por partes y dividir la parte entera. asi hasta que se separe.

despues lo multiplicaría con sus respectivas potencias y listo.

pero mi duda entra aquí. si es el usuario teclea un binario mas grande entonces mi idea ya no entra. porque lo que yo pretendo podía ser una palabra de 8 bits pero si el usuario pone de una de 32 bits .

al grano, si yo no se de cuantas cifras será el numero, como le puedo hacer con un while para poder hacer la conversión o hasta cuando pararía. estoy algo confundido


:'
  #2 (permalink)  
Antiguo 26/02/2014, 15:56
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Dudas sobre binario a decimal

Cita:
Iniciado por superchava666 Ver Mensaje
últimamente he estado publicando duda tras duda. y gracias a los que se toman su tiempo en ayudarme , enserio, muchas gracias.
.................................................. .........
al grano, si yo no se de cuantas cifras será el numero, como le puedo hacer con un while para poder hacer la conversión o hasta cuando pararía. estoy algo confundido

:'
Algo así:

Código C++:
Ver original
  1. while (N>0){
  2. ...................................
  3.     N/=10;
  4.   }
.................
}

¡¡¡Saluditos!!!

  #3 (permalink)  
Antiguo 26/02/2014, 16:20
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años, 1 mes
Puntos: 32
Respuesta: Dudas sobre binario a decimal

No uses un número para guardar la representación en binario.
Usa una cadena de texto.

slds;

nup_
  #4 (permalink)  
Antiguo 27/02/2014, 10:28
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Dudas sobre binario a decimal

Cita:
Iniciado por nup_ Ver Mensaje
No uses un número para guardar la representación en binario.
Usa una cadena de texto.

nup_
Creo que este es el usuario que sólo ha visto los if, while, for y poco más. No creo que halla llegado a los arrays.

Aunque tampoco son necesarios.

La idea de él es plausible, ir obteniendo los restos del número en binario y multiplicándolos por las respectivas potencias de dos.

Un ejemplo sería el código que dejo a continuación, donde uso unsigned long long por si quiere meter números binarios hasta 60-65 cifras en lugar de las ocho que él dice. Para este último caso bastaría usar int en lugar de unsigned long long:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   int i,digitos=1;
  5.   unsigned long long int numero,N,num=0;
  6.   printf("Introduzca un numero binario de ocho digitos maximo:\n");
  7.   do{
  8.     scanf("%llu",&numero);
  9.     for (i=10;(numero/i)>0;i*=10){
  10.       digitos++;
  11.     }
  12.     if (digitos>=9){
  13.       puts("He dicho ocho digitos maximo");
  14.       printf("Introduzca un numero binario de ocho digitos maximo:\n");
  15.     }
  16.   }while (digitos>=9);
  17.   num=0,N=numero;
  18.   for (i=1;N>0;i*=2){
  19.     num+=i*(N%10);
  20.     N/=10;
  21.   }
  22.   printf("\n%llu\n",num);
  23.   return 0;
  24. }

¡¡¡Saluditos!!!


Última edición por leosansan; 27/02/2014 a las 13:12
  #5 (permalink)  
Antiguo 28/02/2014, 09:18
 
Fecha de Ingreso: diciembre-2013
Mensajes: 150
Antigüedad: 11 años
Puntos: 8
Respuesta: Dudas sobre binario a decimal

Usa cadena de texto como numero binario
Has un algoritmo:
  • Haz un bucle que la lea desde derecha a izquierda
  • Calculando la potencia de dos elevado al numero de posicion segun sea un uno. Si es cero, lo ignora pero incrementa la posicion

Usa cadenas de texto, asi podrás aceptar mas numeros de lo normal, asi será mas robusta tu funcion.

Espero haber ayudado.
__________________
¿Necesitas ayuda con algún algoritmo? Si tienes dudas, entonces visita: http://algoritmosypseudocodigo.blogspot.com/.
  #6 (permalink)  
Antiguo 01/03/2014, 08:32
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Dudas sobre binario a decimal

Cita:
Iniciado por jhonny6721 Ver Mensaje
Usa cadena de texto como numero binario

Usa cadenas de texto, asi podrás aceptar mas numeros de lo normal, asi será mas robusta tu funcion.

Espero haber ayudado.
El número de dígitos a aceptar está limitado por el número en decimal al que corresponda, de ahí el uso que hago de unsigned long long. Conste que la limitación de ocho dígitos es porque así lo pedía el autor del tema.

Aprovecho para corregir el anterior post, donde me falto un digitos=1:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   int i,digitos;
  5.   unsigned long long int numero,N,num=0;
  6.   printf("Introduzca un numero binario de ocho digitos maximo:\n");
  7.   do{
  8.     digitos=1;
  9.     scanf("%llu",&numero);
  10.     for (i=10;(numero/i)>0;i*=10){
  11.       digitos++;
  12.     }
  13.     if (digitos>=9){
  14.       puts("He dicho ocho digitos maximo");
  15.       printf("Introduzca un numero binario de ocho digitos maximo:\n");
  16.     }
  17.   }while (digitos>=9);
  18.   num=0,N=numero;
  19.   for (i=1;N>0;i*=2){
  20.     num+=i*(N%10);
  21.     N/=10;
  22.   }
  23.   printf("\n%llu\n",num);
  24.   return 0;
  25. }

Y de paso aporto una posible solución con cadenas:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4.   int i,j,digitos=0;
  5.   unsigned long long int num=0;
  6.   char numero[65];
  7.   printf("Introduzca un numero binario de ocho digitos maximo:\n");
  8.   do{
  9.     digitos=0;
  10.     scanf("%s",&numero);
  11.     for (i=0;numero[i];i++)
  12.       digitos++;
  13.     if (digitos>=9){
  14.       puts("He dicho ocho digitos maximo");
  15.       printf("Introduzca un numero binario de ocho digitos maximo:\n");
  16.     }
  17.   }while (digitos>=9);
  18.   for (j=digitos-1,i=1;j>=0;i*=2,j--){
  19.     num+=i*(numero[j]-'0');
  20.   }
  21.   printf("\n%llu\n",num);
  22.   return 0;
  23. }

¡¡¡Saluditos!!!


Etiquetas: binario, decimal, dudas, numero, programa
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:03.