Při zápisu algoritmu a programování používáme různé programové konstrukce pro řízení běhu programu. Základními konstrukcemi jsou:

  • Sekvence (posloupnost operací)
  • Větvení programu na základě podmínky
  • Cyklus (opakování určité části programu)

 

Sekvence

Program nebo lépe jeho část běží jako posloupnost jednotlivých operací. Vstup následující operace je závislý jen na výstupu operace přechozí.

Sekvenci si můžeme představit jako posloupnost jednotlivých příkazů, které se všechny postupně vykonají.

 

Větvení programu (IF)

Někdy je třeba vykonat jednu nebo druhou akci v závislosti na okolnostech. Tuto situaci dobře známe z běžného života, koneckonců v počítačovém světě se snažíme nabodobit realitu. Např.: "Jestliže je zima, obléknu si bundu, jinak jdu ven ve svetru". Typický příklad, kdy se změní další činnost podle okolností - podle podmínky. Mohli bychom napsat:

Jestliže je zima, oblékni si svetr a bundu, jinak si oblékni jen svetr. If (zima) oblékni svetr a oblékni bundu, else oblékni svetr.

Na výraz podmínky v závorce lze odpovědět pouze ano/ne nebo také true/falce, pravda/nepravda. Podmínku musíme tedy postavit tak, aby existovala jednoznačná odpověď true/false.

Příkaz IF

if graf

if teplota<0:
    print("Mrzne")
    zapni_topeni() # např. volá funkci zapni topení
else:
    print("Nemrzne")

Úplný a neúplný podmínkový příkaz IF

Úplná podmínka obsahuje část, která se provede při splnění podmínky a část, která se provede při nesplněné podmínce (za else) - viz. výše. Neúplný podmínkový příkaz obsahuje pouze část, která se provede při splněné podmínce.

if teplota<0:
    print("Mrzne")
    zapni_topeni() # např. volá funkci zapni topení

Jak vyhodnotit složitější výraz, který může nabývat tří stavů (např. číslo<0, číslo==0, číslo>0)?

Vnoříme do podmínky další podmínku.

 

 

Cyklus

Je-li třeba, aby se nějaká část opakovala, používáme příkazy cyklu. Rozeznáváme nejméně tři základní typy cyklů:

  • cyklus s pevným počtem opakování (předem známe a jsme schopni definovat počet cyklů)
  • cyklus s podmínkou na konci (cykly se provádí dokup platí podmínky, která se testuje po ukočení každého cyklu)
  • cyklus s podmínkou na začátku (cykly se provádí dokup platí podmínky, která se testuje před každým cyklem, nemusí tedy být proveden ani jeden cyklus)

 Cyklus s pevným počtem opakování (FOR)

for graf

for y in range(0,401,50):   # y se mění 0 - 400 po skoku 50
        kresli_obd(x,y)
        kresli_trs(x,y)

Cyklus s podmínkou na začátku (WHILE - opakuj pokud platí podmínka)

Cyklus běží neustále do té doby, dokud platí podmínka uvedená v cyklu.

while graf  Tento cyklus nemusí proběhnout ani jednou. Je to v případě, kdy není splněna podmínka vůbec.

while (a>0):  # cyklus se bude opakovat do té doby, dokud a>0, nemusí však proběhnout ani jednou - při a<0
    a = random.randrange(-10,10) # do a přiřadím náhodné číslo    
    print(a)  # vytiskne obsah proměnné a (náhodné číslo)
print("cyklus skončil")

 

""" 
Program v cyklu losuje a tiskne náhodné číslo do té doby, dokud není vylosované číslo<0. Protože se na začátku může vylosovat i číslo<0, nemusí cyklus vůbec proběhnout. Podmínka while a>0 nebude splněna.
"""
import random # import modulu, abychom měli náhodná čísla
a= random.randrange(-10,10)

while (a>0):  # cyklus se bude opakovat do té doby, dokud a>0, nemusí však proběhnout ani jednou - při a<0
    a = random.randrange(-10,10) # do a přiřadím náhodné číslo    
    print(a)  # vytiskne obsah proměnné a (náhodné číslo)
print("cyklus skončil")

 

Příklad jiného využití cyklu while - nekonečný cyklus. Z cyklu můžeme vyskočit příkazy break nebo continue.

break - ukončí cyklus a pokračuje dále v programu následujícím příkazem za cyklem

continue - ukončí aktuální běh cyklu a pokračuje novým cyklem

while True: #cyklus s podmínkou na začátku - zde vždy True, jindy podmínka
    z = input('Akce:') #do proměnné z vkládám např. akci (např. sifra nebo rozlustit)
    if (z == 's'): #pokud z je s (jako sifra)
        print("napsal jsi s") # např. zavolám funkci šifra 
    elif (z == 'r'): #pokud z je r (jako rozlustit)
        print("napsal jsi r")
    elif (z == 'q'):  #když zadá uživatel q
        break # ukončí cyklus
    else: 
        continue # ukončí daný běh cyklu a začne novým cyk