Mòdul terme
1 def str_a_terme(s):
2 """
3 Converteix de String a terme.
4 -----------------------------
5
6 Donat un string s format únicament pels caràcters
7 '0', '1' i '2', retorna el terme que li correspon.
8
9 >>> str_a_terme('0')
10 (0,)
11 >>> str_a_terme('1')
12 (1,)
13 >>> str_a_terme('01002')
14 (0, 1, 0, 0, 2)
15 >>> str_a_terme('11220020122')
16 (1, 1, 2, 2, 0, 0, 2, 0, 1, 2, 2)
17
18 """
19
20 terme=[]
21 for caracter in s:
22 terme.append(int(caracter))
23 return tuple(terme)
24
25
26
27 def terme_to_str(t):
28 """
29 Converteix de terme a String.
30 -----------------------------
31
32 Donat un terme t retorna l'string que li correspon.
33
34 >>> terme_to_str((0,1,0,0,2))
35 '01002'
36 >>> terme_to_str((0,))
37 '0'
38 >>> terme_to_str((2,2,1,1,0,0))
39 '221100'
40
41 """
42 cadena=''
43 for caracter in t:
44 cadena+=str(caracter)
45 return cadena
46
47
48 def compta(t, d=1):
49 """
50 Compta dígits de valor d.
51 -------------------------
52
53 Funció que retorna el nombre de digits amb valor d que conté el
54 terme t. El paràmetre d és opcional i el seu valor per defecte és 1.
55
56 >>> compta((1, 1, 2, 2, 0, 0, 2, 0, 1, 2, 2))
57 3
58 >>> compta((1, 1, 2, 2, 0, 0, 2, 0, 1, 2, 2),2)
59 5
60 >>> compta((1, 1, 2, 2, 0, 0, 2, 0, 1, 2, 2),0)
61 3
62 >>> compta((1,1,2,2,1,2,1,1,),0)
63 0
64 >>> compta((1,1,2,2,1,2,1,1,),1)
65 5
66 """
67
68 items=0
69 for digit in t:
70 if digit==d:
71 items+=1
72 return items
73
74
75 def es_minterm(t):
76 """
77 Comprova si es minterm.
78 ------------------------
79 Retorna True si el terme t representa un minterm.
80
81 >>> es_minterm((1,1,1,0,0,1,0))
82 True
83 >>> es_minterm((0,0,0))
84 True
85 >>> es_minterm((0,1,2))
86 False
87 """
88 return potencia(t)==0
89
90
91 def potencia(t):
92 """
93 Comprova els digits de valor 2.
94 -------------------------------
95
96 Funció que retorna en nombre de digits 2 del terme t.
97
98 >>> potencia((0,1,0,1,0,0))
99 0
100 >>> potencia((0,1,0,2,0,1))
101 1
102 >>> potencia((0,1,0,2,0,2))
103 2
104 """
105
106 return compta(t,2)
107
108
109 def son_reduibles(t1, t2):
110 """
111 Comprova reductibilitat.
112 ------------------------
113
114 Funció que retorna True si els termes t1 i t2 es poden reduir
115 a un implicant, ́és a dir, si t1 i t2 es diferencien només en
116 un dígit.
117
118 >>> son_reduibles((0,1,0,1),(1,1,0,1))
119 True
120 >>> son_reduibles((2,1,1,0),(2,1,0,0))
121 True
122 >>> son_reduibles((2,1,0,1),(0,1,0,1))
123 True
124 >>> son_reduibles((0,1,1,1),(1,1,0,1))
125 False
126 >>> son_reduibles((0,1,0,1),(1,2,0,1))
127 False
128 """
129 resultat=[]
130 for i in range(0,len(t1)):
131 if t1[i]==t2[i]:
132 resultat.append(0)
133 else:
134 resultat.append(1)
135 return compta(tuple(resultat))==1
136
137
138 def implicant(t1, t2):
139 """
140 Calcula implicant.
141 ------------------
142
143 Funció que retorna l’implicant dels termes t1 i t2. S’assumeix
144 que t1 i t2 tenen un implicant, altrament el resultat de la
145 operació no està definit.
146
147 >>> implicant((0,1,0,1),(1,1,0,1))
148 (2, 1, 0, 1)
149 >>> implicant((2,1,1,0),(2,1,0,0))
150 (2, 1, 2, 0)
151 >>> implicant((2,1,0,1),(0,1,0,1))
152 (2, 1, 0, 1)
153 """
154 resultat=[]
155 for i in range(0,len(t1)):
156 if t1[i]==t2[i]:
157 resultat.append(t1[i])
158 else:
159 resultat.append(2)
160 return tuple(resultat)
161
162
163 def representa(i,t):
164 """
165 Comprova representació.
166 -----------------------
167
168 Funció que retorna True si l'implicant i representa el terme i.
169
170 >>> representa((2,0,0,1),(1,2,0,1))
171 False
172 >>> representa((2,0,0,1),(1,0,0,1))
173 True
174 >>> representa((2,1,0,1),(1,0,2,1))
175 False
176 >>> representa((2,1,2,1),(1,1,2,1))
177 True
178 """
179
180 implicants_l=list(i)
181 terme=list(t)
182 for j in range(0,len(implicants_l)):
183 if implicants_l[j]==2:
184 terme[j]=2
185 return implicants_l==terme