elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Decimal a binario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Decimal a binario  (Leído 1,526 veces)
Zeit

Desconectado Desconectado

Mensajes: 3


Solo se que eso no lo se.


Ver Perfil
Decimal a binario
« en: 19 Marzo 2016, 16:38 pm »

Buenos días, tardes y noches tengan todos, tengo un pequeño problemilla, pasa que estoy aprendiendo c++ y por practica estoy desarrollando un conversor de decimal a binario, todo bien, el conversor funciona a la hora de pasar un numero de binario a decimal, solo que no lo reordena.
Por ejemplo, le doy 4 como valor principal y me devuelve 001, lo cual esta "bien" por que el valor binario de 4 es 100, lo que tengo es que reordenar los valores, para ordenarlo intento hacer un array pero tienen comportamientos demasiado caoticos, por ejemplo, me imprime direcciones de memoria, me imprime numeros que para mi son aleatorios y así, este es el codigo que tengo:

Código:
#include <iostream>
using namespace std;
int main(){
int n = 4;
int count=0;
int n_bin[8];
while(n != 0){
int m = n%2;
n = n/2;
count++;
n_bin[count]=m;
for(int i=8;i!=0;i--){
cout << n_bin[i];
}
}
}

P.S: Lo he intentado de otros modos y me sale el binario pero con un monton de 0's y 1's y no le veo el sentido, este es el otro codigo que he intentado usar:

Código:
#include <iostream>
using namespace std;
int main(){
int n = 4;
int byte = 8;
int n_bin[byte];
while(n != 0){
int m = n%2;
n = n/2;
for(int i=0;i<8;i++){
byte--;
n_bin[byte] = m;
cout << n_bin[byte];
}
}
}

Y mi ultima aberración (esta es la que imprime la direccion de la memoria):

Código:
#include <iostream>
using namespace std;
int main(){
int n = 4;
int byte = 8;
int n_bin[byte];
while(n != 0){
int m = n%2;
n = n/2;
n_bin[byte] = m;
cout << n_bin;
}
}

En:

Código:
cout << n_bin
le añadi un * del modo:

Código:
cout << *n_bin
y me sigue dando un monton de numeros aleatorios.

Si alguien pudiera hecharme una mano le agradecería mucho. ^^


« Última modificación: 20 Marzo 2016, 02:20 am por Zeit » En línea

Aprendiendo everytime.
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Decimal a binario
« Respuesta #1 en: 19 Marzo 2016, 17:28 pm »

Primero, en el ciclo for donde muestras el contenido del arreglo estás accediendo a memoria fuera del arreglo. Un arreglo tiene los índices 0, 1, 2, ... hasta el tamaño que le hayas asignado - 1. Entonces, en el for estás accediendo al elemento '8' del arreglo, mientras que al elemento máximo que puedes acceder es al 7 (8 - 1).

Segundo, estás incrementando el count antes de tiempo. Esto lo digo porque nunca inicializas m_bin[0] (ya dijimos que accedemos al arreglo desde el elemento 0), pero sin embargo estás accediendo a m_bin[1], m_bin[2], ... Nunca llegas a cambiar el valor de m_bin[0].

Tercero, el for lo tienes que mostrar fuera del bucle while, porque si muestras el contenido del arreglo sin inicializar, lo que muestras es basura. Esa "basura" es memoria que antes había sido ocupada por otros programas/procesos. Por ejemplo, fijémonos en tu código:
Código
  1. while(n != 0){
  2.  int m = n%2;
  3.  n = n/2;
  4.  n_bin[count]=m;
  5.  for(int i=7;i!=0;i--){ // Corrige el i=8 por i=7
  6.   cout << n_bin[i];
  7.  }
  8.  count++; // Mejor aquí
  9. }

Si te fijas bien, ¿le has dado un valor a n_bin[7] inicialmente? No, porque inicialmente solo inicializas n_bin[0], pero no inicializas n_bin[1], etc... Entonces, tendrías que sacar el for fuera. Así, primero convertirías el valor a binario y luego mostrarías los resultados.

Código
  1. while(n != 0){
  2.    int m = n%2;
  3.    n = n/2;
  4.    n_bin[count]=m;
  5.    count++; // Mejor aquí
  6. }
  7.  
  8. for(int i=7;i!=0;i--){ // Corrige el i=8 por i=7
  9.    cout << n_bin[i];
  10. }


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Zeit

Desconectado Desconectado

Mensajes: 3


Solo se que eso no lo se.


Ver Perfil
Re: Decimal a binario
« Respuesta #2 en: 19 Marzo 2016, 18:17 pm »

Gracias, he intentado tu solucion y luego de retocar el codigo un par de miles de veces  :xD ya me sale el codigo pseudo-ordenado, solo tuve algunos errores, por ejemplo al crear un arreglo de 7 digitos me saltaba violacion del segmento, pero lo solucione volviendo a colocar 8, cambie el ciclo while por un for, simplifique un poco el codigo y hize un contador decreciente pero ahora en vez de dar 00000100 me da 100000010, el codigo es...
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int n = 4;
  5. int count;
  6. int bits=8;
  7. int n_bin[bits];
  8. for(count=0;count!=bits;count++){
  9. n_bin[count] = n%2;
  10. n = n/2;
  11. }
  12. for(int i=bits;i!=0;i--){
  13. cout << n_bin[i];
  14. }
  15. }
  16.  
En línea

Aprendiendo everytime.
Zeit

Desconectado Desconectado

Mensajes: 3


Solo se que eso no lo se.


Ver Perfil
Re: Decimal a binario
« Respuesta #3 en: 19 Marzo 2016, 23:20 pm »

Ya esta solucionado, al final el error estaba en un operador, el codigo funcional:
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4.        int n = 2;
  5.        int count;
  6.        int n_bin[8];
  7.        for(count=0;count<8;count++){
  8.                int m = n%2;
  9.                n = n/2;
  10.                n_bin[count] = m;
  11.        }
  12.        for(int i=7; i >= 0; i--){
  13.                cout << n_bin[i];
  14.        }
  15. }
¡Muchas gracias! :D
En línea

Aprendiendo everytime.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ code=C++] Conversor binario-decimal-binario « 1 2 »
Programación C/C++
Chonk 11 23,607 Último mensaje 9 Julio 2010, 17:52 pm
por Debci
Pasar decimal a binario
.NET (C#, VB.NET, ASP)
Cuasar 7 7,661 Último mensaje 8 Febrero 2011, 04:00 am
por Cuasar
[BATCH] Decimal > Binario
Scripting
Puntoinfinito 7 8,712 Último mensaje 17 Mayo 2019, 13:02 pm
por d.gromero
decimal a binario con bitset
Programación C/C++
jorgediazbass 4 2,698 Último mensaje 31 Julio 2016, 21:55 pm
por ivancea96
Convertir de decimal a binario en lenguaje C.
Programación C/C++
NOB2014 8 5,779 Último mensaje 7 Noviembre 2016, 21:53 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines