Riešenie 12. cvičenia


  1. Riešenie:

    def hviezdicky(n):
        m = 0
        while n != 0:
            print (' '*m + '*'*(2*n-1))
            n = n-1
            m = m+1
    

  1. Riešenie:

    def tostr(cislo):
        if cislo <= 9:
            return chr(cislo + 48)
        return tostr(cislo//10) + tostr(cislo%10)
    

  1. Riešenie:

    def toint(retazec):
        if len(retazec) == 1:
            return ord(retazec[0]) - 48
        return toint(retazec[:-1])*10 + toint(retazec[-1])
    

  1. Riešenie:

    def pocet(znak, retazec):
        if len(retazec) == 0:
            return 0
        if retazec[0] == znak:
            return 1 + pocet(znak, retazec[1:])
        return pocet(znak, retazec[1:])
    

    alebo:

    def pocet(znak, retazec):
        if len(retazec) == 0:
            return 0
        return (retazec[0]==znak) + pocet(znak, retazec[1:])
    

  1. Riešenie:

    def pocet(znak, retazec):
        if len(retazec) == 0:
            return 0
        stred = len(retazec)//2 + 1
        return (retazec[0]==znak) + pocet(znak, retazec[1:stred]) + pocet(znak, retazec[stred:])
    

    alebo:

    def pocet(znak, retazec):
        if len(retazec) == 0:
            return 0
        if len(retazec) == 1:
            return int(retazec[0]==znak)
        stred = len(retazec) // 2
        return pocet(znak, retazec[:stred]) + pocet(znak, retazec[stred:])
    

  1. Riešenie:

    def nsd(a, b):
        if b == 0:
            return a
        return nsd(b, a%b)
    

  1. Riešenie:

    def sucet(zoznam):
        if len(zoznam) == 0:
            return 0
        return zoznam[0] + sucet(zoznam[1:])
    

  1. Riešenie:

    def dve_hodnoty(zoznam):
        if zoznam == []:
            return 0, 0
        if len(zoznam) == 1:
            return 1, zoznam[0]
        stred = len(zoznam) // 2
        p1, s1 = dve_hodnoty(zoznam[:stred])
        p2, s2 = dve_hodnoty(zoznam[stred:])
        return p1+p2, s1+s2
    

  1. Riešenie:

    def sucet2(zoznam):
        if zoznam == []:
            return 0
        if len(zoznam) == 1:
            if type(zoznam[0]) == list:
                return sucet2(zoznam[0])
            else:
                return zoznam[0]
        stred = len(zoznam) // 2
        return sucet2(zoznam[:stred]) + sucet2(zoznam[stred:])
    

  1. Riešenie:

    def strom(n, d, farba='red'):
        t.fd(d)
        if n == 0:
            t.dot(18, farba)
        else:
            t.lt(40)
            strom(n-1, d*0.7, 'red')
            t.rt(75)
            strom(n-1, d*0.6, 'yellow')
            t.lt(35)
        t.bk(d)
    

  1. Riešenie:

    def stvorce(n, a):
        t.fd(a/2)
        if n > 0:
            t.lt(45)
            stvorce(n-1, a * 2**0.5 / 2)
            t.rt(45)
        t.fd(a/2)
        t.lt(90)
        for i in range(3):
            t.fd(a)
            t.lt(90)
    

  1. Riešenie:

    def trojuholniky(n, a):
        t.fd(a/2)
        if n > 0:
            t.lt(60)
            trojuholniky(n-1, a/2)
            t.rt(60)
        t.fd(a/2)
        t.lt(120)
        for i in range(2):
            t.fd(a)
            t.lt(120)
    

  1. Riešenie:

    def kriziky(n, d):
        if n > 0:
            for i in range(4):
                t.fd(d)
                if n > 1:
                    t.rt(45)
                    kriziky(n-1, d/3)
                    t.lt(45)
                t.bk(d)
                t.rt(90)
    

    a vylepšená verzia:

    def kriziky(n, d, p=4):
        if n > 0:
            for i in range(p):
                t.fd(d)
                if n > 1:
                    t.rt(180/p)
                    kriziky(n-1, d/3, p)
                    t.lt(180/p)
                t.bk(d)
                t.rt(360/p)