3. Řízení běhu programu

Podobné dokumenty
Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Řetězce a řídicí struktury

Řídicí struktury. alg3 1

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Algoritmizace a programování

Algoritmizace a programování

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

6 Příkazy řízení toku

Část 1 Soubory a vytvoření projektu. Řetězce a řídicí struktury. Část 2 Připomínka (NSD) Část 3 Textové řetězce, operátory a načítání vstupu

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Algoritmizace prostorových úloh

Řetězce a řídicí struktury

Algoritmizace prostorových úloh

2. lekce Algoritmus, cyklus Miroslav Jílek

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Programování v jazyce JavaScript

IB111 Úvod do programování skrze Python Přednáška 7

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Programovací jazyk Pascal

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Algoritmizace. 1. Úvod. Algoritmus

Jazyk C# a platforma.net

Paměť počítače. alg2 1

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

Výukový materiál zpracován v rámci projektu EU peníze školám

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

6. Příkazy a řídící struktury v Javě

Základy algoritmizace 4. Problémy, algoritmy, data

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Sekvenční a podmíněné provádění

Konečný automat. Jan Kybic.

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

5. Vyhledávání a řazení 1

Algoritmizace a programování

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Algoritmy a datové struktury

Úvod do programování - Java. Cvičení č.4

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

10. Složitost a výkon

Řídící struktury, if, while, switch

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

11. Přehled prog. jazyků

Zápis programu v jazyce C#

PROGRAMOVÁNÍ V SHELLU

5 Přehled operátorů, příkazy, přetypování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Programování v C++ 1, 1. cvičení

Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Psaní jednoduchých programů (2. přednáška) F F U K. Jonathan L. Verner. Department of Logic

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Základy algoritmizace a programování

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Algoritmizace. Cíle předmětu

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Řídící struktury, if, while, switch

Úvod do programovacích jazyků (Java)

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Algoritmizace a programování

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Základy algoritmizace 2. Proměnné, datové typy

Princip funkce počítače

NPRG030 Programování I, 2010/11

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Podmíněný příkaz

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

VISUAL BASIC. Práce se soubory

Výrazy, operátory a řídicí struktury

Zápis programu v C a základní řídicí struktury

PSK3-9. Základy skriptování. Hlavička

Lekce 01 Úvod do algoritmizace

NPRG030 Programování I, 2016/17 1 / :58:13

Výjimky. Tomáš Pitner, upravil Marek Šabo

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Operační systémy. Cvičení 4: Programování v C pod Unixem

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování v Pythonu

Regulární výrazy. Filtry grep, sed a awk.

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Transkript:

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 1 Základy algoritmizace 3. Řízení běhu programu doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 2 Základy algoritmizace Dnes: Řízení výpočtu Větvení Cykly Výjimky

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 3 Problém, algoritmus a program Příklad: Najít největšího společného dělitele čísel 6 a 15 Víme co musí platit pro číslo d, aby bylo největším společným dělitelem čísel x a y Známou deklarativní znalost o problému můžeme využít pro návrh výpočetního postupu, např. 1. Nechť máme nějaký odhad čísla d 2. Můžeme ověřit, zda-li d splňuje požadované vlastnosti 3. Pokud ano, jsme u cíle 4. Pokud ne, musíme d vhodně modifikovat a začít znovu Výpočetní problém chceme vyřešit využitím konečné množiny primitivních operací počítače Konkrétní úlohu pro čísla 6 a 15 zobecňujeme pro libovolná čísla x a y, pro které navrhneme algoritmus Algoritmus následně přepíšeme do programu využitím konkrétního programovacího jazyka

Algoritmus a program Algoritmus je postup řešení třídy problémů Algoritmus je recept na výpočetní řešení problému Program je implementací algoritmu s využitím zápisu příkazů programovacího jazyka Program je posloupnost instrukcí počítače Předpokládáme, že náš problém lze výpočetně řešit a je výpočetně zvladatelný Problémy v předmětu ZAL takové jsou, ale v praktických problémech tomu tak nemusí být vždy. Můžeme narazit na problém jak úlohu vůbec formulovat, nebo na limity výpočetního výkonu. Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 4

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 5 Řešení problému Množina primitivních instrukcí počítače je relativně malá Práce s číselnými hodnotami (v operační paměti počítače) Odkazované jmény deklarovaných proměnných Výpočetní operace (výrazy) Binární nebo unární operace, tj. čtení jednoho nebo dvou číselných hodnot z paměti, provedení operace a zápis výsledku do paměti. Testování hodnot proměnných (podmínky a větvení výpočtu) Pokud podmínka platí, vykonej instrukci, jinak udělej něco jiného nebo nic. Skoky na provedení konkrétní posloupnosti instrukcí v závislosti na splnění podmínky Program counter (PC) jako ukazatel z jaké adresy v paměti čte počítač instrukce pro vykonání. Tyto instrukce se objevují ve své abstraktní podobě V zápisu algoritmu např. jako bloky vývojového diagramu V zápisu programu jako příkazy a vyhrazená klíčová slova

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 6 Příklad slovní popis výpočtu Úloha Najděte největšího společného dělitele čísel 6 a 15. Co platí pro společného dělitele čísel? Řešení Návrh postupu řešení pro dvě libovolná přirozená čísla Definice vstupu a výstupu algoritmu Označme čísla x a y Vyberme menší z nich a označme jej d Je-li d společným dělitelem x a y končíme Není-li d společným dělitelem pak zmenšíme d o 1 a opakujeme test až d bude společným dělitelem x a y Symboly x, y a d reprezentují proměnné (paměťové místo) ve kterých jsou uloženy hodnoty, které se v průběhu výpočtu mohou měnit

Příklad slovní popis algoritmu Úloha Najděte největší společný dělitele přirozených čísel x a y. Řešení Vstup: dvě přirozená čísla x a y Výstup: přirozené číslo d největší společný dělitel x a y Postup: 1. Je-li x < y, pak d nastav na hodnotu x, jinak na hodnotu y 2. Pokud d není dělitelem x nebo d není dělitelem y opakuj krok 3, jinak proveď krok 4 3. Zmenši d o 1 4. Výsledkem je hodnota d Algoritmus = výpočetní postup jak zpracovat vstupní data a určit (vypočítat) požadované výstupní hodnoty (data) s využitím elementárních výpočetních instrukcí a pomocných dat. Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 7

Příklad grafický popis algoritmu Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 8

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 9 Příklad algoritmus v pseudokódu Zápis algoritmu využitím klíčových a dobře pochopitelných slov Neodpovídá přesně zápisu programu v konkrétním programovacím jazyce, ale je čitelný a lze velmi snadno přepsat

Příklad program v Pythonu Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 10 def getgreatestcommondivisor(x, y): if (x<y) : d = x else: d = y while ((x % d!= 0) or (y % d!= 0)): d = d - 1 return d def getgreatestcommondivisor(x, y): d = x if x < y else y while x % d or y % d: d -= 1 return d

Řízení výpočtu Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 11

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 12 Základní výpočetní operace Aritmetické operátory + - * / % ** // Porovnávací (relační) operátory ==!= <> > < >= <= Přiřazení = += -= *= /= %= //= Bitové operace & ^ ~ << >> Logické operátory and or not Operátory příslušnosti Operátory identity in is not in is not

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 13 Řízení výpočtu Strukturované příkazy Složený příkaz posloupnost příkazů Blok posloupnost deklarací a příkazů vymezena odsazením V jiných jazycích např. závorkami {} Základní řídicí struktury Posloupnost předepisuje postupné provedení dílčích příkazů Větvení předepisuje posloupnost v závislosti na splnění určité podmínky Cyklus předepisuje opakované provedení posloupnosti (bloku) v závislosti na splnění určité podmínky

Řízení výpočtu Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 14 Sekvence Podmínka if Podmínka if-else

Řízení výpočtu Větvení switch* Cyklus for a while Cyklus do* *v Pythonu není Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 15

Větvení Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 16

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 17 Větvení Příkaz if umožňuje větvení programu na základě podmínky if expression: statement(s) Podmínka je logický výraz, jehož hodnota je typu Boolean Každý objekt lze testovat za false je považováno: None, False Nula numerického výrazu Prázdná sekvence, (), [] Vše ostatní je True Porovnej: while x % d!= 0 or y % d!= 0: d -= 1 while x % d or y % d : d -= 1 Příkaz je příkaz, respektive blok

Větvení if...elif else volitelné další volby Příklad if expression: statement(s) elif expression2: statement(s) elif expression3: statement(s) else: statement(s) if (x<y): tmp = x x = y y = tmp if (x<y): min = x max = y else: min = y max = x Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 18

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 19 Větvení Přepínač switch umožňuje větvení programu na základě různých hodnot výrazu výčtového typu Základní tvar (Java) Není v pythonu přímo podporován Vypočte se hodnota výrazu a provedou se příkazy odpovídající konstantě s identickou hodnotou

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 20 Větvení Switch příklad napište program, který podle čísla dne vytiskne na obrazovky jeho jméno dayofweek = 2 dayofweek = 2 if dayofweek==1: print("monday") elif dayofweek==2: print("tuesday") elif dayofweek==3: print("wednesday") elif... elif dayofweek==7: print("sunday") else: print("invalid day") week = { 1:"Monday", 2:"Tuesday", 3:"Wednesday",... 7:"Sunday" } print(week.get(dayofweek, "Invalid day"))

Větvení Switch dictionary a funkce S anonymní funkcí Obecně dayofweek = 2 week = { 1:lambda: print("monday"), 2:lambda: print("tuesday"), 7:lambda: print("sunday") }[dayofweek]() dict = { 1:lambda x,y: x+y, 2:lambda x,y: x-y, 3:lambda x,y: x*y } oper, a, b = 1,10,5 result = dict[oper](a,b) dict = { 1:foo1, 2:foo2, } dict[oper](arguments) Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 21

Cykly Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 22

Cykly Cyklus while Základní tvar cyklu běží dokud je podmínka true while expression: statement(s) Nekonečná smyčka Cyklus nemusí proběhnout ani jednou! while True: statement(s) Else vykonán pokud podmínka přestane platit (jen jednou) while expression: statement(s) else: statement(s) Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 23

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 24 Cykly Příklad a=0 while a<10: print(a) a+=1 Přerušení běhu break else: print("on false") a=0 while a<10: print(a) a+=1 if a>5: break else: print("on false") 0 1 2 3 4 5 6 7 8 9 on false 0 1 2 3 4 5

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 25 Cykly Cyklus for Používá se pro iterace v daném rozsahu Obecně je ekvivalentem zápisu a=0 while a<10: dosomething() a+=1 Příklad Java for (int i=0; i<10; i++) { dosomething() } V Pythonu přes seznamy, řetězce, range for a in range(10): dosomething()

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 26 Cykly range je funkce generující posloupnosti celých čísel range(5) vygeneruje posloupnost 0, 1, 2, 3, 4 range(1,10) posloupnost zacinající 1 a končící 9! obecně Všechny parametry celá čísla, mohou být záporná Příklady cyklů range([start], stop[, step]) for a in range(0,10,2): print(a) list = (1,2,3,4,5) for a in list: print(a) for s in "Nejaky retezec": print(s)

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 27 Cykly Řízení cyklů for i while else prováděno při nesplnění podmínky (tedy na konci) break ukončí cyklus (přeskočí i else) continue restartuje cyklus, pokračuje na další iteraci for s in "Nejaky retezec": if s == " ": continue print(s) pass null statement, nedělá nic for s in "Nejaky retezec": if s == " ": pass else: print(s)

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 28 Cykly Konečnost algoritmu pro přípustná data v konečné době skončí Aby byl algoritmus konečný musí každý cyklus v něm uvedený skončit po konečném počtu kroků Zacyklení jeden z nejčastějších důvodů neukončení programu Program vykonává cyklus, jehož podmínka není nikdy splněna Příklad while i!= 0: j = i - 1 Neprovede se ani jednou, nebo nikdy neskončí

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 29 Cykly Základní pravidlo pro konečnost cyklu Provedením těla cyklu se musí změnit hodnota proměnné použité v podmínce cyklu Ne vždy zaručuje úspěch while i!= 0: i -= 1 Konečnost cyklu závisí na hodnotě proměnné před vstupem do cyklu Vstupní podmínky musí zajistit příkazy předcházející cyklu Zabezpečený program testuje přípustnost dat Cyklus for je robustní proti zacyklení for a in range(0, 10, -1): print("run") print("stop")

Výjimky Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 30

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 31 Výjimky K řízení výjimečných stavů programu Událost, která vzniká při běhu programu a přeruší jeho normální tok Výjimka musí být ošetřena, nebo program končí Příklad výjimky ZeroDivisionError, IndexError, IOError, TypeError a= 1 + "1" Traceback (most recent call last): File program.py", line 1, in <module> a= 1 + "1" TypeError: unsupported operand type(s) for +: 'int' and 'str' Process finished with exit code 1

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 32 Výjimky Zachycení a ošetření výjimek Příklad try: block of operations except Exception1: handle Exception1 type here except Exception2: handle Exception2 type here else: execute this block in case of no exception try: a= 1 + "1" except: print("something wrong") else: print("everything is OK")

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 33 Výjimky Zachycení více výjimek try: block of operations except(exception1[, Exception2[,...ExceptionN]]]): if there is any exception from given list then execute this block else: if there is no exception execute this block try-finally Nezachytí výjimku, není ovlivněno except a else Blok finally se vždy provede try: block of operations this will be skipped due to any exception finally: this would be allways executed Pokud nastala výjimka, vyvolá se po bloku finally

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 34 Výjimky try-finally Příklad práce se souborem try: fh = open("testfile", "w") try: fh.write("this is my test file.") finally: print("going to close the file") fh.close() except IOError: print("error: can\'t find file or read data")

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 35 Výjimky Výjimky s argumenty Umožňují předat informaci o důvodu chyby Jedna hodnota nebo tuple (error string, error number, error location) try: You do your operations here except ExceptionType as argument: You can print value of argument here Příklad def getintval(var): try: return int(var) except ValueError as argument: print("no numbers in\n", argument) getintval("xyz")

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 36 Výjimky Vyvolávání výjimek raise Exception("my exception") Traceback (most recent call last): File "program.py", line 1, in <module> raise Exception("my exception") Exception: my exception Process finished with exit code 1 Po zachycení lze opět vyvolat try: a=1+"1" except: print("something wrong") raise

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 37 Výjimky Obecná pravidla Zachytáváme jen to, co umíme napravit Napravujeme na správném místě a správným způsobem Nepoužíváme pro ošetření očekávaných stavů výjimka = něco výjimečného Vyvarujeme se tichému zachycení try: a=1+"1" except: pass #TODO: something wrong?

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 3 38 Základy algoritmizace Dnes: Řízení výpočtu Větvení Cykly Výjimky Příště shrnutí, datové struktury, algoritmy