Un vector de booleanos se puede convertir en un integer y viceversa?

Iniciado por Bròquil, 4 Diciembre 2013, 14:03 PM

0 Miembros y 1 Visitante están viendo este tema.

Bròquil

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;
   
};

ivancea96

En C++: Algo así?
Código (cpp) [Seleccionar]

string toBool(int);

bool *v; //vector
int n = 5; //numero
string s = toBool(n);
v = new bool[s.length()]; //el tamaño del vector será del tamaño del string.
for(int i=0;i<s.length();i++)
    v[i] = s[i];


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.

Bròquil

#2
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.

ivancea96


ivancea96

¿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)

amchacon

Sin mirarme librerías ni nada, te lo puedes hacer tu mismo fácilmente.

Código (cpp) [Seleccionar]
int Convertiraentero(vector<bool> &dato)
{
  int numero = 0;
  int multiplicador = 1;
 
  for (int i = dato.size()-1; i >=0;i--)
  {
       numero += (dato[i]*multiplicador);
       multiplicador *= 2;
  }
  return numero;
}


Suponiendo que el vector simboliza un número binario natural y está ordenado de mayor a menor.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

rir3760

Una forma ligeramente distinta de implementar la función es:
Código (cpp) [Seleccionar]
int Convertiraentero(vector<bool>& dato)
{
   int rv = 0;
   
   for (vector<bool>::size_type i = 0; i < dato.size(); i++)
      rv = rv * 2 + dato[i];
   
   return rv;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language