es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Variable ficticia en función bool.

Tengo la tarea de hacer un programa que encuentre las variables ficticias en una función booleana (la función booleana tiene una forma como 010101010 …).

import itertools
a = 0
fict = 0
print("¿Cuántas variables?:")
args = int(input())
while True:
  print('La función:')
  func = input()
  if 2**args == len(func):
    break
for i in itertools.product('01', repeat=args):
    print(' '.join(i) + '  ' + func[a])
    print('-----------')
    fict += int(func[a])
    a += 1
matr = list(func)
b = None
iter = 2
check = 0
if fict % 2 != 0:
    print("No hay variables ficticias")
if fict % 2 == 0:
    for k in range(args):
        for s in range(2**check):
            if matr[:] == matr[:]:

<pre><code>    check+=1
</code></pre>

Algoritmo para reconocer una variable ficticia a partir de una tabla de verdad.

  • Para la variable x1, se comparan las mitades de la columna de los valores de la función: la superior y la inferior, ya que es en la mitad superior donde x1 = 0, y en la mitad inferior, x1 = 1; si coinciden, entonces la variable x1 es ficticia;

  • para la variable x2, se comparan los cuartos de columna en cada mitad, ya que es en los cuartos superiores donde x2 = 0, y en los cuartos inferiores x2 = 1; si los cuartos en cada mitad coinciden, entonces la variable x2 es ficticia;

  • y así sucesivamente (los cuartos son seguidos por 1/8, 1/16, …).

Y no entiendo cómo hacer este algoritmo en Python o tal vez hay algoritmos mucho más fáciles.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para implementar el algoritmo anterior en Python, puede modificar el código dado de la siguiente manera:

    import itertools
    
    print("¿Cuántas variables:")
    num_vars = int(input().strip())
    
    # Obtener la función como entrada y verificar si es válida
    while True:
        print('Ingrese la función:')
        func = input().strip()
        if 2 ** num_vars == len(func):
          break
        else:
          print("Función inválida, por favor inténtelo de nuevo.")
    
    # Inicializar una lista para almacenar las variables ficticias
    fictitious_vars = []
    
    # Comparar las mitades superior e inferior para cada variable
    for i in range(num_vars):
        segments = 2 ** (num_vars - i - 1)
        upper_half = func[0:segments]
        lower_half = func[segments:2*segments]
        if upper_half == lower_half:
            fictitious_vars.append(i)
        func = lower_half
    
    # Imprimir las variables ficticias, si las hay
    if fictitious_vars:
        print("Las siguientes variables son ficticias:")
        for var in fictitious_vars:
            print(f"x{var+1}")
    else:
        print("No hay variables ficticias.")
    

    Explicación del código:

    1. Se le pide al usuario que ingrese el número de variables en la función.
    2. El código obtiene la función como entrada y verifica si es válida mediante la comparación de su longitud con 2^num_vars.
    3. Se comparan las mitades superior e inferior de la función para cada variable, comenzando desde x1 hasta x<num_vars>.
    4. Si las mitades superior e inferior son iguales, se considera que la variable es ficticia y se agrega su índice a una lista de variables ficticias.
    5. Se imprime la lista de variables ficticias, si las hay, de lo contrario se imprime un mensaje indicando que no hay variables ficticias.

    Por favor, tenga en cuenta que esta implementación supone que la entrada de la función consiste solo en 0's y 1's. Si hay otros caracteres, es posible que deba modificar el código en consecuencia.

Comments are closed.