Představ si, že učíš robota, jak si namazat chleba s máslem. Kdybys mu jen řekl "Namaž chleba", nevěděl by, co dělat. Musíš mu dát přesný postup, krok za krokem. V informatice je to stejné. Než počítač něco udělá, musíme mu přesně říct, co má dělat. A k tomu nám pomáhají pojmy jako formulace úlohy, vstup, výstup a podmínky řešení.
První a nejdůležitější krok je přesně si říct, co je naším cílem. Co chceme, aby počítač (nebo my sami) udělal?
Formulace úlohy je jasné a přesné popsání toho, co chceme vyřešit nebo čeho chceme dosáhnout.
Když nevíš, co chceš, nemůžeš to najít. Když si přesně neřekneme, co je úkolem, můžeme dělat něco úplně jiného, než je potřeba.
Když víme, co chceme udělat, musíme zjistit, co k tomu budeme potřebovat. To jsou naše vstupy.
Vstup jsou všechna data, informace nebo suroviny, které potřebujeme k tomu, abychom mohli úlohu začít řešit.
Bez správných vstupů nemůžeme začít. Kuchař bez ingrediencí neuvaří. Počítač bez dat nic nespočítá.
Když úlohu vyřešíme, dostaneme nějaký výsledek. To je náš výstup.
Výstup je výsledek, který získáme po dokončení úlohy nebo po zpracování vstupů.
Výstup je to, co jsme chtěli získat. Je to hotová polévka, vypočítaný příklad, nebo hotový referát.
Někdy nestačí jen vědět, co chceme a co k tomu potřebujeme. Musíme také vědět, jaké jsou pravidla nebo omezení. To jsou podmínky řešení.
Podmínky řešení jsou pravidla, omezení nebo požadavky, které musíme dodržet při řešení úlohy.
Podmínky nám říkají, jak má být výsledek přesný, jak rychle se má něco udělat, nebo jaké nástroje můžeme použít.
Pojďme si to ukázat na příkladu, který by mohl řešit počítač.
Teď si ukážeme, jak stejnou úlohu (sečíst dvě čísla) můžeme řešit ve vizuálním programovacím prostředí Scratch.
Krok za krokem:
číslo1, číslo2, výsledekCo se děje:
číslo1Schopnost jasně formulovat úlohy, identifikovat vstupy, výstupy a podmínky je základem nejen pro programování, ale i pro efektivní komunikaci a řešení problémů v digitálním světě. Pomáhá nám to lépe se domluvit s počítačem i s lidmi, vyhnout se nedorozuměním a dosáhnout požadovaných výsledků.
Aby postup byl skutečným algoritmem, musí splňovat tyto vlastnosti:
U algoritmů nás zajímá, jak rychle fungují a kolik paměti potřebují:
O-notace (Big O) popisuje, jak roste čas nebo paměť s velikostí vstupu:
Rekurze je technika, kdy funkce volá sama sebe:
Ve Flowgorithm můžeš implementovat složitější algoritmy:
Pokračujeme v učení Pythonu. V této kapitole se naučíš funkce, datové struktury a práci se soubory.
Funkce je pojmenovaný blok kódu, který můžeš opakovaně volat:
# Definice funkce
def pozdrav(jmeno):
"""Pozdraví uživatele."""
print(f"Ahoj, {jmeno}!")
# Volání funkce
pozdrav("Anna") # Ahoj, Anna!
# Funkce s návratovou hodnotou
def secti(a, b):
return a + b
vysledek = secti(5, 3) # vysledek = 8
# Funkce s výchozí hodnotou parametru
def pozdrav2(jmeno, pozdrav="Ahoj"):
print(f"{pozdrav}, {jmeno}!")
pozdrav2("Bob") # Ahoj, Bob!
pozdrav2("Bob", "Čau") # Čau, Bob!
# Více návratových hodnot
def deleni(a, b):
podil = a // b
zbytek = a % b
return podil, zbytek
p, z = deleni(17, 5) # p=3, z=2
# Vytvoření seznamu
cisla = [1, 2, 3, 4, 5]
jmena = ["Anna", "Bob", "Cyril"]
mix = [1, "text", 3.14, True]
# Přístup k prvkům (indexování od 0)
print(jmena[0]) # Anna
print(jmena[-1]) # Cyril (poslední)
# Úprava seznamu
jmena.append("Dana") # Přidá na konec
jmena.insert(1, "Eva") # Vloží na pozici 1
jmena.remove("Bob") # Odstraní první výskyt
smazany = jmena.pop() # Odstraní a vrátí poslední
# Slicing (řezy)
cisla = [0, 1, 2, 3, 4, 5]
print(cisla[1:4]) # [1, 2, 3]
print(cisla[:3]) # [0, 1, 2]
print(cisla[3:]) # [3, 4, 5]
print(cisla[::2]) # [0, 2, 4] (každý druhý)
# Užitečné metody
cisla.sort() # Seřadí
cisla.reverse() # Otočí pořadí
delka = len(cisla) # Počet prvků
soucet = sum(cisla) # Součet
maximum = max(cisla) # Maximum
# Slovník = páry klíč: hodnota
student = {
"jmeno": "Jan Novák",
"vek": 16,
"trida": "2.A"
}
# Přístup k hodnotám
print(student["jmeno"]) # Jan Novák
print(student.get("vek")) # 16
print(student.get("skola", "?")) # ? (výchozí hodnota)
# Úprava slovníku
student["vek"] = 17 # Změna hodnoty
student["skola"] = "SPŠ" # Přidání nového klíče
del student["trida"] # Smazání klíče
# Procházení slovníku
for klic in student:
print(klic, student[klic])
for klic, hodnota in student.items():
print(f"{klic}: {hodnota}")
# Čtení souboru
with open("data.txt", "r", encoding="utf-8") as f:
obsah = f.read() # Celý soubor jako text
# nebo
radky = f.readlines() # Seznam řádků
# Zápis do souboru
with open("vystup.txt", "w", encoding="utf-8") as f:
f.write("První řádek\n")
f.write("Druhý řádek\n")
# Připojení na konec souboru
with open("log.txt", "a", encoding="utf-8") as f:
f.write("Nový záznam\n")
# Čtení řádek po řádku (efektivní pro velké soubory)
with open("velky.txt", "r", encoding="utf-8") as f:
for radek in f:
print(radek.strip()) # strip() odstraní \n
# Základní ošetření
try:
cislo = int(input("Zadej číslo: "))
vysledek = 100 / cislo
print(f"Výsledek: {vysledek}")
except ValueError:
print("To není platné číslo!")
except ZeroDivisionError:
print("Nelze dělit nulou!")
except Exception as e:
print(f"Neočekávaná chyba: {e}")
finally:
print("Tento kód se provede vždy.")
# Vyvolání vlastní chyby
def nastav_vek(vek):
if vek < 0:
raise ValueError("Věk nemůže být záporný!")
return vek
# todo.py - jednoduchá aplikace TO-DO list
def zobraz_ukoly(ukoly):
if not ukoly:
print("Žádné úkoly!")
return
for i, ukol in enumerate(ukoly, 1):
print(f"{i}. {ukol}")
def hlavni():
ukoly = []
while True:
print("\n1. Zobrazit úkoly")
print("2. Přidat úkol")
print("3. Splnit úkol")
print("4. Konec")
volba = input("Vyber možnost: ")
if volba == "1":
zobraz_ukoly(ukoly)
elif volba == "2":
ukol = input("Nový úkol: ")
ukoly.append(ukol)
print("Úkol přidán!")
elif volba == "3":
zobraz_ukoly(ukoly)
try:
cislo = int(input("Číslo splněného: ")) - 1
smazany = ukoly.pop(cislo)
print(f"Splněno: {smazany}")
except (ValueError, IndexError):
print("Neplatná volba!")
elif volba == "4":
print("Nashledanou!")
break
hlavni()