Mòdul Reducció
1 from fbool import *
2 from minim import *
3 from string import *
4 import os
5
6 def caracters_valids(cadena):
7
8 """
9 Comproba caracters no vàlids
10 -----------------------------
11 Funció que retorna False si troba caracters
12 no vàlids en la cadena d'entrada.
13
14 >>> caracters_valids("01010101")
15 True
16 >>> caracters_valids("OlOlOlOl")
17 False
18 >>> caracters_valids("011101m00")
19 False
20 >>> caracters_valids("@")
21 True
22
23 """
24 valids = "@10"
25 for caracter in cadena:
26 if caracter not in valids:
27 return False
28 return True
29
30 def calcul_variables(funcio):
31 """
32 Dona nom a les variables.
33 -------------------------
34 Funció que retorna una cadena de caràcters
35 d'acord amb el nombre de variables que contingui
36 la funció d'entrada.
37 >>> calcul_variables([(0, 0, 1, 0, 1), (0, 1, 0, 1, 0), (1, 2, 1, 1, 1), (1, 1, 1, 1, 2)])
38 'A,B,C,D,E'
39 >>> calcul_variables([(0, 1, 0, 1, 0, 0, 1), (1, 0, 0, 1, 1, 1, 1), (1, 1, 1, 1, 2, 0, 0)])
40 'A,B,C,D,E,F,G'
41 """
42 cadena=""
43 for i in range(0,fbool.nvars(funcio)):
44 cadena=cadena+ ascii_uppercase[i]+','
45 return cadena[:len(cadena)-1]
46
47 def interficie():
48 """
49 Mostra la Interficie d'usuari.
50 -------------------------------
51 Funció que esborra la pantalla i imprimeix
52 la interficie d'usuari.
53 """
54 os.system("clear")
55 print "="*80
56 print "%40s"%"R E D U C T I O"
57 print "="*80
58 print "\nIntrodueix els minterms (arroba -@- per acabar)\n"
59 print "-"*80
60 return
61
62
63 if __name__=="__main__":
64 interficie()
65 entrada=''
66 funcio=[]
67 while entrada!='@':
68 entrada=raw_input("Minterm: ")
69 if entrada!="":
70 if caracters_valids(entrada):
71 funcio.append(entrada)
72 else:
73 print "Error: Caràcter no permés"
74 print "Unicament zeros (0) i uns (1). Arroba per acabar (@)"
75 funcio.pop()
76 if funcio!=[]:
77 nova_funcio=minimitza(funcio)
78 formula=fbool.fbool_a_str(nova_funcio)
79 variables=calcul_variables(nova_funcio)
80 if formula=="" :
81 formula="1"
82 print "\nla funcio minimitzada es:\n"
83 print "%30s"%"f(%s) = %s\n"%(variables,formula)