Generar una tabla de verdad

Iniciado por JonaLamper, 17 Noviembre 2017, 00:59 AM

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

JonaLamper

Muy buenas noches,

He estado buscando algunos ejemplos sobre esto, pero ninguno me convence. A ver si a alguien se le ocurre alguna forma "elegante" de hacerlo.
Lo que pretendo es generar una tabla de verdad. Imaginemos una tabla de verdad de 3 variables, sería así:

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

Ahora bien, cada fila de esas para mí va a ser un array. Es decir que yo tendría 8 arrays con esas 8 combinaciones. Luego, ¿cómo hago un programa que dadas n variables me genere todos los arrays posibles, es decir, 2^n arrays?

Muchísimas gracias!  ;D
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

ivancea96

Fíjate en una de las columnas. ¿Cada cuánto cambia el número? En la segunda, cada 2 valores, cambia.
Si puedes hacerlo para 1 columna, puedes hacerlo para cualquiera o para una tabla completa.

Serapis

Es más sencillo.

Cada fila es un número que va desde 0 hasta 2^n-1
para tres variables (n=3, son 8 combinaciones, que van del 000, al 111)
Si llenas un array con los valores 0 a 255, tienes lo que quieres con 8 'variables', Si precisas verlo en formato binario, pásalo a texto. Aquí un ejemplo en pseudocodigo.


array de string = Funcion Binario2alaN(entero n)
entero j, k, v
string vBin
array de string ArrayBin(0 a (2^n)-1))

bucle para k desde 0 a (2^n)-1))
    v = k
    bucle para j desde 0 a n-1
       vbin = (v and 1).ToString concatenadodelantede vbin
       v = (v\2)       
    fin bucle
    ArrayBin(k)= vBin
    vBin = ""

    devolver ArrayBin
Fin bucle

JonaLamper

Hum... no consigo ver claro el código, NEBIRE.
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

Serapis

Te decía que los números del 0-7 (para 3bits) ó 0-225 (para 8 bits), así en orden... ya mantienen esa estructura de bits que quieres.

...y que si quieres verlo con caracteres binarios (en texto), puedes usar un bucle externo (0-7; 0-255) para convertir cada número en un texto binario (el bucle interno, se usa para recorree los bits de cada número).