Warning
This page is located in archive.

Den 1

Dopoledne - teorie

V úvodu se seznámíme s operačním systémem Ubuntu, který je jednou z nejrozšířenějších verzí Linuxu (en) a v průběhu dopoledne se seznámíme s programovacím jazykem Python (en) Pro přístup k internetu použijte internetový prohlížeč Mozilla Firefox (ikona s liškou v levé postranní liště) a otevřete si stránky Bootcampu:

https://cw.fel.cvut.cz/wiki/courses/pri-bootcamp/start

Ovládání operačního systému Ubuntu (Linux)

Terminál (též příkazová řádka) je základní způsob, jakým ovládat počítač, bez ohledu na to, jestli má grafické rozhraní pro práci se soubory (“okna”). Využitím terminálu získává uživatel více možností ovládání počítače a jeho výpočetních prostředků. Zprvu se vám může zdát terminál nepřehledný, nicméně časem si jej osvojíte a poznáte jeho prakticky neomezené možnosti.

Terminál otevřete pomocí klávesové zkratky: ctrl+alt+t. Nyní můžete počítači zadávat přímo jednotlivé příkazy, spouštět programy, vytvářet a mazat složky a soubory apod. Každý příkaz je třeba potvrdit stisknutím klávesy enter.

Do terminálu můžete zkusit zadat příkaz pro otevření webového prohlížeče Mozzila Firefox: firefox


Příkazy v terminálu

Nejprve si ukážeme podobnosti mezi rozšířeným grafickým správcem soborů (na Windows File Explorer na Ubuntu Nautilus). K terminálu si otevřete i Nautilus (ikonka složky). Přetažením oken na příslušnou stranu monitoru je možné okno rozšířit na polovinu obrazovky.

V jak terminál, tak nautilus se otevřely v domovském adresáři právě přihlášeného uživatele (tedy vás). K ověření můžeme použít příkaz pwd (print working directory), který do terminálu vytiskne cestu aktuálnímu adresáři. Adresář, ve kterém se právě v příkazové řádce nacházíte, se nazýva pracovní adresář.

K zobrazení obsahu aktuálního pracovního adresáře v terminálu slouží příkaz ls (list). Podporuje-li to terminál, tak jsou barevně odlišeny adresáře (modrá), soubory (bílá), obrázky (fialová), atd.

K procházení mezi jednotlivými adresáři je možné pomocí příkazu cd (change directory) a jméno adresáře, do kterého chcete vstoupit, například cd Documents. Pro návrat do nadřezeného adresáře je možné použít cd ... Pozor, jméno adresáře musí být napsáno přesně a musí být dodržena velikost písmen, tedy neprojde cd documents, ale cd Documents už ano.

Pro doplnění názvu adresářů nebo souborů je možné použít tabulátor (vlevo nad Caps Lockem). Pokud se na první pokus název nedoplní, existuje více souborů s názvem začínajícím stejně, k jejich vylistování stiskněte klávesu tabulátor dvakrát rychle zasebou.

K vytvoření nového adresáře slouží příkaz mkdir (make directory) následovaný jménem adresáře, například mkdir Bootcamp.

K vytvoření nového souboru je možné použít příkaz touch a jméno soboru, například touch notes.txt.


Úkol v terminálu

Vytvořte nyní pomocí terminálu ve svém domovském adresáři složku BootCamp, v ní složku Day1 (nebp Den1 nebo obdobně) a v ní soubor notes.txt (nebo poznamky.txt, nebo obdobně).


Další užitečné příkazy a zkratky
  • ctrl + shift + T - otevře terminál (nebo novou relaci)
  • ctrl + shift + N - otevře nové okno terminálu (je-li už je nějaké otevřené)
  • <šipka nahoru/dolu> - umožňuje listovat historií příkazů (šipka nahoru - předchozí příkaz, šipka dolu - následující)
  • cd přesune pracovní adresář do domovského adresáře
  • mv main.py /cesta/do/noveho/adresare - přesune soubor main.py do existujícího adresáře s adresou /cesta/do/noveho/adresare
  • mv script1.py script2.py - přejmenuje soubor script1.py na soubor2.py
  • rm main.py - smaže soubor main.py
  • rmdir adresar1 - smaže prázdný adresář adresar1
  • man ls - otevře manuál pro příkaz ls
  • ls -la - vylistuje podrobnosti o adresářích a souborech

Podrobný návod s obrázky naleznete zde.

V případě zájmu o další užitečné a často používané přikazy terminálu doporučuji video Beginner's Guide to the Bash Terminal

Další věci, které by mohly během bootcampu i později být potřeba:
  • python3 - otevření interaktivní konzole Pythonu
  • python3 main.py - spuštění souboru main.py

Python v režimu interactive shell

Python v tomto módu může sloužit třeba jako kalkulačka. Zkuste mu zadat pár matematických operací.

8/2
5*125
6*2-2*4

při zadávání desetinných čísel používejte obyčejnou tečku . místo desetinné čárky.

Je vidět, že Python respektuje přednost násobení před sčítáním a odčítáním. Můžete zadat i složitější výrazy uzávorkováním podvýrazů:

2*(3+6)
(2+4)*(3+6)
4*(-2)

Python obsahuje dva typy dělení, mezi kterými je zásadní rozdíl.

3/2
3//2

První z nich je klasické dělení, druhé pak celočíselné dělení.

S celočíselným dělením souvisí zbytek po dělení (operátor modulo)

7%4

Také se hodí znát operátor mocnění, který překvapivě není zapisován ^, ale **.

2**8

Tenhle výpis výsledků jako číselných hodnot se provádí automaticky. Jinak lze výpis textu i číselných hodnot provádět příkazem print. Takový text musí být v uvozovkách, aby počítač věděl, že se jedná o text a ne o další příkaz. U čísel se uvozovky takhle nepoužívají.

print("Hello world")
print(100)

Mezi následujícími příkazy je ovšem zásadní rozdíl:

print("3*6")
print(3*6)

V prvním případě se vypíše text 3*6, protože uvozovky Pythonu říkají, že znaky v závorce představují text. V druhém případe se vypíše výsledek násobení, tedy 18.

Python totiž rozlišuje data, se kterými pracuje (tzv. datové typy). V prvním případě se jedná o textový řetězec, v případě druhém o číslo.

Výpis dvou textových řetezců lze spojit pomocí operátoru +:

print("Nastupuju na FEL v roce: " + "2022")

Všimněte si, že operátor + tady slouží pro spojení do jednoho výpisu, ne pro součet. Toho budete během programování často využívat.

Spuštění programu v Pythonu z terminálu

Otevřete textový editor, například příkazem gedit a napište následující jednoduchý program:

print("Hello Bootcamp!")

Uložte program jako textový soubor do složky Bootcamp a pojmenujte ho myFirstPythonScript.py.

V terminálovém okně spustíme tento program příkazem python3, kterému předáme jako parametr název souboru:

python3 myFirstPythonScript.py

Tento příkaz spustí námi napsaný program a na terminálu vypíše:

Hello Bootcamp!

Soubor musí být ve stejném adresáři, jako je ho voláte příkazem python3. Lze ověřit pomocí příkazu ls.

Proměnné

Základní stavební jednotkou každého programovacího jazyka jsou proměnné - bloky paměti počítače, kam je možné uložit rozličná data, která mohou být jak čísla, tak třeba text, nebo když na to přijde, tak třeba obrázek. Jsou-li data čísla, je možné si je představit jako proměnné, co znáte z matematiky je možné nad nimi provádět matematické operace.

Chceme-li zadefinovat jednoduchou proměnnou (x) konkrétní hodnoty (10) napíšeme:

x = 10

Počítač si uloží hodnotu 10 do paměti a označí ji x. S touto proměnou nyní můžeme pracovat jako s číselnou hodnotou.

Zkuste následující:

x = 10
print(x)
print(x+5)
print((x+5)*(x-5))

Do proměnné je možné uložit také desetinné číslo nebo textový řetězec.

Pi = 3.14
jmeno = "Jan"
prijmeni = "Novak"
print(Pi)
print(jmeno)
print(jmeno+prijmeni)
print(jmeno+" "+prijmeni)

Hodnotu proměnných je možné měnit v průběhu programu (pokud by to nešlo, byly by naše možnosti velmi omezené). Vyzkoušejte:

x = 10
print(x)
x = 20
print(x)
x = x+1
print(x)

První příkaz print vypíše číslo 10, následně jsme změnili hodnotu v proměnné x na 20, a tedy druhý příkaz print vypíše číslo 20. V posledním případě jsme hodnotu v proměnné x zvýšili o jedna.

Při přiřazování nové hodnoty do proměnné je možné provádět i následující “psí kusy”:

x = 10
x = (x+1)*(x-1)
print(x)

Do proměnné x jsme nejprve uložili číslo 10. Druhý řádek vypočte výsledek výrazu (x+1)*(x-1), přičemž x ve výrazu má v tuto chvíli stále hodnotu z předchozího řádku (tedy 10), ta se dosadí do výrazu a výsledek tak bude (10+1)*(10-1) = 99. Výsledek se uloží do proměnné x, kterou vypíše příkaz print na třetím řádku.


Jména proměnných v Pythonu

Při vytváření proměnné byste měli dodržovat následující pravidla ohledně jejich pojmenování:

  • Jméno proměnné obsahuje pouze písmena anglické abecedy a-z, A-Z, čísla 0-9, a podtržítko _.
  • Jméno proměnné nezačíná číslem.
  • Python rozlišuje mezi velkými a malými písmeny.

Vytvoříme-li následující proměnné:

promenna = 10
Promenna = 11

bude Python považovat označení promenna a Promenna za různé proměnné. Zkuste si to.

print(promenna)
print(Promenna)


Typy proměnných

Byť se na první pohled zdají všechny proměnné stejné, má každá z nich typ určený daty, která v nich jsou uložené. Datové typy, se kterými jsme se zatím seznámili jsou:

  • Celá čísla (typ integer, v matematice $\mathbb{Z}$, tedy např.: -2, -1, 0, 1, 2, …)
  • Desetinná čísla (typ float, v matematice $\mathbb{Q}$, tedy např.: 1.5, 0.35, -0.5, 1.0, …)
  • Textové řetězce (typ string, např.: “Jan Novak”, “abc”, “abc123”, …)

Název datového typu proměnné x můžeme získat pomocí příkazu type(x) a vypsat ho pomocí print(type(x)).

x = 10
datovy_typ = type(x)
print(datovy_typ)
 
x = 3.5
datovy_typ = type(x)
print(datovy_typ)
 
x = "abc"
datovy_typ = type(x)
print(datovy_typ)

Datový typ proměnné se může v průběhu programu měnit podle potřeby. Změnu datového typu vynutíme explicitním přetypováním za použití klíčových slov str, int nebo float:

x = 10
 
xstr = str(x)
print(xstr)
 
xflt = float(x)
print(xflt)

Pokud chcete tisknout textový řetězec a číslo v jednom výpisu, doporčujeme číslo přetypovat na textový řetězec.
year = 2022
print("current year is " + str(year))

Alternativně můžete oddělit jednotlivé argumenty čárkou, kdy print doplní mezery mezi jednotlivé části výpisu.

year = 2022
print("current year is", year)


Získání vstupu uživatele

Občas nemáme některá data přímo, takže nám je musí zadat uživatel. K tomu slouží klíčové slovo input. Takto získaná data ukládáme do proměnné.

a = input()

Input umožňuje i vytisknout uživateli do terminálu popis, jaká data po něm chceme.

name = input("Zadejte svoje jméno: ")

Výchozí formát uživatelského vstupu je textový řetězec!

Pokud potřebujeme třeba celočíselný uživatelský vstup, opět použijeme přetypování (v tomto případě int), se kterým jsme se seznámili před chvilkou:

N = int(input("Zadej nějaké celé číslo: ")
print(10*N)

Pokud potřebujeme načítat desetinné číslo, použijeme obdobně float:

x = float(input("Zadej nějaké desetinné číslo: ")
print(10*x)

Dopoledne - úkoly

Úkol 0

Napište program, který načte jméno jako string a vypíše: Letošního programovacího bootcampu se účastní <jméno>.

Řešení


Úkol 1

Napište program, který načte jedno číslo (stranu čtverce) a následně vypíše obvod a obsah čtverce.

Řešení


Úkol 2

Napište program, který načte dvě čísla (strany obdélníku) a následně vypíše obvod a obsah obdélníku.

Řešení


Úkol 3

Napište program, který načte jedno číslo (poloměr kruhu) a následně vypíše obvod a obsah daného kruhu.

Počítejte s hodnotou pi = 3.14.

Řešení


Úkol 4

Napište program, který načte jedno číslo (poloměr koule) a následně vypíše povrch a objem dané koule.

Povrch koule je možné spočítat $S = 4 \pi r^2$, objem pak jako $V = \frac{4}{3} \pi r^3$.

Řešení


Úkol 5

Napište program, který načte od uživatele dvě čísla a uloží je do proměnných a a b. Poté vypíše jejich součet, rozdíl a součin.

Řešení


Úkol 6

Napište program, který načte dvě čísla do proměnných a a b. Program následně prohodí hodnoty v těchto proměnných a vypíše nejprve obsah proměnné a a poté obsah proměnné b.

Budete potřebovat ještě jednu pomocnou proměnnou (např. c).

Řešení


Odpoledne - teorie

Komentáře v Pythonu

Komentáře slouží k zaznamenání přídavných informací, které nemusí být na první pohled z kódu zřejmé, čímž usnadňují orientaci v kódu. Komentáře jsou při spuštění programu ignorovány a slouží pouze pro čtenáře (programátora) vašeho kódu.

V pythonu je možné zakomentovat zbytek řádku pomcí symbolu kříže (hashe) #, tedy je možné psát:

# jak komentar na cely radek...
x = 10
print(x) # ... tak komentar na zbytek radku

Podmínky, příkaz if, if-else, if-elif-else

Průběh všech programů, které jsme prozatím napasali, byl jednoznačně určen od začátku spuštění. Nicméně často se nám hodí vykonávat příkazy na základě aktuálního stavu programu (tedy například na základě hodnot proměnných), k tomu nám slouží právě podmínky, které kontrolují, jestli se program nachází ve stavu, ve kterém chceme příkazy provést.

V pythonu je možné kontrolovat podmínky pomocí příkazu if následovaný podmínkou a zakončený dvojtečkou :.

Vyzkoušejte následující program:

a = int(input("Zadejte cele cislo: "))
x = 0
if a > 5:
    print("Podminka je splnena.")
    print("Zadane cislo je vetsi nez 5.")
    x = 1
print("Konec programu, x je:")
print(x)

Pokud je číslo větší než 5, provedou se postupně všechny odsazené příkazy (v našem případě dva výpisy a přiřazení x = 1) a posléze i následující neodsazené příkazy. Pokud podmínka splněná není, odsazené příkazy se přeskočí a pokračuje se prvním neodsazeným příkazem.

Pokud chcete vykonat nějakou část kódu, i pouze pokud podmínka splněna není, můžete přidat větev else:

a = int(input("Zadejte cislo: "))
x = 0
if a > 5:
    print("Podminka je splnena.")
    print("Zadane cislo je vetsi nez 5.")
    x = 1
else:
    print("Podminka neni splnena.")
    print("Zadane cislo neni vetsi nez 5.")
    x = -1
print("Konec programu, x je:")
print(x)

Pokud chceme vykoušet postupně vícero různých podmínek je možné mezi if a else přidat libovolné množství podmínek elif:

a = int(input("Zadejte cislo: "))
x = 0
if a > 5:
    print("Prvni podminka je splnena.")
    print("Zadane cislo je vetsi nez 5.")
    x = 1
elif a < 5:
    print("Druha podminka je splnena.")
    print("Zadane cislo je mensi nez 5.")
    x = -1
else:
    print("Zadna podminka neni splnena.")
    print("Zadane cislo je 5.")
    x = 0
print("Konec programu, x je:")
print(x)


Spojování podmínek

Někdy mohou být podmínky, za jakých chceme vykonávat jednotlivé příkazy relativně složité a složené z více částí. K jejich skládání můžeme použít logické operátorů and a or. Ty odpovídají logickým spojkám $\land$ (konjunkce, “a zároveň”) a $\lor$ (disjunkce, “nebo”).

if (a > 5) and (a < 10):
    print("Cislo je vetsi nez 5 a mensi nez 10.")
    print("Cislo lezi v intervalu (5,10).")


Logické operátory

Při vyhodnocování podmínek můžete porovnávat jak čísla, tak i textové řetězce a to pomocí následujících operátorů.

  • a == b (rovná se) - zanořené příkazy se provedou, jsou-li a a b stejné
  • a != b (nerovná se) - zanořené příkazy se provedou, jsou-li a a b různé
  • a >= b (je větší nebo rovno, odpovídá $\geq$) - zanořené příkazy se provedou, je-li a, alespoň tak velké jako b
  • a <= b (je menší nebo rovno, odpovídá $\leq$) - zanořené příkazy se provedou, není-li a, větší než b
  • a > b (je větší) - zanořené příkazy se provedou, je-li a větší než b
  • a < b (je menší) - zanořené příkazy se provedou, je-li a menší než b


Logický datový typ 'bool'

Výsledkem logických výrazů je datový typ bool:

x = 10
vysledek = x > 0
datovy_typ = type(vysledek)
print("vysledek: " + str(vysledek) + ", datovy typ: " + str(datovy_typ))

Všimněte si, že vysledek je True (logická pravda). Protikladem k True je logická nepravda False.

Odpoledne - úkoly

Úkol 0

Napište program který načte dvě přirozená čísla, základ a exponent, a vypočítá hodnotu základexponent. Nezapomeňte, že hodnota 00 není definovaná.

Např.:

Zadejte zaklad: 5
Zadejte exponent: 3
5^3 = 125

Můžete využít operátor **, kterým lze v Pythonu vyjádřit mocninu:

print("2^3 = " + str(2**3))

Řešení


Úkol 1

Napište program, který načte dvě čísla a vypíše větší z nich. Pokud jsou zadána dvě stejná čísla, program napíše Zadana cisla jsou stejna.

Řešení


Úkol 2

Napište program, který načte číslo a rozhodne, jestli číslo leží v uzavřeném intervalu $<10; 20>$. Pokud ano, program vypíše Cislo je prvkem intervalu., pokud ne, vypíše Cislo neni prvkem intervalu.

Řešení


Úkol 3

Načtěte jedno celé číslo ze vstupu a vypište zda-li je sudé nebo liché.

Použijte operátor % (modulo (en)), který vypočte zbytek po dělení. (Např.: 19%7 == 5)

Řešení


Úkol 4

Napište program, který načte postupně 3 čísla – délku, šířku a výšku kvádru – a spočítá objem tohoto kvádru.

Řešení


Úkol 5

Načtěte od uživatele délky stran trojúhelníku (3 čísla) a vypočítejte jeho obsah. Použijte Heronův vzorec wiki (cz), podle kterého vypočítáme obsah trojúhelníku jako $S=\sqrt{s(s-a)(s-b)(s-c)}$, kde $s=\frac{a+b+c}{2}$.

Z matematiky víme, že platí $\sqrt[N]{x} = x ^{(1/N)}$, tedy můžeme využít operátor **. Kupříkladu:

print("Druha odmocnina z x je: ", x**(1/2))

Řešení


Úkol 6

Načtěte průměr a výšku sudu (předpokládejte, že rozměry sudu jsou uvedeny v metrech) a spočítejte objem sudu v litrech. Dále načtěte množství vody (v litrech) a rozhodněte, zda se voda do sudu vejde.

Rozšíření: Pokud se voda do sudu vejde, spočtěte do jaké výšky vystoupá její hladina.

Řešení


Odpoledne - volitelné úkoly

Úkol 1

Napište program, který načte od uživatele 3 čísla reprezentující délky stran trojúhelníka. Program zkontroluje, jestli takový troúhelník lze sestrojit a pokud ano, zjistí a vypíše, jestli je takový trojúhelník ostroúhlý, pravoúhlý nebo tupoúhlý.

Inspiraci lze čerpat z wikipedie.
Pokud nechcete studovat wiki stránku Kosinové věty, vzpomeňtě si na Pythagorovu větu a zkuste rovnosti v ní zaměnit za správné nerovnosti.

Řešení


Úkol 2

Napište program, který umí vyřešit kvadratickou rovnici zadanou ve tvaru $a x^2 + b x + c = 0$. Program od uživatele načte hodnoty koeficientů $a$, $b$, $c$, rozhodne, jestli má taková rovnice v oboru reálných čísel nějaké kořeny, a pokud ano, tak je spočítá a vypíše.

Řešení


Úkol 3

Napište program, který načte souřadnice dvou bodů v rovině. Program následně vypíše, jakou hodnotu má směrnice přímky, kterou tyto body určují (směrnice přímky je tangens úhlu, který svírá zadaná přímka s osou x). Vhodně ošetřete případ, kdy by byla zadaná přímka k ose x kolmá (v tom případě totiž není směrnice definována).

Nápověda, jak vyřešit matematiku za touhle úlohou.

Řešení


Úkol 4

Napište program, který načte souřadnice tří bodů v rovině. Zjistěte, jestli leží na jedné přímce.

Opět připomínka středoškolské matematiky zde.

Řešení

courses/pri-bootcamp/01.txt · Last modified: 2022/09/12 15:38 by kubikji2