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

 

 


Tema destacado: Introducción a Git (Primera Parte)


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


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
DUda c++
« en: 16 Septiembre 2012, 21:49 pm »

Hola que tal, tras buscar por google y no encontrar nada me vi obligado a buscar ayuda.

El caso es que quiero hacer un programa que cree una tabla con todas las posibilidades para 0 y 1 con una longitud definida por el user.

Por ejemplo si pongo un 2 generara 2^2 que son 4 combinaciones 01 00 11 10 pense en buscar algun generador de diccionarios para fuerza bruta y basandome en eso generar una propio pero no encontre nada.

Nose si se me a entendido pero bueno, lo que necesito resumido es una ayudita para poder progresar con mi programa, si puede ser no pongais todo el programa entero que sino no aprendo nada.

Muchas gracias a todos, hoy estoy un poco espeso.


En línea

criskapunk

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: DUda c++
« Respuesta #1 en: 16 Septiembre 2012, 23:59 pm »

Buenas,

Vos querés generar todas las combinaciones de ceros y unos dada una longitud determinada. Se me ocurre hacer algo así (No se si está bien generalizado):

Para una longitud de 3 caracteres, tendrías 2^3 combinaciones, es decir 8 combinaciones totales. Entonces podrías hacer un bucle desde cero hasta (2^3)-1 e ir imprimiendo en cada iteración el valor del contador convertido a binario.
Es decir, en la primer vuelta el contador vale 0, en binario lo mismo. La segunda vale 1, nuevamente lo mismo en binario. En la tercera vale 2, es decir 10 en base 2, y así sucesivamente, irías mostrando todas las combinaciones posibles.

Te dejo el código en Python, no se C++. Creo que es bastante simple de entender, lo único que comenté fueron las funciones propias del lenguaje así ya tenés una base para buscar algo que cumpla una función similar en C++.

Código
  1. s = int(raw_input("Ingrese la longitud: "))
  2. i = 0
  3. while i < 2**s:
  4.  
  5.  # Convierte el valor del contador a binario
  6.  # Elimina los dos primero caracteres para no mostrar el '0b'
  7.  # Rellena a la izquierda con ceros, dependiendo de la longitud ingresada
  8.  
  9.  print bin(i)[2:].zfill(s)
  10.  i += 1

La salida del programa es la siguiente:

Código:
000
001
010
011
100
101
110
111

Un saludo.


« Última modificación: 17 Septiembre 2012, 00:17 am por criskapunk » En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: DUda c++
« Respuesta #2 en: 17 Septiembre 2012, 14:55 pm »

ok muchas gracias voy a probarlo.
En línea

Kasswed
Colaborador
***
Desconectado Desconectado

Mensajes: 5.295

Rolling Stones


Ver Perfil
Re: DUda c++
« Respuesta #3 en: 18 Septiembre 2012, 01:24 am »

Código
  1. #include <iostream>
  2. #include <cmath>
  3. #include <string>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. string DecToBin(const int& number);
  9.  
  10.  
  11. class Combo{
  12.   private:
  13.      vector<string> v;
  14.      int n; //Número de dígitos
  15.   public:
  16.      Combo(const int& digitos);
  17.      friend ostream& operator<<(ostream& os,const Combo& c);
  18. };
  19.  
  20.  
  21. Combo::Combo(const int& digitos){
  22.   n = digitos;
  23.   if(n > 0){
  24.      v.resize((int)pow(2,(double)n));
  25.      string tmp;
  26.      for(int i=0; i<(int)pow(2,(double)n); i++){
  27.          string aux(n,'0');
  28.          tmp = DecToBin(i);
  29.          aux.replace(aux.size()-tmp.size(),tmp.size(),tmp);
  30.          v[i] = aux;
  31.      }
  32.   }
  33. }
  34.  
  35. ostream& operator<<(ostream& os,const Combo& c){
  36.   for(int i=0; i<(int)pow(2,(double)c.n); i++) os << c.v[i] << endl;
  37.   return os;
  38. }
  39.  
  40. int main(){
  41.   int n;
  42.   cin >> n;
  43.   Combo aux(n);
  44.   cout << aux << endl;
  45. }
  46.  
  47. string DecToBin(const int& number){
  48.   if ( number == 0 ) return "0";
  49.   if ( number == 1 ) return "1";
  50.   if ( number % 2 == 0 ) return DecToBin(number / 2) + "0";
  51.   else return DecToBin(number / 2) + "1";
  52. }
En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: DUda c++
« Respuesta #4 en: 18 Septiembre 2012, 15:09 pm »

thanks kasswed

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 7,794 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 4,047 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda
Programación C/C++
djdac3 3 799 Último mensaje 16 Septiembre 2012, 03:08 am
por avesudra
duda c++
Programación C/C++
ankora45 3 908 Último mensaje 2 Octubre 2012, 15:53 pm
por 0xDani
Duda
Programación C/C++
djdac3 2 744 Último mensaje 4 Octubre 2012, 21:29 pm
por djdac3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines