Algoritmia - expressiones rec. con ()

 
Vista:

expressiones rec. con ()

Publicado por Sergi (1 intervención) el 12/03/2001 12:33:03
donde encontrar algun algoritmo(recursivo) para
evaluar una expression que contenga (),+,- y &
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Evaluación recursiva de expresiones

Publicado por Alejandro (307 intervenciones) el 27/02/2024 20:47:01
Sergi, aquí tienes un ejemplo de un algoritmo recursivo en Python para evaluar expresiones que contienen paréntesis, suma, resta y multiplicación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
def evaluar_expresion(expresion):
    # Función para evaluar una expresión matemática
    # que contiene paréntesis, suma, resta y multiplicación.
 
    # Función para calcular el resultado de una operación binaria
    def operar(operador, operandos):
        if operador == '+':
            return operandos[0] + operandos[1]
        elif operador == '-':
            return operandos[0] - operandos[1]
        elif operador == '&':
            return operandos[0] & operandos[1]
 
    # Función auxiliar para encontrar el índice de un paréntesis de cierre
    def encontrar_paréntesis_cierre(exp):
        stack = []
        for i, char in enumerate(exp):
            if char == '(':
                stack.append(i)
            elif char == ')' and stack:
                stack.pop()
                if not stack:
                    return i
        return -1
 
    # Función principal de evaluación recursiva
    def evaluar_recursivo(exp):
        # Buscar paréntesis de cierre más externo
        idx_cierre = encontrar_paréntesis_cierre(exp)
 
        # Si no hay paréntesis, evaluar la expresión directamente
        if idx_cierre == -1:
            partes = exp.split()
            if len(partes) == 1:
                return int(exp)
            else:
                operador = partes[1]
                operandos = [int(partes[0]), int(partes[2])]
                return operar(operador, operandos)
 
        # Si hay paréntesis, evaluar la expresión interna de manera recursiva
        else:
            parte_anterior = exp[:idx_cierre]
            parte_posterior = exp[idx_cierre + 1:]
            resultado_interno = evaluar_recursivo(exp[1:idx_cierre])
 
            # Unir las partes y continuar evaluando recursivamente
            nueva_expresion = f"{parte_anterior} {resultado_interno} {parte_posterior}"
            return evaluar_recursivo(nueva_expresion)
 
    # Llamar a la función principal con la expresión completa
    return evaluar_recursivo(expresion)
 
# Ejemplo de uso
expresion = "(3 + 5) & 7"
resultado = evaluar_expresion(expresion)
print(f"Resultado de la expresión '{expresion}': {resultado}")

Este algoritmo evalúa expresiones que contienen paréntesis, suma, resta y la operación lógica 'and' (`&`). Puedes adaptarlo según tus necesidades específicas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar