Úvod
Tento kurz je určený všem, kteří si chtějí osvojit základní principy programování. To se dá zobecnit do principů, které se poté aplikují v konkrétních programovacích jazycích. Podtrženo sečteno principy zůstávají stejné, co se ale mění je zápis. V tomto kurzu se seznámíme s jazykem Python, který bývá obecně označován za vhodný pro začátečníky; je avšak stále použitelný v reálném světě. Ze začátku kurzu budou některé koncepty zjednodušovány, aby byl kurz přístupný opravdu pro všechny. K jeho konci budou však vysvětleny v plné šíři.
Pod programem si představíme nějaký soubor s textem, který počítači říká, co má provést. Je to tedy analogie popisu pracovního postupu psaná v nějakém programovacím jazyce, ale místo prózy píšeme zkratkovité instrukce, nějaký kód. Za každým programem je nějaká úloha, tedy co chceme vypočíst – výpočet pětapadesátého prvočísla, výpis všech prvočísel menších než 100, a podobně. Obecnému postupu řešení úlohy, který se skládá z konečného počtu elementárních, myšleno nedělitelných, kroků říkáme algoritmus. Algoritmy můžeme popsat i přirozeným jazykem, třeba algoritmus pro ověření, zda je číslo dělitelné dvěma, můžeme zapsat takto:
Vezmi číslo a podívej se na zbytek po dělení dvěma. Pokud je zbytek 0, číslo je dělitelné dvěma. Pokud ne, číslo není dělitelné dvěma.
Také ho můžeme zapsat zkratkovitě jako
pokud (cislo mod 2 je rovno 0) vypis "cislo je delitelne dvema" jinak vypis "cislo neni delitelne dvema"
Pokud algoritmus zformulujeme v nějakém programovacím jazyce, nazveme tento program implementací algoritmu. Nutno podotknout, že implementace není nutně jedinečná; může existovat, a většinou existuje, více způsobů, jak algoritmus implementovat. Implementace se mezi sebou mohou zásadně lišit, například v době běhu programu. Vždy se samozřejmě snažíme implementovat algoritmus tak, aby běžel co nejrychleji.
Neexistuje jednoznačná definice pojmu “algoritmus”. Můžeme však definovat vlastnosti, které by měl algoritmus splňovat.
- Konečnost zaručuje, že algoritmus skončí po vykonání konečného počtu kroků.
- Správnost zaručuje, že algoritmus vypočítá správnou hodnotu pro nějaký vstup.
- Determinismus znamená, že pro stejný vstup algoritmus vždy vypočítá stejnou hodnotu. Každý krok algoritmu je tedy jednoznačně definovaný v každé situaci.
Pokud máme algoritmus, který splňuje tyto vlastnosti, můžeme o něm jednodušeji uvažovat a analyzovat jeho chování. V rámci kurzu se občas s nějakým algoritmem setkáme, jejich implementace budou většinou ponechána jako domácí cvičení.
Často se také díváme na to, jaký má algoritmus vstup a jaký výstup. V příkladu s dělitelností dvěma bereme jako vstup nějaké číslo. Výstupem je pak informace o tom, zda je číslo dělitelné dvěma nebo není – pravda nebo nepravda. Této dvoustavové hodnotě se říká booleovská hodnota, také boolean. V anglických textech se běžně setkáme se jmény hodnot True a False.
Jak již bylo řečeno, základní koncepty samotného programování se mezi programovacími jazyky prakticky nemění. V další kapitole si představíme proměnné, tedy místo, kam si můžeme uložit hodnoty používané v programu.
Výstup
Když spustíme program, můžeme chtít, aby nám vydal výstup ve formě textu vypsaného na obrazovku, do terminálu. Nutno říci že není nutné, aby výstup byl ve formě textu na obrazovce – program může pracovat třeba jen se soubory a toto může být jeho výstupem.
V Pythonu můžeme z programu vypsat text pomocí slovíčka print. Za print následují závorky a v nich výraz, který
chceme vypsat.
print("Ahoj, Pythone!")
Tento prográmek vypíše na obrazovku text Ahoj, Pythone!. Do uvozovek obalujeme jakýkoli souvislý text, který se vejde
na jednu řádku; v programátorském žargonu těmto konstrukcím říkáme řetězec (anglicky string). Závorky jsou kolem
hodnoty od toho, aby print věděl, co přesně má vypsat. Kdyby tam závorky nebyly, print by nevěděl, co všechno má
vypsat. Magická slovíčka následovaná závorkami ještě s jistotou uvidíme.
Python neumí vypisovat pouze text. Umí třeba vypočítat aritmetický výraz. Vyzkoušejme si třeba spustit program
print(1 + 2 + 3)
Jak bychom asi očekávali, vypíše číslo šest. Aritmetika v Pythonu podporuje další operace, mimo jiné
- sčítání (
+), odčítání (-), násobení (*) a dělení (/), - celočíselné dělení (
//), - zbytek po dělení (
%) - a umocňování (
**).
Tip
Zkuste si sami, co vypíší následující řádky kódu:
print(2 * 6 - 4)print(15 // 4)print(15 % 4)print(2 ** 5)
Ve výrazech můžeme používat i závorky k tomu, abychom ovlivnili prioritu výpočtu, stejně jako v matematice na papíře.
Občas chceme slovíčkem print vytisknout více věcí, než jen text anebo číslo, třeba popis nějakého výpočtu. Následující
program vypíše na výstup Šest plus pět se rovná 11.
print(f"Šest plus pět se rovná {6 + 5}")
Všimněte si písmena f před začínající uvozovkou; toto Pythonu říká, že se jedná o formátovací řetězec (formatting
string). Všechny výrazy, které má Python vyhodnotit, píšeme do složených závorek. Po jejich vyhodnocení se výsledek
vloží na místo složených závorek.
Jistě bychom mohli napsat jen následující, ale první možnost nám dává mnohem větší možností pro výpis.
print("Šest plus pět se rovná 11")
Více důvodů pro využití formátovacích řetězců uvidíme v dalších kapitolách.
Proměnné
Představme si program pro výpočet obvodu a obsahu obdélníka. Vstupem budou dvě kladná nenulová čísla: délka strany a výška. Výstupem budou také dvě čísla: obvod a obsah. Program by pro obdélník se stranami délky 12 a 7 mohl vypadat třeba takto:
print(f"Obvod: {2 * 12 + 2 * 7}, Obsah: {12 * 7}")
Během psaní programů se nám bude hodit dát hodnotám jméno, které nám umožní hodnoty znovupoužívat.