def upor_vezja(niz): '''Izračuna upor vezja s pomočjo sklada.''' print(niz) sklad = Sklad() for znak in niz.split(): if znak in 'VZ': drugiEl = sklad.poberi() prviEl = sklad.poberi() sklad.vstavi(nadomestni_upor(float(prviEl), float(drugiEl), znak)) else: # Imamo število sklad.vstavi(float(znak)) return sklad.poberi()
def vrednost_rpn(niz): '''Izračuna vrednost RPN izraza preko tega, da po dve števili shranjujemo v sklad.''' s = Sklad() for znak in niz.split(): try: int(znak) s.vstavi(znak) # Število dodamo v sklad except: prvoSt = s.poberi() drugoSt = s.poberi() s.vstavi(str(eval(prvoSt + znak + drugoSt))) return int(s.poberi())
def obicajni_zapis(izraz): '''Vrne običanji zapis računanja.''' sklad = Sklad() obicajni_izraz = '' for znak in izraz.split(): try: int(znak) sklad.vstavi(znak) # Število dodamo v sklad except: drugiIzraz = sklad.poberi() prviIzraz = sklad.poberi() obicajni_izraz sklad.vstavi('({0} {1} {2})'.format(prviIzraz, znak, drugiIzraz)) return sklad.poberi()
def pregled_po_skladu(zacetno_drevo): '''pregleda drevo s skladom''' sklad = Sklad() sklad.vstavi(zacetno_drevo) while not sklad.prazen(): drevo = sklad.poberi() if not drevo.prazno: sklad.vstavi(drevo.levo) sklad.vstavi(drevo.desno) yield drevo.podatek
def oklepaji(niz): '''Preveri, ali so oklepaji pravilno gnezdeni. Uporaba sklada.''' sklad = Sklad() for znak in niz: if znak in OKLEPAJI: sklad.vstavi(znak) elif znak in OKLEPAJI.values(): if sklad.prazen(): return False if not OKLEPAJI[sklad.poberi()] == znak: return False if not sklad.prazen(): return False return True
def max_globina(niz): '''Poišče globino najbolj globoko gnezdenega para oklepajev.''' sklad = Sklad() globina = 0 naj_globina = 0 for znak in niz: if znak in OKLEPAJI: sklad.vstavi(znak) globina += 1 if globina > naj_globina: naj_globina = globina elif znak in OKLEPAJI.values(): if sklad.prazen(): return None if not OKLEPAJI[sklad.poberi()] == znak: return None globina -= 1 if not sklad.prazen(): return None return naj_globina