Sections

2017-10-08

Jak mi (ne)jde Python

Programuje se na anglickee klaavesnici, kde nejsou zsaadnee haaczky, czaarky nebo krouzsky, takzse sprzsezskovyy pravopis se vracii.

Pocziitacze na FEL pro zkouszky z programovaanii majii Core i5-4460, 16 GB RAM, iGPU, 500 GB HDD. Vzsdytj jedinyy lepszii pocziitacz, nezs je tohle (kteryy je shodou okolnostii taky Haswell), maam doma jenom jaa. Na Omskee jsme djelali na Core 2 Duo a v normaalniich uczebnaach byly na prezentace Pentia a Celerony D. 2x jsem nevydrzsel czekat a przsepojil jsem D-SUB do meeho netbooku s Atomem, jenzs byl citelnje rychlejszii. Atom N550. Netbook. Rychlejszii nezs Pentium D. Vyhodit a nechat studenty nosit si vlastnii.

Pozitivnii vec je to, zse si nemusiim hliidat strzsedniiky. Pocziinaje 4. programem to nefunguje, jak maa, protozse to liip neumim. Co bych taky mjel czekat, kdyzs ten jazyk pouzsiivaam teprve paar dnii. To nenii GeSeL, kteryy muuzsete vysvjetlit bjehem 2 briifinguu.

Naopak negativnii vjec je to, zse Python nemaa goto, takzse se nemuuzu vraatit na zaczaatek programu a djelat interaktivnjejszii hry. Naprzsiiklad ta loterie nemohla byyt dotazsena do dokonce, protozse to bych musel financznii obnos uklaadat do souboru, kteryy by se potom dal snadno editovat, cziimsz by i BFU by moh snadno podvaadjet. Mozsnaa "while input("Chces hrat (a/n)? ") == "a": ", ale to bych musel celyy kood odsazovat.



===================================================

# vstup.py


vek = int(input("18+. Zadej svuj vek: "))
if vek < 18:
    print("Narodil ses v roce "+str((2017-vek))+", ty infantilni milenale!")
else:
    print("Narodili jste se v roce "+str((2017-vek))+", velecteny pane.")
 
x = int(input("Zadej sem cele cislo (jinak to spadne): "))
print(x)
y = input("Napis sveho kandidata na prezidenta ve 4. padu (gramatika NYI): ")
print ("Volte "+str(y)+"! Skoncuje s EET, slimaky, zrusi biopaliva a blabla.")

===================================================

# ukoly1d.py


import math
print("Z math.py mame pi =",str(math.pi)+".")

strana = float(input("Zadej stranu ctverce: "))
print("Obvod je "+str(4*strana)+" j a obsah je "+str(strana**2)+" j^2.")

a = float(input("Ted zadej 1. stranu obdelnika: "))
b = float(input("A ted 2.: "))
print("Obvod je "+str(2*(a+b))+" j a obsah je "+str(a*b)+" j^2.")

r = float(input("A nyni prestoupime ke kruhu, jehoz mi zadas polomer: "))
print("Obvod je "+str(2*math.pi*r)+" j a obsah je "+str(math.pi*r**2)+" j^2.")

print("Kdyby to byla koule, povrch by byl "+str(4*math.pi*r**2)+" j^2 a objem "+str((4/3)*math.pi*r**3)+" j^3.")

a = float(input("Ted mi dej jen tak 2 cisla, nejdriv 1.: "))
b = float(input("A ted 2.: "))
print("Soucet je "+str(a+b)+", rozdil je "+str(a-b)+" a soucin je "+str(a*b)+".")

swap = a
a = b
b = swap
print("Po prohozeni je v a "+str(a)+" a v b "+str(b)+".")

print("Dekuju za pozornost.")
print("")

===================================================

# ukoly1o.py


#import math #Opravdu to mame zapotrebi, plytvat pameti?

a = float(input("1. rozmer kvadru: "))
b = float(input("2. rozmer kvadru: "))
c = float(input("3. rozmer kvadru: "))
print("Objem je "+str(a*b*c)+" j^3.")
print("")

x1 = float(input("X-ova souradnice 1. bodu: "))
y1 = float(input("Y-ova souradnice 1. bodu: "))
x2 = float(input("X-ova souradnice 2. bodu: "))
y2 = float(input("Y-ova souradnice 2. bodu: "))
d = ((x2-x1)**2+(y2-y1)**2)**(1/2) #obejdu se bez math.py
print("Vzdalenost mezi ["+str(x1)+";"+str(y1)+"] a ["+str(x2)+";"+str(y2)+"] je "+str(d)+" j.")
print("")

a = float(input("1. strana 3uhelnika: "))
b = float(input("2. strana 3uhelnika: "))
c = float(input("3. strana 3uhelnika: "))
s = (a+b+c)/2
obsah = (s*(s-a)*(s-b)*(s-c))**(1/2)
print("Obsah je "+str(obsah)+" j^2.")
print("")

x = float(input("Zadej cislo pro overeni sudosti a lichosti: "))
if x % 2 == 1:
    print(str(x)+" je liche cislo.")
elif x % 2 == 0:
    print(str(x)+" je sude cislo.")
else:
    print(str(x)+" je desetinne cislo, neni tedy ani liche ani sude.")
print("")

print("Jses ropny magnat a mas prazdny barel.")
r = float(input("Zadej polomer: "))
v = float(input("Zadej vysku: "))
l = float(input("Jak moc ropy tam chces nalit? "))
pi = 3.14159265358979323846264338327950288419750 #z hlavy
V = pi*r**2*v
h = l/(pi*r**2)
if V < l:
    print("Ten sud ma objem pouze "+str(V)+" j^3, takze ti "+str(l-V)+" j^3 preteklo.")
elif V > l:
    print("Do sudu by se veslo jeste "+str(V-l)+" j^3.")
    print("Hladina je ve vysce "+str(h)+" j ode dna, tedy "+str(v-h)+" j od vrchu.")
else:
    print("Sice se to tam presne veslo, ale mas to vrchovate.")
print("")

od = float(input("Zadej pocatek intervalu: "))
do = float(input("Zadej konec intervalu: "))
x = float(input("Zadej cislo, ktere chces proverit: "))
if od > do:
    print("Ty jses vul, tedka to musim prohodit.")
    od = od+do
    do = od-do
    od = od-do
if x >= od and x <= do:
    print("Cislo je prvkem uzavreneho intervalu <"+str(od)+";"+str(do)+">.")
else:
    print("Cislo neni prvkem uzavreneho intervalu <"+str(od)+";"+str(do)+">.")
print("")

a = float(input("Zadej 1. cislo: "))
b = float(input("Zadej 2. cislo: "))
if a > b:
    print("Vetsi cislo je "+str(a)+".")
elif b > a:
    print("Vetsi cislo je "+str(b)+".")
else:
    print("Zadana cisla jsou stejna.")
print("")

print("Konec programu.")

===================================================

# vzorecky.py


# Aternativni matematicka knihovnicka bez math.py

pi = 3.1415926535897932384626433832795028841975
euler = 2.718281828
phi = 1.618033
psi = 0.618033
sqrt2 = 1.4142
halfsqrt2 = 0.7071

def povrchKoule(r):
    return (4*pi*r**2)

def objemKoule(r):
    return ((4/3)*pi*r**3)

def povrchValce(r,v):
    return (2*pi*r*v+pi*r**2)

def objemValce(r,v):
    return (pi*r**2*v)

def vzdalenostBodu(x1,y1,x2,y2):
    return (abs((x2-x1)**2+(y2-y1)**2))**(1/2)
 
def heronuvVzorec(a,b,c)
    s = (a+b+c)/2
    obsah = (s*(s-a)*(s-b)*(s-c))**(1/2)
    return obsah

#def povrchKuzelu(r,v):
#    return ()

def objemKuzelu(r,v):
    return (pi*r**2*v)/3

#def povrch4bJehlanu(a,b,v):
#    return ()

def objem4bJehlanu(a,b,v):
    return (a*b*v)/3

===================================================

# ukoly1v.py


a = float(input("Stana a: "))
b = float(input("Stana b: "))
c = float(input("Stana c: "))
if a+b>c and a+c>b and b+c>a:
    if a**2+b**2>c**2 and a**2+c**2>b**2 and b**2+c**2>a**2:
        print("Takovy trojuhelnik je ostrouhly.")
    elif a**2+b**2<c**2 or a**2+c**2<b**2 or b**2+c**2<a**2:
        print("Takovy trojuhelnik je tupouhly.")
    else:
        print("Takovy trojuhelnik je pravouhly.")
else:
    print("Tento trojuhelnik nelze sestrojit.")
print("")

print("Normovana kvadraticka rovnice: a*x^2 + b*x + c = 0")
a = float(input("Koeficient a: "))
b = float(input("Koeficient b: "))
c = float(input("Koeficient c: "))
if a == 0:
    if b == 0:
        print("Rovnice neni kvadraticka, ani linearni. Reseni je "+str(-c)+".")
    else:
        print("Rovnice neni kvadraticka. Reseni je "+str(-c/b)+".")
else:
    d = b**2 - 4*a*c
    if d > 0:
        x1 = (-b + d**(1/2))/(2*a)
        x2 = (-b - d**(1/2))/(2*a)
        print("Rovnice ma 2 realna reseni, a sice "+str(x1)+" a "+str(x2)+".")
    elif d == 0:
        x = -b/(2*a)
        print("Rovnice ma jedine reseni, a to 2nasobny koren "+str(x)+".")
    else:
        print("Rovnice nema realne reseni.")
print("")

x1 = float(input("1. souradnice 1. bodu primky: "))
y1 = float(input("2. souradnice 1. bodu primky: "))
x2 = float(input("1. souradnice 2. bodu primky: "))
y2 = float(input("2. souradnice 2. bodu primky: "))
rise = y2-y1
run = x2-x1
if run == 0:
    print("Primka je kolma k ose x a rovnobezna s y, smernice je tedy +/- nekonecno.")
elif rise == 0:
    print("Primka je kolma k ose y a rovnobezna s x, smernice je tedy 0.")
elif run == rise:
    print("Primka je osou I. a III. kvadrantu, smernice je tedy 1.")
elif run == -rise:
    print("Primka je osou II. a IV. kvadrantu, smernice je tedy -1.")
else:
    slope = rise/run
    print("Smernice je "+str(slope)+".")
print("")

x1 = float(input("1. souradnice 1. bodu: "))
y1 = float(input("2. souradnice 1. bodu: "))
x2 = float(input("1. souradnice 2. bodu: "))
y2 = float(input("2. souradnice 2. bodu: "))
x3 = float(input("1. souradnice 3. bodu: "))
y3 = float(input("2. souradnice 3. bodu: "))
rise = y2-y1
run = x2-x1
if run == 0:
    print("1. 2 body tvori kolmici k ose x nebo jsou totozne, takze jejich smernice je +/- nekonecno, respektive nedefinovana. To bych musel osetrit, nacez nemam po 0,5 l Kozla (byl levnejsi nez Coca-Cola) mozkovou kapacitu.")
else:
    slope = rise/run
    #y = kx + q
    #q = y - kx
    offset = y1 - slope*x1
    if (slope*x3 + offset == y3): # dosadit do rovnice x3 a y3
        print("Tyto 3 body lezi na primce.")
    else:
        print("Tyto 3 body nelezi na primce.")
print("")

a = float(input("1. operand: "))
op = input("Operator: ")
b = float(input("2. operand: "))
if op == "+":
    print(a,"+",b,"=",a+b)
elif op == "-":
    print(a,"-",b,"=",a-b)
elif op == "*" or op == "x" or op == "X":
    print(a,"*",b,"=",a*b)
elif op == "/" or op == ":":
    if b == 0:
        print("Zkousis delit 0, co?")
    else:
        print(a,"/",b,"=",a/b)
elif op == "//":
    print("Celociselne",a,"/",b,"=",a//b)
elif op == "**" or op == "^":
    if a == 0 and b == 0:
        print("0^0 neni definovano.")
    else:
        print(a,"^",b,"=",a**b)
elif op == "%" or op == "mod":
    print(a,"%",b,"=",a%b)
else:
    print("Neznam tento operator.")
print("")

print("Konec programu.")

===================================================

# ukoly2d.py


import random

#### opakovani

korun = float(input("Kolik korun mate nahazet do automatu? "))
pade = input("Bere automat 50Kc (A/N)? ")
if pade == "A" or pade == "a" or pade == "Y" or pade == "y" or pade == "Z" or pade == "z" or pade == "J" or pade == "j" or pade == "1" or pade == "T" or pade == "t" or pade == "P" or pade == "p":
    kc50 = korun//50
    print("Padesatikorun: "+str(kc50))
    korun -= kc50*50
 
kc20 = korun//20
print("Dvacetikorun: "+str(kc20))
korun -= kc20*20
 
kc10 = korun//10
print("Desetikorun: "+str(kc10))
korun -= kc10*10
 
kc5 = korun//5
print("Petikorun: "+str(kc5))
korun -= kc5*5
 
kc2 = korun//2
print("Dvoukorun: "+str(kc2))
korun -= kc2*2
 
kc1 = korun//1
print("Jednokorun: "+str(kc1))
korun -= kc1
 
if korun > 0:
    print("Zbylo ti "+str(korun)+", ktere nemuzes zaplatit presne.")
    if korun >= 0.5:
        print("Zaokrouhleni te obere o "+str(1-korun)+" Kc.")
    else:
        print("Zaokrouhleni ti je usetri.")
else:
        print("Castka byla celociselna.")
print("")

#### rozcvicka

n = float(input("Zadej pocet iteraci: "))
if n != n//1:
    print("Desetinna cast zahozena.")
    n = n//1
n = int(n)
for i in range(n):
    print(str(i+1)+", zbyva "+str(n-i)+".")
print("")

#### 1

for i in range(1,n+1):
    print(str(i)+", ",end="")
print("")
print("")

#### 2

for i in range(n):
    print(str(n-i)+", ",end="")
print("")
print("")

#### 3

fak = 1
for i in range(n+1):
    print(str(i)+"! = "+str(fak))
    fak *= i+1
print("")

#### 4

cislo = int(input("Zadej domnele prvocislo: "))
slozene = 0
if cislo < 0:
    cislo = -cislo
    print("Ignoruji minus.")
maxdel = int(round(cislo**(1/2))+1) # nazdar LISPe
if cislo != 1 or cislo != 0:
    for i in range(2,maxdel):
        zb = cislo % i
        if zb == 0:
            print("Deleni cislem "+str(i)+" bylo beze zbytku.")
            slozene = 1
            #break #zakomentuj, pokud chces vsechny delitele
        else:
            print("Deleni cislem "+str(i)+" bylo se zbytkem "+str(zb)+".")
elif cislo == 1:
    print("1 prece neni prvocislo.")
    slozene = -1
elif cislo == 0:
    print("0 je delitelna vsim beze zbytku.")
    slozene = -1
else:
    print("Chyba vstupu.")
    slozene = 666
 
if slozene == 1:
    print("Cislo neni prvocislem.")
elif slozene == 0:
    print("Cislo skutecne je prvocislem.")
print("")

#### modifikace
print("Vsechna mensi prvocisla (nemusi napsat jednociferna):")  
slozene = 0
if cislo > 2:
    for delenec in range(2,cislo):
        for delitel in range(2,maxdel):
            zb = delenec % delitel
            if zb == 0:
                slozene = 1
                break
        if slozene == 0:
            print(delenec)
        slozene = 0
print("")

#### 5

b = input("Zadej par jednicek a nul: ")
l = len(b)
d = 0
chyba = 0
if int(b) > 1:
    for i in range(l):
        if b[i] == "1":
            d += 2**(l-i)
        elif b[i] != "0":
            print("Neplatny vstup.")
            chyba = 1
            break
elif int(b) == 0:
    d = 0
elif int(b) == 1:
    d = 1
if chyba != 1:
    print("Desitkove je to "+str(d)+".")
print("")

print("KONEC")
print("")

===================================================

# ukoly2o.py


#### 1 viz predchozi prvocisla

#### 2

n = int(input("Zadej velikost jednotkove matice: "))
for radka in range(1,n):
    for sloupec in range(1,n):
        if sloupec == n or radka == n:
            print("1",end=", ")
        else:
            print("0",end=", ")
    print("")
print("")

#### 3

n = int(input("Zadej liche cislo, nejmene 5: "))
if n % 2 == 0:
    print("LICHE jsem rikal! Beru o 1 vyssi.")
    ++n
if n < 5:
    print("NEJMENE 5 jsem rikal! Beru 5.")
    n = 5

# Vypis ASCII baracek:
# Sorryjako, neumim se pohybovat po polich v Pythonu.
if n == 3 :
    print(" X ")
    print("XXX")
    print("X X")
    print("XXX")
if n == 5 :
    print("  X  ")
    print(" X X ")
    print("XXXXX")
    print("X   X")
    print("X   X")
    print("X   X")
    print("XXXXX")
if n == 7 :
    print("   X   ")
    print("  X X  ")
    print(" X   X ")
    print("XXXXXXX")
    print("X     X")
    print("X     X")
    print("X     X")
    print("X     X")
    print("X     X")
    print("XXXXXXX")
if n == 9 :
    print("    X    ")
    print("   X X   ")
    print("  X   X  ")
    print(" X     X ")
    print("XXXXXXXXX")
    print("X       X")
    print("X       X")
    print("X       X")
    print("X       X")
    print("X       X")
    print("XXXXXXXXX")
if n == 11 :
    print("     X     ")
    print("    X X    ")
    print("   X   X   ")
    print("  X     X  ")
    print(" X       X ")
    print("XXXXXXXXXXX")
    print("X         X")
    print("X         X")
    print("X         X")
    print("X         X")
    print("X         X")
    print("X         X")
    print("X         X")
    print("XXXXXXXXXXX")

print("")

#pole[n+n//2][n];
#jdi na prostredek 1. radky
#napis tam "X"
#jdi o 1 dolu
#jdi o 1 doleva, napis tam "X", jdi zpatky a o 1 doprava, napis tam "X", jdi zpatky
#jdi o 1 dolu
#jdi o 2 doleva, napis tam "X", jdi zpatky a o 2 doprava, napis tam "X", jdi zpatky
#jdi o 1 dolu
#jdi na zacatek radky
#napis tam 5x za sebou "X"
#jdi o 1 dolu
#3x dej "X" po stranach a jdi dolu
#jdi na zacatek radky
#napis tam 5x za sebou "X"

#### vol1

def fibo(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return (fibo(n-2)+fibo(n-1))

n = int(input("Kolikaty clen Fibonacciho posloupnosti? "))
print(fibo(n))
print("")

#### vol2

a = int(input("1. cislo: "))
b = int(input("2. cislo: "))
# faktorizuj a, b - jak ulozit prvocinitele?
# najdi spolecne - neumim implementovat
gcd = 0
print("Nejvetsi spolecny delitel je "+str(gcd))
print("")

#### vol3

s = 0
if a>b:
    a = a + b
    b = a - b
    a = a - b
    print("Prohodil jsem to, aby to 2. cislo bylo vetsi.")
for i in range(a,b):
    s += i
print("Soucet cisel v uzavrenem intervalu <"+str(a)+";"+str(b)+"> je "+str(s)+".")
print("")

#### vol4 viz vcerejsi kalkulacka

#### vol5

import random
s = 0
x = 0
for i in range(10):
    x[i]=random.random()*100 # prej int neumi item assignment, tak to proste bude padat, stejne je to posledni cast
    print(x[i])
for i in range(10):
    s += x[i]
    print("Soucet je "+str(s)+".")
sort(x)
print("Nejvetsi cislo je "+str(x[0])+" a za nim je "+str(x[1])+".")
print("")

print("KONEC")
print("")

===================================================

# while.py


#### while1

import array

print("Primitivni scitac. Cisla odentrovavej, pro vyvolani vysledku dej 0.")
cisla=[]
cisla.append(0.0)
while cisla[-1] != 0.0:
    cisla.append(float(input("+ ")))
print ("Soucet techto cisel je "+str(sum(cisla))+".")
# TODO pocet cisel, pocet lichych cisel, nejvetsi, 2. nejvetsi
print("")

#### while2

a = int(input("A = "))
b = int(input("B = "))
cislo = a//b
cislo = b*(cislo+1)
print("Nejmensi cislo vetsi nez A a delitelne B je "+str(cislo)+".")
print("")

#### while3

deci = int(input("Zadej cislo pro prevod: "))
binar = []
if deci != 1 and deci != 0:
    binar.append(deci%2)
    deci //= 2
if deci == 1:
    binar.append(1)
elif deci == 0:
    binar.append(1)
print("Binarne je to "+str(binar)+".")
print("")

#### while 4,5

import random
max = 100
cislo = int(max * random.random()) + 1
hadani = int(input("Hadej cislo mezi 1 a 100: "))
if hadani == "poddat":
    print("Bylo to "+str(cislo)+".")
elif hadani == "ne ty":
    hadani = 50
    pokus = 1
    anone = input("Je tvoje cislo vetsi nez "+str(hadani)+" (a/n)? ")
    if anone == "A" or anone == "a":
        hadani += 100//2**(pokus+1)
    else:
        hadani -= 100//2**(pokus-1)
    ++pokus
    # TODO opakovane puleni intervalu
    print("Myslel sis"+str(hadani)+". (NYI)")
elif hadani == "gtfo":
##problemy s odsazenim  
#elif int(hadani) > cislo:
#    print("Moje cislo je mensi")
#elif int(hadani) < cislo:
#    print("Moje cislo je vetsi.")
#else:
#    print("Uhads.")
    print("")
print("")

#### while 6

z = int(input("Posledni vstup: "))
i = 1
++z
slozene = 0
while z % i != 0:
    if i > z:
        ++z
        i = 2
print("Nejblizsi vyssi prvocislo je"+str(z)+".")
print("")

print("KONEC")
print("")      

===================================================

# slozene.py


import random

print("HADI LOTERIE. Tahne se 10 cisel od 0 do 100. Vsad postupne 5 cisel.")
sazka = [0,0,0,0,0]

for i in range(5):
    sazka[i]=int(input("%d. cislo: " % (i+1)))
print("")
# Zapomnel jsem zavorku a ten skrtic mi rikal jenom "invalid syntax". To je presne to, co me od programovani v QBasicu odrazovalo.

# nacteni 10 cisel pro nasledujici ukoly

tah = [0,0,0,0,0,0,0,0,0,0]
for i in range(10):
    tah[i]=random.randint(1,100)
print("Tazena cisla: ",end="")
for i in range(10):
    print(tah[i],end=" ")
print("")
print("")

#### slozene1

print("Obracene: ",end="")
for i in range(10):
    print(tah[-i-1],end=" ")
print("")

#### slozene2

pultah=tah[0:4]
pultah.sort()
print("Median 1. 5 je: "+str(pultah[2]))

#### slozene3

tah.sort()
print("Nejvetsi mozny rozdil ("+str(tah[9])+" - "+str(tah[0])+") je: "+str(tah[9]-tah[0]))

#### slozene4

print("Nejmensi mozny rozdil ("+str(tah[5])+" - "+str(tah[4])+") je: "+str(tah[5]-tah[4]))

#### slozene5
# funkce sort(), ktera tu nesmi byt pouzita, byla pouzita v ukolu 3, takze neni ani nutne to radit

print("")
print("Serazeno: ",tah)
print("")

#### textova hra

vyhra = 0
for tazeno in range(10):
    for sazeno in range(5):
        if tah[tazeno] == sazka[sazeno]:
            vyhra += 1
if vyhra == 0:
    print("Smula, nic jsi neuhodl. Pravdepodobnost toho je stejne mizerna, podobne jako ve skutecnych loteriich.")
elif vyhra == 5:
    print("Uznavam, ze ta pseudonahodna cisla jsou predvidatelna.")
else:
    print("Neuveritelne! "+str(vyhra)+"x jsi uhodl spravne. Stejne jsi nic nevyhral, protoze Babis hazard zakazal.")
print("")  

print("KONEC")
print("")

===================================================

# ukoly3d.py


#### of1

a1 = float(input("1. clen aritmeticke posloupnosti: "))
an = a1
d = float(input("Diference: "))
n = int(input("Pocet clenu: "))
for i in range(1,n+1):
    print(an,end=" ")
    an += d
print("")
print("")

#### of2

from array import array

it = int(input("Pocet iteraci pro vypocet pi: "))
pi = 0
jmenovatel=[] # deklaruj pole
# pi = 4 * (1/1 - 1/3 + 1/5 + 1/7 + 1/9 + 1/11 + ...)
# nejdrive zavorka
for n in range(it): # vygeneruje jmenovatele 1,3,5,7...
    jmenovatel.append(2*it+1)
for n in range(it): # pricte je k promenne pro vysledek
    if it == 2:
        pi = pi - 1/3
    else:
        pi = pi + 1/jmenovatel[n]
        # v jednom americkem zakone je pi = 4, tak proc ne 2?
pi *= 4 # vynasobi zavorku
print("pi = "+str(pi))
print("")

#### ovf1

rozmer = int(input("Rozmer ctvercovych obrazcu: "))
#mpruhy=[][]
#msachovnice=[][]
# nemam sajna jak se appenduje do vice nez 1 rozmeru
print("1 1 1 1 1")
print("0 0 0 0 0")
print("1 1 1 1 1")
print("0 0 0 0 0")
print("1 1 1 1 1")
print("")
print("1 0 1 0 1")
print("0 1 0 1 0")
print("1 0 1 0 1")
print("0 1 0 1 0")
print("1 0 1 0 1")
print("")

#### ovf2

for x in range(1,10):
    for y in range(1,10):
        print("%3d " % (x*y),end="")
    print("")
print("")

### ovf3

for radka in range(1,rozmer+1):
    for delka in range (1,rozmer+1):
        print("X ", end="")
    print("")
# tenhle cyklus muze jit do prdele
print("")

print("X X X X X")
print("  X X X X")
print("    X X X")
print("      X X")
print("        X")
print("")

for delka in range (1,rozmer+1):
    print("X ", end="")
print("")
for radka in range (2,rozmer):
    print("X ", end="")
    for prazdno in range(2,rozmer):
        print("  ", end="")
    print("X ", end="")
    print("")      
for delka in range (1,rozmer+1):
        print("X ", end="")
print("")
print("")

#### montecarlo

import random
import math

n = int(input("Zadej pocet iteraci pro Monte Carlo: "))
vkruhu = 0
m = n//100
for i in range(n):
    x = random.random()
    y = random.random()
    # kruh: x^2+y^2<=1
    rcekce = x**2+y**2
    if rcekce < 1:
        vkruhu += 1 # python neumi ++vkruhu
    #if n % m == 0:
    #    print(str(i)+". iterace: "+str(4.0 * vkruhu / n))
pi = 4.0 * vkruhu / n
print("pi = "+str(pi))
print("Vedle o "+str(abs(pi-math.pi)))
print("")

===================================================

# montecarlo.py


import random
import math

d = int(input("Zadej pocet desetinnych mist pi: "))
if d > 15:
    print("Presnost math.pi je jen 15 desetinnych mist.")
    d = 15
vkruhu = 0
swap = 0
iterace = 0
approx = []
while round(swap,d) != round(math.pi,d):
    iterace += 1 # mozno init na 1 a inkrement na konci
    x = random.random()
    y = random.random()
    # k: x^2+y^2<=1
    rcekce = x**2+y**2
    if rcekce < 1:
        vkruhu += 1
        swap = 4.0 * vkruhu / iterace # tady to nejspis zere zdroje
    if iterace % 100 == 0:
        approx.append(swap)
pi = 4.0 * vkruhu / iterace
print("1. 100 aproximaci po 100 iteracich:")
for i in range(1,iterace//100):
    print(approx[i-1])
    if i > 100:
        break
print("")
print("Provedeno "+str(iterace)+" iteraci.")
print("Konec seznamu aproximaci pi: "+str(approx[-1]))
print("Vedle o "+str(abs(approx[-1]-math.pi)))
print("Konecne pi = "+str(pi))
print("Vedle o "+str(abs(pi-math.pi)))
print("")

====================================================

# kalendar.py


# funguje pouze od gregorianske reformy 1584

rok = int(input("Rok:"))
mesic = int(input("Mesic:"))
dnu=31

# vedet, kolik ma mesic dnu, a jestli je to unor, tak kdy bude prestupny (gregoriansky)

if mesic == 2:
    if rok % 4 == 0:
        if rok % 400 == 0:
            dnu == 29
        else:
            dnu == 28
    else:
        dnu == 28
elif mesic == 4 or mesic == 6 or mesic == 9 or mesic == 11:
    dnu = 30
elif mesic == 0:
    print("Zobrazeni celeho roku neni implementovano.")
    raise WholeYearDisplayNYI
elif mesic < 0 or mesic > 12:
    print("Neplatne cislo mesice. Protoze Python neumi goto, abyste svou chybu mohli napravit, progam se ukonci.")
    raise MonthInputException
mesice = ("chybny", "leden", "unor", "brezen", "duben", "kveten", "cerven", "cervenec", "srpen", "zari", "rijen", "listopad", "prosinec")
mesvelke = ("CHYBNY", "LEDEN", "UNOR", "BREZEN", "DUBEN", "KVETEN", "CERVEN", "CERVENEC", "SRPEN", "ZARI", "RIJEN", "LISTOPAD", "PROSINEC")
print("Tento mesic je "+mesice[mesic]+", jenz ma "+str(dnu)+" dnu.")

# zjistit, cim mesic zacina

# to neumim, probrat JavaScript z https://jakus.info/skripty/vecny_kalendar.htm

zacina = int(input("Neumim zjistit, kterym dnem zacina. Kolikatym dnem v tydnu (pondeli=1, ..., nedele=7) zacina? "))
print("")
print(mesvelke[mesic]+" "+str(rok))
print("")
print("Po Ut St Ct Pa So Ne")

if zacina == 0:
    raise StartingDayException

# stydim se za to, ze nechapu vnorovani for

if zacina == 1:
    print(" 1  2  3  4  5  6  7")
    print(" 8  9 10 11 12 13 14")
    print("15 16 17 18 19 20 21")
    print("22 23 24 25 26 27 28")
    if dnu == 29:
        print("29")
    elif dnu == 30:
        print("29 30")
    elif dnu > 30:
        print("29 30 31")

if zacina == 2:
    print("    1  2  3  4  5  6")
    print(" 7  8  9 10 11 12 13")
    print("14 15 16 17 18 19 20")
    print("21 22 23 24 25 26 27")
    if dnu == 28:
        print("28")
    elif dnu == 29:
        print("28 29")
    elif dnu == 30:
        print("28 29 30")
    elif dnu > 30:
        print("28 29 30 31")

if zacina == 3:
    print("       1  2  3  4  5")
    print(" 6  7  8  9 10 11 12")
    print("13 14 15 16 17 18 19")
    print("20 21 22 23 24 25 26")
    if dnu == 28:
        print("27 28")
    elif dnu == 29:
        print("27 28 29")
    elif dnu == 30:
        print("27 28 29 30")
    elif dnu > 30:
        print("27 28 29 30 31")

if zacina == 4:
    print("          1  2  3  4")
    print(" 5  6  7  8  9 10 11")
    print("12 13 14 15 16 17 18")
    print("19 20 21 22 23 24 25")
    if dnu == 28:
        print("26 27 28")
    elif dnu == 29:
        print("26 27 28 29")
    elif dnu == 30:
        print("26 27 28 29 30")
    if dnu > 30:
        print("26 27 28 29 30 31")

if zacina == 5:
    print("             1  2  3")
    print(" 4  5  6  7  8  9 10")
    print("11 12 13 14 15 16 17")
    print("18 19 20 21 22 23 24")
    if dnu == 28:
        print("25 26 27 28")
    elif dnu == 29:
        print("25 26 27 28 29")
    elif dnu == 30:
        print("25 26 27 28 29 30")
    if dnu > 30:
        print("25 26 27 28 29 30 31")

if zacina == 6:
    print("                1  2")
    print(" 3  4  5  6  7  8  9")
    print("10 11 12 13 14 15 16")
    print("17 18 19 20 21 22 23")
    if dnu > 29:
        print("24 25 26 27 28 29 30")
    elif dnu == 28:
        print("24 25 26 27 28")
    elif dnu == 29:
        print("24 25 26 27 28 29")
    if dnu > 30:
        print("31")
     
if zacina == 7:
    print("                   1")
    print(" 2  3  4  5  6  7  8")
    print(" 9 10 11 12 13 14 15")
    print("16 17 18 19 20 21 22")
    if dnu > 28:
        print("23 24 25 26 27 28 29")
    elif dnu == 28:
        print("23 24 25 26 27 28")
    if dnu == 30:
        print("30")
    elif dnu > 30:
        print("30 31")
 
print("")

====================================================

# ukoly4d.py


import random

# vektory

xd = float(input("Zadej dimenzi: "))
#vel = float(input("Zadej delku: "))
v=[]
u=[]
skalsouc = 0.0
if d < 2:
    print("Moc mala dimenze.")
    raise UserInputException
for i in range(xd):
    v.append(random.random()*100)
    u.append(random.random()*100)
for i in range(xd):
    skalsouc += u[i]*v[i]
print("Vektor u: "+str(u))
print("Vektor v: "+str(v))
print("Skalarni soucin je: "+str(skalsouc))

# matice

vel = int(input("Zadej velikost matic:"))
mat1 = []
mat2 = []
mats = []
for i in range(vel):
    mat1.append(random.random()*100)
    mat2.append(random.random()*100)
for i in range(vel**2):
    mats[i] = mat1[i]+mat2[i]
print("")
print(mat1)
print("")
print(mat2)
print("")
for i in range(vel):
    for i in range(vel):
        print(mats)
    print("")
print("")
# TODO "kalkulacka" + odecitani a nasobeni cislem

# selection sort

### funkce

# BMI

def bmi(vaha, vyska):
    return vaha/(vyska**2)
def zdravi(bmi):
    if bmi < 18:
        print("Podvaha")
    elif bmi > 30:
        print("Nadvaha")
    else:
        print("Zdravi prospesna vaha")

# pokladna

def read_input():
    print("")
def get_sum(array):
    print("")
def get_max(array):
    print("")
def get_min(array):
    print("")
def get_avg(array):
    print("")
def array_contains(array,number):
    print("")
def do_payment():
    print("")

# prohodit cisla na zadanych pozicich

def prohod(a,b):
    cisla[a],cisla[b]=cisla[b],cisla[a]

cisla = [5, 7, 6, 8]
prohod(cisla, 1, 2)
print(cisla) # vypise [5, 6, 7, 8]

# najit nejmensi cislo

def nejmensi(array):
    print("NYI")

cisla = [7, 6, 5, 8]
i = nejmensi(cisla)
x = cisla[i]
print(x) # vypise cislo 5

# seradit pomoci nejmensi()


### rekurse (volitelne)

# 10 nahodnych cisel

# faktorial

# fibonacci

# vyplnit funkci 5x5 matici 0..24 a vytisknout

# mozne tahy jezdce na 4,4 ve 3 kolech



print("KONEC")
print("")

====================================================



Uukoly na 4. den nebyly dokonczeny, protozse se zaczlo vysvjetlovat C, abychom otestovali odevzdaavacii systeem a zjistilo se, kdo tam nenii evidovanyy.

Nespornje lepszii rzseszenii, jakozs i zadaanii, jsou tady: http://cw.fel.cvut.cz/wiki/courses/pri-bootcamp/start

INTERCALská jména symbolů po Česku


Sebráno z: http://www.muppetlabs.com/~breadbox/intercal-man/tonsila.html
Rozšiřuje GEI: http://getmania.blogspot.cz/2015/12/getmans-enhanced-interpunction.html
Dále viz: http://www.collegehumor.com/post/6872071/8-new-and-necessary-punctuation-marks (nezlobímsečka, upřímněčka, sarkasmorky, střáčka, aneboprs, imitozovky, nadvýpustka, Morgan Freeznam)


Údajně "nebezpečné" obrázky byly nahrazeny Unicode symboly, protože už vím, jak se používá mapa znaků.


Mandle A: Oficiální znaková sada INTERCALu

Kromě písmen a číslic. Některé se v INTERCALu nepoužívají, ale jsou zde uvedeny pro úplnost a pro možnost budoucích rozšíření.

. puntík
: 2puntík neboli pihy
, ocas
; kříženec
# plot
= zábradlí
' jiskra
` arksij                
! jú
? co
" králíčí uši
̎. králík
| hrot                    
% dvě nuly sedm
- červ
< úhel
> pravý úhel
( couvá
) dorůstá
[ čelem vzad                    
] čelem vpřed
{ objetí neboli vlaštovka (imigrant) **
} ítějob neboli vlaštovka emigrant **
* flek neboli skvrna
& houslový klíč *
V Vé neboli kniha
∀ knihomol
$ úplatek
¢ drobné
~ klikyhák
_ přejetý červ                
¯ makaron neboli lítající červ
+ křižovatka
/ lišta                      
\ atšil                  
@ vířivka
¬ imbus                  
^ žralok
▓ kaňka                    

Poznámka: Protože snad všechny příručky obsahují slepá střeva, bylo rozhodnuto, že tahle bude mít nějaký jiný odebíratelný orgán.***

* Jednou jsem fakt ten symbol tak viděl nazvaný.
** Poradil Mikoláš Štrajt v komentáři. Inspiraci dodaly**** organismy volící SPD.
*** Ještě, že ne ledviny nebo genitálie.
**** Bylo rozhodnuto použít rod neživotný, protože většinou nejsou schopni použíat v tom vzteku jazyk (viz Klingonština) a píšou jak imigrant 1. generace nebo dysněco. Čest výjimkám, co se umí vyjadřovat jako na /pol/.

Po 8 letech mi došla škola

2 roky v MŠ Podléšková (poslední rok každý pátek anglická MŠ Kryštof)
1 rok na ZŠ Švehlova
4 roky na ZŠ Olešká
8 let na Gymnáziu Omská
3 měsíce na FIT ČVUT
? let na FEL ČVUT

Viděl jsem, jak se Kubánské náměstí mění. Prišel 2. Vietnamec, zmenšila se Eliška, začaly se konat farmářské trhy a nakonec přišel kebab. Během toho se asi 2x opravovala silnice a 1x se přemalovala škola. Webové stránky Omské se změnily 2x. Z krásné jednoduché nízkokontrastní béžové podobné její fasádě se stal hnusný modrý design ve stylu konce minulého desetiletí a pak se přešlo na adaptivní mobilní rozhraní laděné dozelena. V 2. roce se elektronizovalo známkování a v posledním roce se zavedly elektronické píchačky. Byly by to pípačky, ale žádný zvuk to nevydávalo a blikačky nejsou tak dobrým pojmenováním.

Kvůli vměšování se ministerstva školství do svobody podnikání se musel od renomovaného Eurestu oddělit Scolarest, který šel s kvalitou dolů a s cenami nahoru. Když už poněkolikáte neměli brambůrky, zašel jsem k 1. Vietnamci a kompaktností jeho prodejny jsem byl ohromen. Ten 2. měl prodejnu rozlehlejší, něco levnější, něco dražší, něco měli navzájem exkluzivní. Podrobnosti jsou ve velmi starém článku (z hlediska října 2017) http://getmania.blogspot.cz/2014/12/skolni-jidelny-jsou-zbytecne-je-li.html. Ke konci po pamlskové vyhlášce nastala renesance, kdy začali o veklé přestávce nabízet různé obložené pečivo, které bylo lepší než obědy. Slavnostní oběd maturantů ukázal, že mají snahu zlepšit se v rámci možností toho, co vedení Scolarestu rozhodne dovézt a co ministerstvo dovolí.

Ale teď jsem nějakým způsobem odmaturoval napoprvé, když si vezmu, že ke konci jsem byl čtyřkař, a to i s tou státní maturitou z matematiky, kterou jsem si dal dobrovolně, protože maturovat z angličtiny na úrovni B1, potom, co byla vyšší úroveň B2 zrušena, je pro mě:
a) nedůstojné,
b) zbytečný čas strávený ve škole navíc,
c) redundantní kvůli FCE,
a němčinu jsem si netroufnul zkoušet, protože výstup v ní je rozbitý. A pseudobolševický* Goethe Instutut říkal, že vyplnit testy umím, ale napsat "německý" text ne. Možná se jim nelíbily jen moje myšlenky.

* Je to tam hodně levicové, ale za tu Hate Free věc by šli za Stalina do gulagu. Neříkám liberální, protože jsem na 4chanu zjistil, že mi to slovo bylo ukradeno a šíří se to i do češtiny, takže musím říkat, že jsem svobodomyslný (jako Mladočeši) nebo libertarianistický.

>rozhodnul jsem se nakonec z FIT jít na FEL
>v souladu s původním plánem věnovat se hudbě
>ale ne s lidma, co to mají Macbook a skládájí v Abletonu
>něco jako MIDI, chiptune a trackery, dnešní komerční EDM mě nějak moc netáhne
>nakonec mi to SCIO sloužilo jenom na podržení statutu studenta v době 30.6. ~ 14.9.
>zápis velmi stručný a zmatečný, ještěže jsem měl informace z FITu
>hledání, kdo je vedoucí katedry jazyků, abych moh ukázat FCE
>dělá se to zápisem 2 předmětů a potom ukázat
>může vyžadovat čas, který bude již zabrán (2x přednáška a cvičení)
>je za 0 kreditů
>může počkat na další z 5 semestrů
>radši tělocvik za 2 kredity
>lehká organizační relokace lukostřelby z FITu

>mám si zapsat volitelné předměty, abych měl +/- autobus 30 kreditů
>to, co chci, je magisterské (což byl ostatně důvod výběru)
>to, co by mi nevadilo a je bakalářské, je
> a) obsazené
> b) s rozvrhem se překrývající
> c) jiným způsobem nezapsatelné
>takže postupně zkouším kdeco
>nakonec se povede anglicky programovací jazyk C
>sedí krásně v rozvrhu, ikdyž možná trošku moc ráno (8:15)
>BOZP je stejně dřív (7:30)
>metrem to tam trvá cca půl hodiny
>překrývá se tematicky s procedurálním programováním
>co nepochopím tam, pochopím tady
>ideální předmět na rozkoukání

>je povinné absolvovat 1 předmět v angličtině
>tenhle se zjevně nepočítá, ale 6 kreditů budou
>máma má obavy, že tomu nebudu rozumět, tak dále prohledává KOS
>syntax C už je stejně anglicky
>ukáže se, že se počítají jenom anglické varianty těch povinných a 2 další
>tyto jsou rovněž za 6 kreditů
>jsou to anglicky sítě a logické systémy
>nepočítá se, že bych si něco takového dal v 1. semestru
>tak nic, nechám si to C


>později zjišťuji, že se cvičení z lineární algebry předsulo ze čtvrtka právě to dé mezery na přesun
>v mailu se nic o tom nepíše
>C je na Karláku, algebra na Leninově
>na zápisu říkali, že s rozvrhem povinných předmětů nemáme hýbat
>takže to C musí pryč
>máma stále trvá na >30 kreditů
>hledám já, hledá celá rodina ještě 1x
>nakonec se našla v úterý večer moderní historie pro kombiňáky
>dovolilo mi ji to zapsat, tak třeba budu moct místo toho občas do KFC
>za 4 kredity dobrý, ikdyž je to jak VŠML
>samozřejmě v závislosti na tom, jak kritičtí budou k SSSR
>1. přednáška o tom, jak jsme mohli být Sillicon Valley, nebýt komunistů
>nechtěj tohleto Piráti v souvislosti s tím, co se na FEL studuje?
>zatím dobrý, až na to BOZP v 7:30 ráno
>příští semestr si budu vybírat dřív a budu hlavně vědět, co je v nabídce

Chtěl jsem něco jako HAMU, ale bez jazzu, bez hipsterů s Macbookama, bez tancování, bez hraní na akustický nástroj, bez not a s demoscénou. No tak jsem se dozvěděl na DoD a později i na webu, že na FEL ČVUT je takový magisterský obor, a teď se k němu prokousat přes bakaláře. A možná na doktorát můžu napsat 1. již v základu libovolně oktávu dělící adaptivní hudebně zvukový systém. A vymyslet názvy všech těch tónů všech těch stupnic jakož i ASCII symboly pro ně.

Uvidí se, jaký bude tahle vysoce elitní fakulta, na níž přecházím z vysoce elitního gymnázia, mít vliv na aktivitu tohoto blogu. Možná sem budu moct prdnout jenom svoje programy, nejen kvůli kterýmžto je zde doporučeno neproporciální písmo. Stále se mi na stole válí hromada věcí k přepsání, u nichž jsem udělal tu chybu, že jsem je psal na papír. Telefony už totiž nemají klávesnici vyjma Blackberry za 16 kKč, a moje stará Xperia Mini Pro mimo dostatku interní paměti neměla 4G a OTG. To se týká i Dobrodružství 2.2 - prostě není čas to přepsat v kuse a já nerad přerušuju činnosti uprostřed, kde si nemůžu uložit přesnou pozici. Kdyby někdo (musím to být zase já?) napsal OCR, které nepohrdne mým škrabopisem.

Implementace Euklidova algoritmu pro hledání Bezoutova rozkladu v Pythonu 3

#Algoritmus pochazi z materialu k prednaskam doc. Habaly, ktereho mame na diskretni matematiku. Bylo to jenom o neco tezsi odladit nez 1. domaci ukol z proceduralniho programovani, a to C znam uz 2 roky. Ten Python asi nebude tak spatnej.

print("")
print("NSD a Bezout 2 celych cisel.")
print("")

r=[]
r.append(int(input("a := ")))
r.append(int(input("b := ")))

k=0
x=[1, 0] #jednotkova matice
y=[0, 1]
q=[]

while r[-1] != 0:
    k += 1
    q.append((r[k-1])//r[k]) #q je o 1 pozadu
    r.append(r[k-1]%r[k]) #nazorne modulo
    x.append(x[k-1]-q[-1]*x[k])
    y.append(y[k-1]-q[-1]*y[k])

print("")
#skoda, ze python 3 odmita implicitni prevody
print("NSD("+str(r[0])+", "+str(r[1])+") = "+str(r[k])+" = "+str(x[k])+" * "+str(r[0])+" + "+str(y[k])+" * "+str(r[1]))
print("")

if r[k] == 1:
    print("Cisla jsou nesoudelna.")
    print("")

print("Koncovy stav:") #mezivypocty
print("q = "+str(q))
print("r = "+str(r))
print("x = "+str(x))
print("y = "+str(y))
print("k = "+str(k))
print("")