[WikiItic] [TitleIndex] [WordIndex

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)

2023-07-03 11:46