From 25706258c964d3b143d25e0eee3b2164cb34cace Mon Sep 17 00:00:00 2001 From: a01662934 <156042976+a01662934@users.noreply.github.com> Date: Mon, 8 Jan 2024 22:51:58 -0500 Subject: [PATCH] Update relation_analyser.py --- labs/01/relation_analyser.py | 112 +++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 32 deletions(-) diff --git a/labs/01/relation_analyser.py b/labs/01/relation_analyser.py index 6fd8b91..ff52fae 100644 --- a/labs/01/relation_analyser.py +++ b/labs/01/relation_analyser.py @@ -1,36 +1,84 @@ -import graphviz # https://graphviz.readthedocs.io/en/stable/index.html - -def analyze(val): - """ - Here goes your code to do the analysis - 1. Reflexive: aRa for all a in X, - 2. Symmetric: aRb implies bRa for all a,b in X - 3. Transitive: aRb and bRc imply aRc for all a,b,c in X, - """ - Reflexive = False - Symmetric = False - Transitive = False - - return Reflexive,Symmetric,Transitive - -def plot(): - """ - Here goes your code to do the plot of the set - """ - g = graphviz.Digraph('G', filename='hello.gv') - g.edge('Hello', 'World') - g.view() +#Aracelli Boza A01662934 +def esReflexiva(pares): + for elemento in set([par[0] for par in pares]): + if (elemento, elemento) not in pares: + return False + return True + +def esSimetrica(pares): + for par in pares: + inverso = (par[1], par[0]) + if inverso not in pares: + return False + return True + +def esTransitiva(pares): + for i in pares: + for j in pares: + if i[1] == j[0]: + compuesto = (i[0], j[1]) + if compuesto not in pares: + return False + return True + +def imprimirDigraph(pares): + digraph = "digraph example {\n rankdir=LR;\n node [shape = circle];\n" + for par in pares: + digraph += f"\t{par[0]} -> {par[1]} ;\n" + digraph += "}" + print(digraph) + +def ingresar_pares(): + pares = [] + + try: + numPares = int(input("Ingrese el número de pares: ")) + except ValueError: + print("Ingresa un valor válido para el número de pares") + return [] + + for _ in range(numPares): + try: + x = int(input("Ingrese el primer elemento del par ordenado: ")) + y = int(input("Ingrese el segundo elemento del par ordenado: ")) + par = (x, y) + pares.append(par) + except ValueError: + print("Ingresa valores válidos para los elementos del par") + return pares def main(): - print("Hello World analyzing input!") - val = input("Enter your set: ") - print(val) - Reflexive,Symmetric,Transitive = analyze(val) - print(f"\ - 1. Reflexive: {Reflexive} \ - 2. Symmetric: {Symmetric} \ - 3. Transitive: {Transitive}") - plot() + pares = ingresar_pares() + + if not pares: + print("No se ingresaron pares. Bye") + return + + imprimirDigraph(pares) + + countEquivalencia = 0 + if esReflexiva(pares): + print("La relación es reflexiva") + countEquivalencia += 1 + else: + print("La relación no es reflexiva") + + if esSimetrica(pares): + print("La relación es simétrica") + countEquivalencia += 1 + else: + print("La relación no es simétrica") + + if esTransitiva(pares): + print("La relación es transitiva") + countEquivalencia += 1 + else: + print("La relación no es transitiva") + + if countEquivalencia == 3: + print("\nLa relación es de equivalencia") + else: + print("\nLa relación no es de equivalencia") if __name__ == "__main__": - main() + main()