Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Bròquil en 4 Diciembre 2013, 14:03 pm



Título: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: Bròquil en 4 Diciembre 2013, 14:03 pm
Hola mi intención es hacer un programa que a partir de diferentes booleanos pueda tener la deficinción de un concepto. Esto lo pienso hacer con varios vectores de booleanos, mi pregunta és si se puede pasar de un vector de booleanos a un integer facilmente y videversa.

Por ejemplo: si yo tengo: [1][0][1] en un vector de booleanos que me salga 5 i al inversa que si pongo 5 me salga un vector de booleanos con [1][0][1]

struct concepte {
    string palabra;
    bool Vfrase = false;
    bool Significado=false;
   
};


Título: Re: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: ivancea96 en 4 Diciembre 2013, 15:17 pm
En C++: Algo así?
Código
  1. string toBool(int);
  2.  
  3. bool *v; //vector
  4. int n = 5; //numero
  5. string s = toBool(n);
  6. v = new bool[s.length()]; //el tamaño del vector será del tamaño del string.
  7. for(int i=0;i<s.length();i++)
  8.    v[i] = s[i];
  9.  

Ok, el código lo adaptarías tú. La función toBool() recibiría por valor un int (o unsigned int, o lo que quieras), y retornaría un string que será el número en binario
Ejemplo: toBool(6) retorna la string: "110".

Esto es un ejemplo, para darte una idea. Si usas C, tendrías que cambiar algunas cosas, como lo de string, y lo de "new".

Si no era lo que buscabas, postea con más exactitud lo que buscas.

Suerte.


Título: Re: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: Bròquil en 6 Diciembre 2013, 17:56 pm
Si gracias és esto. lo que no entiendo de este codigo la función  new bool i el asterisco. Asterisco es para hacer vectores ed tamaño indefinido no?

Tambien necessitaria el programa inverso.


Título: Re: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: ivancea96 en 6 Diciembre 2013, 18:07 pm
Fail. Ahora vuelvo a responder.


Título: Re: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: ivancea96 en 6 Diciembre 2013, 18:12 pm
¿Sabes cómo se pasa un decimal a binario y viceversa? Eso es lo que tiene que hacer tu función.
El asterisco significa que la variable es un puntero.
New es para alojar memoria dinámica.

Repasa un poco esos conceptos, que son muy importantes. (O pregúntale a tu profesor, si tuvieses)

Olvídate del código que te puse. Estuve repasandolo, y no está todo lo optimizado que puede. Tú lo que buscas, es la función "toBool" (O como la quieras llamar)


Título: Re: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: amchacon en 6 Diciembre 2013, 21:03 pm
Sin mirarme librerías ni nada, te lo puedes hacer tu mismo fácilmente.

Código
  1. int Convertiraentero(vector<bool> &dato)
  2. {
  3.   int numero = 0;
  4.   int multiplicador = 1;
  5.  
  6.   for (int i = dato.size()-1; i >=0;i--)
  7.   {
  8.        numero += (dato[i]*multiplicador);
  9.        multiplicador *= 2;
  10.   }
  11.   return numero;
  12. }

Suponiendo que el vector simboliza un número binario natural y está ordenado de mayor a menor.


Título: Re: Un vector de booleanos se puede convertir en un integer y viceversa?
Publicado por: rir3760 en 7 Diciembre 2013, 01:46 am
Una forma ligeramente distinta de implementar la función es:
Código
  1. int Convertiraentero(vector<bool>& dato)
  2. {
  3.   int rv = 0;
  4.  
  5.   for (vector<bool>::size_type i = 0; i < dato.size(); i++)
  6.      rv = rv * 2 + dato[i];
  7.  
  8.   return rv;
  9. }

Un saludo