Informatika2-2016/Gyakorlat12Megold

A MathWikiből
(Változatok közti eltérés)
17. sor: 17. sor:
 
* Számoljuk ki egy ilyen műveletsor értékét!
 
* Számoljuk ki egy ilyen műveletsor értékét!
  
class Node(object):
+
<python>
    def __init__(self, kappa):
+
class Node(object):
        i = -1
+
    def __init__(self, kappa):
        if kappa.find("+") != -1:
+
        i = -1
            i = kappa.find("+")
+
        if kappa.find("+") != -1:
        elif kappa.find("-") != -1:
+
            i = kappa.find("+")
            i = kappa.find("-")
+
        elif kappa.find("-") != -1:
        elif kappa.find("*") != -1:
+
            i = kappa.find("-")
            i = kappa.find("*")
+
        elif kappa.find("*") != -1:
        elif kappa.find("/") != -1:
+
            i = kappa.find("*")
            i = kappa.find("/")
+
        elif kappa.find("/") != -1:
       
+
            i = kappa.find("/")
        if i != -1:
+
       
            self.data = kappa[i]
+
        if i != -1:
            self.left = Node(kappa[:i])
+
            self.data = kappa[i]
            self.right = Node(kappa[i + 1:])
+
            self.left = Node(kappa[:i])
        else:
+
            self.right = Node(kappa[i + 1:])
            self.data = float(kappa)
+
        else:
            self.left = None
+
            self.data = float(kappa)
            self.right = None
+
            self.left = None
           
+
            self.right = None
    def calculate(self):
+
           
        if self.data == "+":
+
    def calculate(self):
            return self.left.calculate() + self.right.calculate()
+
        if self.data == "+":
        elif self.data == "-":
+
            return self.left.calculate() + self.right.calculate()
            return self.left.calculate() - self.right.calculate()
+
        elif self.data == "-":
        elif self.data == "*":
+
            return self.left.calculate() - self.right.calculate()
            return self.left.calculate() * self.right.calculate()
+
        elif self.data == "*":
        elif self.data == "/":
+
            return self.left.calculate() * self.right.calculate()
            return self.left.calculate() / self.right.calculate()
+
        elif self.data == "/":
        else:
+
            return self.left.calculate() / self.right.calculate()
            return self.data
+
        else:
 +
            return self.data
 +
</python>
  
 
=== Egy kis állapotgép ===
 
=== Egy kis állapotgép ===
 
* Adott egy sztring. Cseréljük le azokat a karaktereket $ jelre, amelyek zárójelek között vannak (a zárójeleket is beleértve)! Figyelem, a zárójelek lehetnek egymásba ágyazva is, tehát, ha a bemeneti sztring ''(xc)aa(c(b))'', akkor a kimenet ''$$$$aa$$$$$$'' legyen!
 
* Adott egy sztring. Cseréljük le azokat a karaktereket $ jelre, amelyek zárójelek között vannak (a zárójeleket is beleértve)! Figyelem, a zárójelek lehetnek egymásba ágyazva is, tehát, ha a bemeneti sztring ''(xc)aa(c(b))'', akkor a kimenet ''$$$$aa$$$$$$'' legyen!
  
def zarojel_csere(kappa):
+
<python>
    s = ""
+
def zarojel_csere(kappa):
    level = 0
+
    s = ""
    for c in kappa:
+
    level = 0
        if c == "(":
+
    for c in kappa:
            level += 1
+
        if c == "(":
        if level > 0:
+
            level += 1
            s += "$"
+
        if level > 0:
        else:
+
            s += "$"
            s += c
+
        else:
        if c == ")":
+
            s += c
            level -= 1
+
        if c == ")":
    return s
+
            level -= 1
 +
    return s
 +
</python>

A lap 2016. május 16., 12:48-kori változata

Tartalomjegyzék

Feladatok

A feladatok megoldásához szükség lesz az előadáson használt kódra. Az előadás anyagát innen lehet letölteni.

Bevezető

Másoljuk be a bináris fa definícióját. Ezen az osztályon fogunk dolgozni.

  • Írjunk egy count(self) metódust, ami megszámolja a fa elemeinek a számát!
  • Írjunk egy sum(self) metódust, ami a fa összes csúcsában lévő értékeket összegzi!
  • Írjunk egy height(self) metódust, ami megmondja, hogy milyen magas a fa!
  • Írjunk egy is_list(self) metódust, ami megmondja, hogy a bináris fa listává fajult-e. Egy bináris fa akkor fajult listává, ha minden csúcsának legfeljebb egy gyereke van.


Számológép

Az előadáson mutatott számológép-kezdeményt feljesztjük tovább. Kezdjük új fájlba. Először hozzunk létre egy üres Node osztályt!

  • Írjuk meg a konstruktort a következőképp. A bemenet egy sztring, ezt kell értelmeznünk. Egyelőre a bemeneti sztring nem tartalmazhat zárójelet, sem negatív számokat.
    • Ha a sztring egy szám, akkor egyszerűen eltároljuk a self.data változóban mint számot.
    • Ha nem szám (azaz a négy alapművelet egyike szerepel a sztringben), akkor szétvágjuk a sztringet két részre a legalacsonyabb precedenciaszintű művelet mentén. Mivel zárójeleket nem engedünk meg, a legalacsonyabb szintű művelet az első + vagy - jel, ha nincs ilyen, akkor pedig az első * vagy /. A self.data értéke a műveleti jel lesz mint karakter, a bal, illetve a jobb gyereke pedig a sztring két széthasított része alapján épüljön fel!
  • Számoljuk ki egy ilyen műveletsor értékét!
class Node(object):
    def __init__(self, kappa):
        i = -1
        if kappa.find("+") != -1:
            i = kappa.find("+")
        elif kappa.find("-") != -1:
            i = kappa.find("-")
        elif kappa.find("*") != -1:
            i = kappa.find("*")
        elif kappa.find("/") != -1:
            i = kappa.find("/")
 
        if i != -1:
            self.data = kappa[i]
            self.left = Node(kappa[:i])
            self.right = Node(kappa[i + 1:])
        else:
            self.data = float(kappa)
            self.left = None
            self.right = None
 
    def calculate(self):
        if self.data == "+":
            return self.left.calculate() + self.right.calculate()
        elif self.data == "-":
            return self.left.calculate() - self.right.calculate()
        elif self.data == "*":
            return self.left.calculate() * self.right.calculate()
        elif self.data == "/":
            return self.left.calculate() / self.right.calculate()
        else:
            return self.data

Egy kis állapotgép

  • Adott egy sztring. Cseréljük le azokat a karaktereket $ jelre, amelyek zárójelek között vannak (a zárójeleket is beleértve)! Figyelem, a zárójelek lehetnek egymásba ágyazva is, tehát, ha a bemeneti sztring (xc)aa(c(b)), akkor a kimenet $$$$aa$$$$$$ legyen!
def zarojel_csere(kappa):
    s = ""
    level = 0
    for c in kappa:
        if c == "(":
            level += 1
        if level > 0:
            s += "$"
        else:
            s += c
        if c == ")":
            level -= 1
    return s
Személyes eszközök