Problémy a algoritmy
Obsah cvičení
- Pojmy z přednášky: problém, instrukce, algoritmus
- Pseudokód
- Příklady problémů a algoritmů pro jejich řešení.
Opakování z přednášky
- problém?
- instrukce?
- algoritmus?
Zápis algoritmu pseudokódem
Pár základních konstrukcí, které budeme potřebovat. Další na přednášce, případně v Cormen et al.: Introduction to algorithms.
Přiřazení
“Do proměnné a ulož hodnotu b.”
a ← b
x ← 2 * y − 3/5
Podmíněný příkaz
“Pokud platí podmínka, tak udělej …, jinak udělej …”
- if a = b then c ← 1
- print(c je jedna)
- else c ← 2
- print(c je dva)
Odsazení řádků je důležité.
Cykly
Cyklus for
Cyklus s řídící proměnnou.
“Pro i od … do … udělej …”
- for i ← 0 to 10 do
- k ← i * i
- print(k*k)
Cyklus while-do
Cyklus opakující se dokud platí podmínka.
“Dokud platí podmínka opakuj …”
- i ← 0
- while (i <= 10)
- k ← i * i
- print(k*k)
- i++
Cyklus repeat-until
Cyklus opakující se dokud neplatí podmínka, který ale vždy proběhne alespoň jednou.
“Opakuj … dokud neplatí podmínka”
- i ← 0
- repeat
- k ← i * i
- print(k*k)
- i++
- until (i = 11)
Existuje i cyklus do-while, který opakuje činnost, dokud podmínka platí.
- Zápis konstrukcí v jazyce C. Pokud jste to v C ještě neporbírali, nevadí, projdete si to příště.
- Zápis konstrukcí v jazyce Python. Pokud jste to v Pythonu ještě neporbírali, nevadí, projdete si to příště.
Příklady na cvičení
(tabule): Následující problémy popište pomocí možných vstupů a odpovídajících výstupů. Navrhněte a nejprve slovně a poté pseudokódem popište algoritmus pro jejich řešení.
- Pro zadané číslo n vypište druhé mocniny všech čísel od 1 do n.
- Pro zadané číslo n vypište “násobilku” až do hodnoty n ⋅ n.
- Pro zadané slovo spočítejte, kolikrát obsahuje jednotlivá písmena abecedy (nerozlišujte velikost).
Úkoly k procvičení
- Následující problémy popište pomocí možných vstupů a odpovídajících výstupů. Navrhněte a nejprve slovně a poté pseudokódem popište algoritmus pro jejich řešení.
- Pokud už máte potřebné znalsoti z kurzu základů programování, zkuste algoritmy implementovat v jazyce C/Python. Pokud ne, tak si to zkuste, až v C/Pythonu základy proberete.
- Je zadané číslo sudé nebo liché?
- Řešení lineární rovnice a ⋅ x + b = 0.
- Násobení dvou přirozených čísel. Zkuste navrhnout algoritmus používající z aritmetických operací pouze sčítání a odčítání.