Celková osnova přednášek. Algoritmy I prezentace k přednáškám. Celková osnova přednášek (pokrač.) Celková osnova přednášek (pokrač.

Podobné dokumenty
Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Základy C++ doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Úvodní přednáška. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Celková osnova přednášek. Algoritmy I prezentace k přednáškám. Celková osnova přednášek (pokrač.) Celková osnova přednášek (pokrač.

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

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

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

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

Úvod. Programovací paradigmata

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Algoritmizace. Cíle předmětu

11. Přehled prog. jazyků

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Algoritmizace- úvod. Ing. Tomáš Otáhal

Základy algoritmizace

IB111 Programování a algoritmizace. Programovací jazyky

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

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

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

Matematika v programovacích

Základy algoritmizace a programování

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

Maturitní témata Školní rok: 2015/2016

Algoritmizace prostorových úloh

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

C2115 Praktický úvod do superpočítání

ALGORITMIZACE A PROGRAMOVÁNÍ

Algoritmizace. Obrázek 1: Přeložení programu překladačem

Základy algoritmizace a programování

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

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

Algoritmizace prostorových úloh

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

Úvod do programování. Lekce 1

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

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

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

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

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

ŠVP Gymnázium Ostrava-Zábřeh Úvod do programování

Informační a komunikační technologie

Základy jazyka C. Základy programování 1 Tomáš Kühr

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

Sada 1 - Základy programování

Úvod do programovacích jazyků (Java)

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Algoritmy a algoritmizace

DTP Základy programování Úvod do předmětu

Program a životní cyklus programu

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

Úvod do programování

Jazyk C++, některá rozšíření oproti C

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

Algoritmizace. 1. Úvod. Algoritmus

12PPOK PROJEKTOVÁNÍ POZEMNÍCH KOMUNIKACÍ

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

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

TEORIE ZPRACOVÁNÍ DAT

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

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

Diskrétní matematika. DiM /01, zimní semestr 2017/2018

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

ČÁST 1. Základy 32bitového programování ve Windows

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

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

Princip funkce počítače

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

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

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

Objektově orientované programování

Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016

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

Pohled do nitra mikroprocesoru Josef Horálek

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Profilová část maturitní zkoušky 2013/2014

Lekce 01 Úvod do algoritmizace

8 Třídy, objekty, metody, předávání argumentů metod

Úvod do programování v jazyce Java

Profilová část maturitní zkoušky 2017/2018

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

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

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Transkript:

Celková osnova přednášek Algoritmy I prezentace k přednáškám doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Algoritmy I 1 / 358 0. Úvodní přednáška O předmětu Algoritmy I Prezenční forma studia Výuka Úkoly a jejich hodnocení Kombinovaná forma studia Výuka Úkoly a jejich hodnocení Software pro výuku Studijní literatura 1. Pojem algoritmus Algoritmický problém Pojem algoritmu Vlastnosti algoritmu Turingův stroj Church-Turingova teze 2. Shrnutí Jiří Dvorský (VŠB TUO) Algoritmy I 2 / 358 Celková osnova přednášek (pokrač.) 3. Základy C++ 4. Počítač Hardware základní struktura počítače Software Osobní počítače 5. Programovací jazyk 6. Jazyk C++ Jazyk C Vznik spustitelného programu 7. Základní stavební bloky C++ Datové typy v C++ Proměné 8. Řídící struktury jazyka C++ 9. Funkce v jazyce C++ 10. Složitost algoritmů 11. Motivace Jiří Dvorský (VŠB TUO) Algoritmy I 3 / 358 Celková osnova přednášek (pokrač.) 12. Analýza složitosti algoritmů 13. Pole v jazyce C++ 14. Pole Výpočty lineární algebry Vektorové výpočty Výpočty se čtvercovými maticemi 15. Rekurze 16. Co si představit pod pojmem rekurze? 17. Faktoriál 18. Fibonacciho posloupnost 19. Využití rekurze pro řešení problémů 20. Backtracking 21. Jezdcova procházka 22. Vyhledávání 23. Vyhledávání Definice problému Jiří Dvorský (VŠB TUO) Algoritmy I 4 / 358

Celková osnova přednášek (pokrač.) Sekvenční vyhledávání Vyhledávání půlením intervalu 24. Třídění 25. Třídění RadixSort 26. Základní třídící algoritmy 27. Asociativní třídicí algoritmy Základní třídící algoritmy Třídění výběrem SelectSort Třídění vkládáním InsertSort Bublinové třídění BubbleSort Úvodní přednáška doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava 28. Pokročilé třídící algoritmy QuickSort Třídění rozdělováním Třídění haldou HeapSort Jiří Dvorský (VŠB TUO) Algoritmy I 5 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 6 / 358 O předmětu Algoritmy I O předmětu Algoritmy I Upozornění Všechny aktuální informace k předmětu naleznete na http://www.cs.vsb.cz/dvorsky/ Tato prezentace slouží jen pro účely úvodní přednášky a nebude dále aktualizována. předmět je úvodním kurzem programování, vazba na předmět Programování I, předpokládá se znalost středoškolské matematiky a obecná orientace ve výpočetní technice, algoritmy a datové struktury budou demonstrovány v jazyce C++, praktická implementace probíraných algoritmů a datových struktur. Jiří Dvorský (VŠB TUO) Úvodní přednáška 7 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 8 / 358

Rozsah předmětu, způsob zakončení Garant předmětu Rozsah předmětu výuka probíhá v zimním semestru prvního ročníku bakalářského studia, hodinová dotace: 2 hodiny přednášky a 2 hodiny cvičení týdně v prezenční formě, 7 tutoriálů v kombinované formě studia. předmět je ohodnocen 5 kredity. doc. Mgr. Kancelář: Email: Web: Jiří Dvorský, Ph.D. EA441 jiri.dvorsky@vsb.cz www.cs.vsb.cz/dvorsky K čemu je garant předmětu? Způsob zakončení Garant předmětu zodpovídá za průběh výuky celého předmětu, průběh cvičení, plnění úkolů na cvičeních a za korektní hodnocení úkolů. Problémy spojené se cvičeními řešte primárně se svým cvičícím. Pokud se nepodaří dosáhnout řešení problému s cvičícím obracejte se na garanta předmětu. zakončení klasifikovaným zápočtem, klasifikovaný zápočet není zkouška, nejsou tři termíny jako u zkoušky, Jiří Dvorský (VŠB TUO) Garant předmětu, přednášející, tutor komb. formy Úvodní přednáška 9 / 358 Konzultační hodiny Jiří Dvorský (VŠB TUO) Úvodní přednáška 10 / 358 Studenti se specifickými nároky Pokud na přednášce nebudete něčemu rozumět, potřebujete poradit nebo vyřešit nějaký problém s přednáškou, cvičeními, testy, Vaší absencí na výuce například z důvodů plánované operace atd. je možné využít konzultační hodiny. V tento čas jsem připraven věnovat se Vám osobně. Termín konzultačních hodin je uveřejněn mým webových stránkách. Žádám Vás ale o dodržení několika pravidel: 1. Konzultaci je nutné si domluvit předem, nejlépe emailem. 2. Pokud potřebujete poradit s učivem, přineste si s sebou materiály, které jste si k tématu prostudovali, vypište si co je Vám jasné a kde jste se zasekli a potřebujete poradit. Rozhodně neplatí myšlenka: Já k němu přijdu na konzultaci, on si o mě bude myslet, že jsem úplně blbej a u zápočtu mě vyhodí. Centrum Slunečnice FEI http://slunecnice-fei.vsb.cz/, poskytování služeb a podpory zpřístupňující studium i pro studenty se specifickými nároky, lze získat, mimo jiné, zvýšenou časovou dotaci na úkoly. Výzva Je vysoce žádoucí, aby studenti, kteří dostanou tuto zvýšenou časovou dotaci, neprodleně kontaktovali svého cvičícího a garanta předmětu, abychom předešli případným problémům! Přijdte se zeptat rovnou ke zdroji informací internetová fóra jsou zaplevelena různými polopravdami i naprostými nesmysly. Jiří Dvorský (VŠB TUO) Úvodní přednáška 11 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 12 / 358

Algoritmy I výuka, úkoly a jejich hodnocení Výuka, úkoly a jejich hodnocení pro různé formy studia prezenční a kombinované studium má specifickou formu výuky, obě formy studia mají specifické podmínky pro splnění předmětu, podle formy Vašeho studia se Vás týká pouze jedna ze dvou následujících částí prezentace. Prezenční forma studia Jiří Dvorský (VŠB TUO) Úvodní přednáška 13 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 14 / 358 Přednášky Stručná osnova přednášek každé pondělí od 12:30 do 14:00, učebna NA1, slouží především k: výkladu učiva, zdůraznění klíčových poznatků či postupů v dané části učiva, předvedení ukázkových příkladů, jejich typických řešení a tak dále, na Vaše případné dotazy k přednášce jsem schopen odpovídat v konzultačních hodinách. 1. Úvodní přednáška, Pojem algoritmus 2. Základy jazyka C++ 3. Řídící struktury jazyka C++ 4. Funkce v jazyce C++ 5. Složitost algoritmů 6. Pole v jazyce C++ 7. Rekurze 8. Využití rekurze pro řešení problémů 9. Vyhledávání 10. Třídění 11. Základní třídící algoritmy 12. Pokročilé třídící algoritmy Jiří Dvorský (VŠB TUO) Úvodní přednáška 15 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 16 / 358

Cvičení Cvičení Přímá výuka ve cvičeních odpovídá přednáškám. Ve cvičeních pracují studenti pod vedením cvičícího na konkrétní implementaci příkladů v jazyce C++. V každém cvičení se předpokládá implementace jednoho až dvou příkladů. Další náplní cvičení je testování Vašich znalostí formou různých testů. Dále je také možné konzultovat s cvičícím probírané učivo. Rozdělení do cvičení tak, jak je uvedeno v informačním systému Edison, je nutné respektovat. Není možné překračovat kapacitu cvičení. Veškeré přesuny je nutné mít zaznamenány v systému Edison. Až na výjimky, nelze psát testy na jiných cvičeních, než která máte zapsaná v Edisonu. Upozornění Cvičení nenahrazuje přednášku! Neočekávejte, že pokud nebudete chodit na přednášky, tak Vám cvičící na cvičeních bude dělat jakousi bleskovou náhradní přednášku, abyste se vůbec mohli pustit do příkladů, jejichž řešení se na cvičení předpokládá. Bývá dobrým zvykem, že studenti se na cvičení aspoň minimálně připraví. Není nutné látku precizně ovládat, ale je nutné se orientovat v základních pojmech. Jinak cvičení nemají smysl. Jiří Dvorský (VŠB TUO) Úvodní přednáška 17 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 18 / 358 Úkoly první test Úkoly druhý test První test se bude psát na přednášce 24. října 2016 řádný termín. Tento test se jako jediný bude psát na přednášce. Opravný termín se bude psát ve cvičeních v týdnu počínaje 31. října 2016. Bude to krátký písemný test na cca 10 až 15 minut maximálně. Test bude zaměřen na syntaxi a sémantiku jazyka C++. Jinak řečeno, otázky typu co tato konstrukce v C++ znamená, je tato konstrukce správná, jak se deklaruje proměnná, co znamená tento operátor, jak se napíše cyklus od jedné do pěti atd. Druhý test se bude psát na cvičeních v týdnu od 7. listopadu 2016 řádný termín. Opravný termín bude v následujícím týdnu tj. od 14. listopadu 2016. Na začátku vymezené doby, jedno 90-ti minutové cvičení, dostanete zadání, které ve zbývajícím čase naprogramujete, odladíte a předvedete cvičícímu, který Vaše řešení ihned ohodnotí. Podrobnosti na webu předmětu. Jiří Dvorský (VŠB TUO) Úvodní přednáška 19 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 20 / 358

Úkoly třetí test Úkoly závěrečná písemná práce Třetí test se bude psát na cvičeních v týdnu od 5. prosince 2016 řádný termín. Opravný termín bude v následujícím týdnu tj. od 12. prosince 2016. Na začátku vymezené doby, jedno 90-ti minutové cvičení, dostanete zadání, které ve zbývajícím čase naprogramujete, odladíte a předvedete cvičícímu, který Vaše řešení ihned ohodnotí. Podrobnosti na webu předmětu. Řádný termín závěrečné písemná práce proběhne na přednášce 12. prosince 2016. Bude zaměřena spíše na teoretické znalosti, dále schopnost vysvětlit ukázku kódu v C++ nebo naopak napsat jednoduchou ukázku kódu v C++ podle slovního či matematického zadání. V systému Edison budou vypsány termíny na které se přihlásíte. Podrobnosti na webu předmětu. Studenti, kteří splní všechny úkoly v řádném termínu, budou mít uzavřený předmět ke konci zápočtového týdne. Jiří Dvorský (VŠB TUO) Úvodní přednáška 21 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 22 / 358 Hodnocení úkolů Je nutné splnit všechny výše uvedené úkoly, a zároveň u všech úkolů aspoň minimální počet bodů. Minimální počet bodů Maximální počet bodů První test 10 20 Druhý test 10 20 Třetí test 10 20 Písemná práce 21 40 Celkem 51 100 Všechna bodová hodnocení jsou průběžně zapisována do systému Edison. Jiří Dvorský (VŠB TUO) Úvodní přednáška 23 / 358 Obecné pokyny ke všem úkolům U všech úkolů jste povinni se prokázat svou studentskou kartou nebo jiným oficiálním dokladem totožnosti. Bez prokázání totožnosti Vám nebude výsledek započítán. Každý prohřešek vůči studijnímu řádu u testů a písemné práce bude nekompromisně postihován. Jde především o opisování, plagiátorství, a záměnu studentů. Je zakázáno zadání testů, písemek atd. kopírovat, fotit mobily, fotoaparáty, skenovat či jakkoliv jinak kopírovat, rozmnožovat, přenášet elektronickým způsobem a podobně. Na každý úkol máte jeden řádný pokus a jeden opravný pokus. Podmínky pro umožnění opravného termínu jsou uvedeny dále. Předmět je ukončen klasifikovaným zápočtem. Nevztahuje se tudíž na něj požadavek dvou opravných pokusů, jak to vyžaduje studijní řád u zkoušky. Žádné další pokusy nejsou možné, například dvě opravy jednoho testu. Jiří Dvorský (VŠB TUO) Úvodní přednáška 24 / 358

Pokyny k prvnímu, druhému a třetímu testu Pokyny k prvnímu, druhému a třetímu testu Řádný termín každého úkolu je pro všechny studenty daného cvičení povinný. Pokud se řádného termínu úkolu nezúčastníte, je vaší povinností se cvičícímu předem omluvit. Termín předem znamená nejpozději do začátku daného cvičení. Pokud se neomluvíte, daný úkol bude považován za nesplněný (0 bodů) a opravný termín vám nebude umožněn. Důsledkem je pak neúspěšné ukončení celého předmětu. Pokud se řádného termínu zúčastníte a neuspějete s řešením zadaného úkolu, máte nárok na opravný termín. Obdobná povinnost omluvit se platí i pro opravný termín. Proč nepovolovat opravný termín? Plýtvání časem vyučujícího! Neúčast na řádných termínech test se musí psát i když je přítomna jen třetina studentů, Požadavky typu: A budou termíny ve zkouškovém? A budou v březnu? A mě to časově nevyhovuje, nemohl bych přijít někdy jindy než na to moje cvičení? Víte já se vrátím v sobotu z hor, mohl bych si napsat ten test třeba v neděli odpoledne? V mailu jsem našel i toto: Z důvodu pracovní vytíženosti Vám oznamuji, že úkoly z předmětu Algoritmy I budu plnit až v letním semestru. Chci se zeptat, kdy budou vypsány termíny? Odpověď: Z důvodu pracovní vytíženosti v letním semestru nebudou žádné termíny. V letním semestru probíhá předmět Algoritmy II. Víte mě šéf nepustí z práce! Nešlo by to nějak? Nešlo, v práci jste tady! Jiří Dvorský (VŠB TUO) Úvodní přednáška 25 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 26 / 358 Pokyny k závěrečné písemné práci Řádný termín závěrečné písemné práce je pro všechny studenty povinný. Pokud se řádného termínu nezúčastníte, je vaší povinností se garantovi předmětu předem omluvit. Termín předem znamená nejpozději do začátku daného termínu. Pokud se neomluvíte, daný úkol bude považován za nesplněný (0 bodů) a opravný termín vám nebude umožněn. Důsledkem je pak neúspěšné ukončení celého předmětu. Opravný termín na závěrečnou písemnou práci je poskytován jen těm studentům, kteří u svého prvního pokusu získali aspoň 10 bodů. Obdobná povinnost omluvit se platí i pro opravný termín. Pokyny k závěrečné písemné práci Proč nepovolovat opravný termín Pokud někteří studenti nepovažují za nutné se na písemnou práci aspoň trochu připravit, já zase nepovažuji za nutné s těmito studenty ztrácet čas opravováním jejich písemek, či spíše výtvorů! Počet bodů na řádném termínu Opravný termín 0 až 9 NE 10 až 20 ANO více než 21 není nutný, úspěch Jiří Dvorský (VŠB TUO) Úvodní přednáška 27 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 28 / 358

Ukázky písemných prací Ukázky písemných prací Pusto, prázdno Co si o tom myslet? Křivka A3 má být grafem funkce Toto není zmýlení se v odpovědi, záměna dvou pojmů... Tady prostě nic není! y = log2 x zatímco křivka A4 má být grafem funkce y = x 2. Jiří Dvorský (VŠB TUO) Úvodní přednáška 29 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 30 / 358 Ukázky písemných prací Tak takhle ne! Konec části pro prezenční formu studia Odpověď na otázku 4: WTF? Neumín goauldsky! Odpověď na otázku 5: DUNNO Jiří Dvorský (VŠB TUO) Úvodní přednáška 31 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 32 / 358

Tutoriály Kombinovaná forma studia 1. tutoriál nepovinný 16. září 2016 Na tomto úvodním tutoriálu Vám budou sděleny informace o organizaci studia předmětu a informace o náplni předmětu. 2. tutoriál nepovinný 30. září 2016 K tomuto datu se předpokládá zvládnutí následujících témat: První program v C++, algoritmus, program, překlad, procesor, proces. Proměnné, konstanty, datové typy. Řídící konstrukce jazyka (sekvence, větvení, cyklus). Jiří Dvorský (VŠB TUO) Úvodní přednáška 33 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 34 / 358 Tutoriály Tutoriály 3. tutoriál povinný 14. října 2016 V průběhu tutoriálu proběhne první test. K tomuto datu se předpokládá zvládnutí následujících témat: Strukturované programování v C++, funkce a jejich parametry, volání funkcí. Pole. Vyhledávání v poli (sekvenční, půlením intervalu). 4. tutoriál nepovinný 29. října 2016 K tomuto datu se předpokládá zvládnutí následujících témat: Rekurze, vymezení pojmu, příklady, jednoduchý backtracking. 5. tutoriál povinný 11. listopadu 2016 Tento tutoriál je rozdělen do několika skupin, tutoriál proběhne na počítačové učebně, celou náplň tutoriálu bude tvořit druhý test. V systému Edison budou vypsány termíny na které se přihlásíte. 6. tutoriál nepovinný 25. listopadu 2016 K tomuto datu se předpokládá zvládnutí následujících kapitol: Třídění, vymezení problému, adresní třídění. Základní třídící algoritmy (třídění vkládáním, výběrem, bublinové). Pokročilé třídící algoritmy (QuickSort, HeapSort, MergeSort). Konzultace k semestrálnímu projektu. Jiří Dvorský (VŠB TUO) Úvodní přednáška 35 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 36 / 358

Tutoriály Úkoly první test 7. tutoriál povinný 9. prosince 2016 Tento tutoriál je rozdělen do několika skupin, tutoriál proběhne na počítačové učebně, celou náplň tutoriálu bude tvořit třetí test. V systému Edison budou vypsány termíny na které se přihlásíte. První test se bude psát na třetím tutoriálu 14. října 2016. Opravný termín se bude psát na dalším tutoriálu. Bude to krátký písemný test na cca 10 až 15 minut maximálně. Test bude zaměřen na syntaxi a sémantiku jazyka C++. Jinak řečeno, otázky typu co tato konstrukce v C++ znamená, je tato konstrukce správná, jak se deklaruje proměnná, co znamená tento operátor, jak se napíše cyklus od jedné do pěti a tak dále. Jiří Dvorský (VŠB TUO) Úvodní přednáška 37 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 38 / 358 Úkoly druhý test Úkoly třetí test Druhý test se bude psát na pátém tutoriálu 11. listopadu 2016. Opravný termín bude ve zkouškovém období. Na začátku vymezené doby dostanete zadání, které ve zbývajícím čase naprogramujete, odladíte a předvedete. Zadání druhého testu budou obsahovat práci s cykly, podmínkami, poli, i dvourozměrnými. Podívejte se jak se používají různé druhy cyklů, různé druhy podmínek, logické operace (logický součet, součin atd.). Prostudujte si jak se pracuje s vnořenými cykly, jak je lze pomocí příkazu break a continue předčasně ukončovat atd. Prostudujte si práci s polem. Podívejte se, jak se takové pole indexuje, jak se prochází v cyklu. Třetí test se bude psát na sedmém tutoriálu 9. prosince 2016. Opravný termín bude ve zkouškovém období. Na začátku vymezené doby dostanete zadání, které ve zbývajícím čase naprogramujete, odladíte a předvedete. Zadání třetího testu bude o něco komplikovanější než v předchozím testu. Pro úspěšné zvládnutí tohoto testu je nutné abyste uměli napsat funkce s různými způsoby předávání parametrů (hodnotou, odkazem), uměli předávat do funkcí pole. A potom takové funkce správně zavolat. V tomto testu se budou provádět výpočty nad polem, hledat v poli, přepisovat hodnoty, zjišťovat počet prvků pole větší než, menší než daná hodnota, tisknout pole na obrazovku atd. Jiří Dvorský (VŠB TUO) Úvodní přednáška 39 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 40 / 358

Úkoly projekt Úkoly projekt (pokrač.) V předmětech Algoritmy I a Programování I je v kombinované formě studia požadováno po studentech vypracování projektu. Po dohodě mezi garanty předmětů budou studenti této formy studia, mající zapsány oba dva předměty současně, vypracovávat jen jeden projekt. Studenti mající zapsán pouze jeden z těchto předmětů, jde většinou o studenty opakující předmět či celý ročník, vypracují projekt samozřejmě v tom předmětu, který mají zapsán. Cca v polovině října bude na webu tutora zveřejněno: rozdělení studentů podle předmětu do kterého budou zpracovávat projekt, zadání projektů v předmetu Algoritmy I a rozdělení zadání projektů mezi studenty zpracovávající projekt v předmětu Algoritmy. Obdobné informace k projektům zveřejní i tutor předmětu Programování I. Projekt se odevzdává jako řešení (solution) pro vývojové prostředí Visual Studio 2015 ve formě zip archivu. Způsob odevzdání bude upřesněn. Před odevzdáním projektu odstraňte z adresáře s Vaším projektem všechny spustitelné soubory (exe, bat). Striktní deadline pro odevzdání projektu je 11. prosince 2016 23:59. Obhajoba proběhne v zápočtovém týdnu. Termíny budou vypsány v systému Edison. K obhajobě projektu není opravný termín. Zásadním kritériem pro úspěšnou obhajobu je funkční program. Jiří Dvorský (VŠB TUO) Úvodní přednáška 41 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 42 / 358 Hodnocení úkolů Obecné poznámky k úkolům Je nutné splnit všechny výše uvedené úkoly, a zároveň u všech úkolů aspoň minimální počet bodů. Minimální počet bodů Maximální počet bodů První test 10 20 Druhý test 10 20 Třetí test 10 20 Projekt 21 40 Celkem 51 100 Všechna bodová hodnocení jsou průběžně zapisována do systému Edison. U všech úkolů jste povinni se prokázat svou studentskou kartou nebo jiným oficiálním dokladem totožnosti. Bez prokázání totožnosti Vám nebude výsledek započítán. Každý prohřešek vůči studijnímu řádu u testů a písemné práce bude nekompromisně postihován. Jde především o opisování, plagiátorství, a záměnu studentů. Je zakázáno zadání testů, písemek atd. kopírovat, fotit mobily, fotoaparáty, skenovat či jakkoliv jinak kopírovat, rozmnožovat, přenášet elektronickým způsobem a podobně. Předmět je ukončen klasifikovaným zápočtem. Nevztahuje se tudíž na něj požadavek dvou opravných pokusů, jak to vyžaduje studijní řád u zkoušky. Žádné další pokusy nejsou možné, například dvě opravy jednoho testu. Jiří Dvorský (VŠB TUO) Úvodní přednáška 43 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 44 / 358

Pokyny k prvnímu, druhému a třetímu testu Pokyny k prvnímu, druhému a třetímu testu (pokrač.) Na každý z těchto úkolů máte jeden řádný pokus a jeden opravný pokus. Na všechny tři úkoly budou v Edisonu vypsány řádné termíny, kde se budete hlásit. Na první test bude vypsán jeden řádný termín. Na druhý a třetí test bude v jeden den vypsáno několik řádných termínů (kapacita počítačových učeben je menší, test musí běžet na několik kol ). Absolvování prvního, druhého a třetího testu v řádném termín tj. na příslušném tutoriálu je povinné. Pokud se řádného termínu testu nezúčastníte, bez ohledu na to zda jste byli přihlášeni nebo ne, je vaší povinností se garantovi předmětu předem omluvit. Termín předem znamená nejpozději do začátku termínu, na kterém máte daný test psát. Postačující je omluva emailem na adresu garanta předmětu. Pokud se neomluvíte, daný úkol bude považován za nesplněný (0 bodů) a opravný termín vám nebude umožněn. Důsledkem je pak neúspěšné ukončení celého předmětu. Pokud se řádného termínu zúčastníte a neuspějete s řešením zadaného úkolu, máte nárok na opravný termín. Obdobná povinnost omluvit se platí i pro opravný termín. Opravné termíny budou vypsány ve zkouškovém období. Jiří Dvorský (VŠB TUO) Úvodní přednáška 45 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 46 / 358 Software pro výuku Konec části pro kombinovanou formu studia Primární software: Vývojové prostředí pro C++ Dokumentace k C++ Doplňkový software: Dokumentační systém Doxygen, www.doxygen.org Typografický systém L A TEX, www.cstug.cz Jiří Dvorský (VŠB TUO) Úvodní přednáška 47 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 48 / 358

Vývojová prostředí pro C++ Vývojová prostředí pro C++ Microsoft Visual Studio 2013 (VS2013): pro výukové účely zcela legálně a zadarmo, image instalačních disků lze stáhnout z Microsoft DreamSpark for Academic Institutions, elms.cs.vsb.cz instalace včetně dokumentace Microsoft Developer Network, msdn.microsoft.com, bezplatně ke stažení jazyková sada pro češtinu. alternativou jsou tzv. Express Edition, ke stažení přímo od Microsoftu. Microsoft Visual Studio 2015 (VS2015): pro výukové účely zcela legálně a zadarmo, image instalačních disků lze stáhnout z Microsoft DreamSpark for Academic Institutions, elms.cs.vsb.cz instalace včetně dokumentace Microsoft Developer Network, msdn.microsoft.com, alternativou je tzv. Community Edition, ke stažení přímo od Microsoftu. Jiří Dvorský (VŠB TUO) Úvodní přednáška 49 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 50 / 358 Vývojová prostředí pro C++ Studijní literatura Lze pracovat v obou vývojových prostředích. Ovládání obou prostředí je téměř totožné. Rozdíly mezi překladačem jazyka C++ ve VS2013 a VS2015 jsou z pohledu předmětu Algoritmy I a Algoritmy II zanedbatelné. VS2015 je v současné době instalováno na počítačových učebnách katedry. Vývojové prostředí VS2015 spolu s integrovaným překladačem jazyka C++ bude užíváno jednak pro výuku a jednak jako referenční překladač při hodnocení Vašich případných projektů, úkolů a jiných zdrojových kódů, které budete odevzdávat. Pochopitelně stačí mít instalováno jen jedno z obou vývojových prostředí. Učební materiály lze rozdělit do dvou skupin: literatura o programovacím jazyku C++, literatura o algoritmech a datových strukturách. Níže uvedenou literaturu využijete v předmětech: Algoritmy I a Algoritmy II, Programování I a Programování II. Jiří Dvorský (VŠB TUO) Úvodní přednáška 51 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 52 / 358

Základní literatura o C++ O jazyce C++, který je naším hlavním tématem, existuje v dnešní době řada česky psaných knih. Následující knihy můžete využít pro své studium: 1. Liberty J., Jones B. L.: Naučte se C++ za 21 dní, 2. aktualizované vydání, ComputerPress, 2007, ISBN 978-80-251-1583-1. Zdařilá učebnice jazyka C++. Kniha je sice poněkud tlustá, nicméně je rozdělena do 21 lekcí rozumného rozsahu. Pokrývá veškerou látku, kterou bychom měli za oba semestry probrat. 2. Eckel B.: Myslíme v jazyku C++, Grada Publishing, 2000, ISBN 80-247-9009-2. Kniha od klasika ve výuce jazyka C++. Opět pokrývá veškerou látku, kterou bychom měli za oba semestry probrat.. Kniha je dostupná v angličtině i online na serveru http://www.mindviewinc.com/index.php 3. Stroustrup, B.: C++ Programovací jazyk. Česky: BEN-technická literatura, Praha 1997. Vynikající kniha přímo od autora jazyka C++. Kniha dosti rozsáhlá, ale na druhou stranu obsahující naprosto vše co lze o C++ napsat. Jiří Dvorský (VŠB TUO) Úvodní přednáška 53 / 358 Doplňková literatura o C++ Dále je možné čerpat zajímavé informace z následujících knih: 1. Virius M.: Pasti a propasti jazyka C++, 2. aktualizované a rozšířené vydání, ComputerPress, 2005, ISBN 80-251-0509-1. V této knize naleznete podrobné vysvětlení, pro začátečníka mnohdy překvapivého chování překladače jazyka C++. 2. Alexandrescu A.: Moderní programování v C++ Šablony, generické komponenty a návrhové vzory, ComputerPress 2004, ISBN 80-251-0370-6. Pro ty z Vás, kteří se hodlají dozvědět něco o trendech ve využití jazyka C++, nabízí tato kniha rozšiřující informace. Pozor, nejedná se přímo o učebnici jazyka C++. 3. Koenig A., Moo B.E.: Rozumíme C++, ComputerPress, 2003, ISBN 80-7226-656-X. Alternativní učebnice jazyka C++ s odlišnou metodou výkladu než předchozí doporučené. Výuka je vedena přes využití knihoven jazyka C++, okamžitý nástup objektového programování atd. Jiří Dvorský (VŠB TUO) Úvodní přednáška 54 / 358 Ostatní literatura o C++ 1. Šaloun, P.: Programovací jazyk C++ pro zelenáče, Neocortex Praha, 2005, ISBN 80-86330-18-4. 2. Richta, K., Šaloun, P.: Programovací jazyk C, skriptum ČVUT, Praha 1998 3. Šaloun, P.: Programovací jazyk C. Skriptum FEI VŠB-TU Ostrava 1994 4. Kernighan, B., Ritchie, D.: Programovací jazyk C, Alfa Bratislava, 1988 5. Herout, P., Rudolf, V., Šmrha, P.: ABC programátora v jazyce C, nakladatelství KOPP, České Budějovice, 1992 6. Vondrák, I., Šaloun, P.: Objektově orientované programování, skriptum VŠB Ostrava, 1994 7. Horstmann, C. S.: Vyšší škola objektového návrhu v C++. Science, Veletiny 1997 8. Večerka, A.: Jazyk C++: popis jazyka s příklady, skriptum UP Olomouc, Olomouc 1996, ISBN 80-7067-658-2 Jiří Dvorský (VŠB TUO) Úvodní přednáška 55 / 358 Základní literatura o algoritmech 1. Skripta Algoritmy 2. Wirth, N.: Algoritmy a štruktúry údajov, Alfa, Bratislava, 1989 3. Sedgewick R.: Algoritmy v C, části 1-4, SoftPress, Praha, 2003. Existuje i v anglické verzi, náročná, ale vynikající kniha. 4. Wróblewski P.: Algoritmy. Datové struktury a programovací techniky, Computer Press, Praha 2003, druhé vydání 2015 Jiří Dvorský (VŠB TUO) Úvodní přednáška 56 / 358

Doplňková literatura o algoritmech Ostatní učební materiály 1. Topfer, P.: Algoritmy a programovací techniky, Prometheus, Praha 1995. 2. Virius, M.: Základy algoritmizace, ČVUT Praha, 1997, skripta. 3. Honzík, J. a kolektiv: Programovací techniky, VUT Brno, 1987, skripta. 4. Harel, D.: Algorithmics, The Spirits of Computing, Addison-Wesley Publishing Company, 1993. 5. Cormen, Leiserson, Rievest: Introduction to Algorithms, MIT Press, 2001. 6. Sedgewick, R.: Algorithms in C++, Addison-Wesley Publishing Company, 1992. 7. Wood, D.: Data Structures, Algorithms and Performance, Addison-Wesley Publishing Company, 1993. Prezentace z přednášek Prezentace z přednášek nejsou studijním materiálem. Slouží přednášejícímu jako osnova jeho výkladu a studentům jako přehled probrané látky. Pročtení těchto několika prezentací není možné považovat za dostatečnou přípravu k tomu slouží studijní literatura a hlavně vlastní, samostatné programování. Další materiály budou případně doplněny na webových stránkách předmětu. Jiří Dvorský (VŠB TUO) Úvodní přednáška 57 / 358 Jiří Dvorský (VŠB TUO) Úvodní přednáška 58 / 358 Pojem algoritmus Děkuji za pozornost doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Jiří Dvorský (VŠB TUO) Úvodní přednáška 59 / 358 Jiří Dvorský (VŠB TUO) Pojem algoritmus 60 / 358

Algoritmický problém Algoritmický problém vstup, výstup, vstupní a výstupní podmínka Algoritmus pravidla definující postup jak vstupní data transformovat na výstupní Algoritmus můžeme chápat také jako konečnou posloupnost instrukcí, které po konečném počtu kroků vydá požadovaný výstup K našim účelům bude stačit tato intuitivní definice algoritmu Algoritmus Algoritmus Název algoritmus pochází ze začátku devátého století z Arábie. V letech 800 až 825 napsal arabský matematik Muhammad ibn Músá al Chwárizmí dvě knihy, z nichž jedna se v latinském překladu jmenovala Algoritmi dicit, česky Tak praví al Chwárizmí. Byla to kniha postupů pro počítání s čísly. Těmto postupům my dnes říkáme písemné sčítání, písemné násobení atd. Poznámky Sestavit správný algoritmus řešení problému nemusí být vždy snadnou činností. Logická chyba v algoritmu může vést k nesprávným výsledkům. Pro řešení jedné a té samé úlohy může existovat více různých algoritmů, tyto algoritmy se můžou lišit v množství spotřebovaného času a paměťového prostoru. Jiří Dvorský (VŠB TUO) Pojem algoritmus 61 / 358 Jiří Dvorský (VŠB TUO) Pojem algoritmus 62 / 358 Algoritmus Algoritmu můžeme rozumět jako předpisu pro řešení nějakého problému. Jako příklad vezměme třídění množiny celých čísel. Pokud rozebereme řešení takové úlohy do důsledku, musí obsahovat tři věci: 1. hodnoty vstupních dat (množina celých čísel), 2. předpis pro řešení, 3. požadovaný výsledek, tj. výstupní data (setříděná čísla). Konstruktivní řešení problémů Všimněte si, že řešení problému je pomocí algoritmu konstruováno ze vstupních dat! Stejný postup používá například geometrie. Jiří Dvorský (VŠB TUO) Pojem algoritmus 63 / 358 Nekonstruktivní řešení problému aneb Na tohle není algoritmus! Příklad Naším úkolem je najít dvě iracionální čísla x a y taková aby platilo, že x y je číslo racionální. Řešení Zvolíme x = 2 a y = 2. Je-li x y číslo racionální jsme hotovi, není-li x y číslo racionální, zvolíme například x = 2 2 a y = 2. Potom dostaneme x y = ( ) 2 2 ( ) 2 2 ( ) 2 2 = 2 = 2 = 2 Je zřejmé, že řešením je buď dvojice čísel x = 2 a y = 2 nebo dvojice čísel x = 2 2 a y = 2, přičemž nejsme z uvedeného řešení schopni říci která dvojice je vlastně řešením našeho problému. Jiří Dvorský (VŠB TUO) Pojem algoritmus 64 / 358

Nekonstruktivní řešení problému aneb Na tohle není algoritmus! V čem spočívá problém? 1. není jasné zda je 2 2 číslo iracionální nebo ne, 2. není jasné jak volit kandidáty na řešení iracionální čísla jsou nespočetná. Spočetnost množiny čísel O množině řekneme, že je spočetná pokud ji lze zobrazit na množinu přirozených čísel. Přirozená čísla lze probírat, vyjmenovat, jedno po druhém. Stejně to lze provést s čísly celými a racionálními (zlomky). Nelze to provést s čísly iracionálními, reálnými a komplexními. Po 1 následuje nutně 2, po 2, 5 následuje co? 2, 51 nebo 2, 501 nebo 2, 5001? Jaké číslo následuje po 2? Jiří Dvorský (VŠB TUO) Pojem algoritmus 65 / 358 Algoritmus Algoritmus je předpis, který se skládá z kroků a který zabezpečí, že na základě vstupních dat jsou poskytnuta požadovaná data výstupní. Navíc každý algoritmus musí mít následující vlastnosti: konečnost, hromadnost, jednoznačnost, opakovatelnost, rezultativnost, elementárnost. Jiří Dvorský (VŠB TUO) Pojem algoritmus 66 / 358 Algoritmus vlastnosti Algoritmus vlastnosti Konečnost Požadovaný výsledek musí být poskytnut v rozumném čase (pokud by výpočet trval na nejrychlejším počítači např. jeden milion let, těžko bychom mohli hovořit o algoritmu řešení, nemluvě o výpočtu, který by neskončil vůbec). Za rozumný lze považovat čas, kdy nám výsledek výpočtu k něčemu bude. Hromadnost Vstupní data nejsou v popisu algoritmu reprezentována konkrétními hodnotami, ale spíše množinami, ze kterých lze data vybrat (např. při třídění přirozených čísel bude vstup konečnou podmnožinou množiny všech přirozených čísel). Při popisu algoritmu v programovacím jazyce se to projeví tím, že vstupy do algoritmu jsou označeny symbolickými jmény. Jiří Dvorský (VŠB TUO) Pojem algoritmus 67 / 358 Jiří Dvorský (VŠB TUO) Pojem algoritmus 68 / 358

Algoritmus vlastnosti Algoritmus vlastnosti Jednoznačnost Každý předpis je složen z kroků, které na sebe navazují. Každý krok můžeme charakterizovat jako přechod z jednoho stavu algoritmu do jiného, přičemž každý stav je určen zpracovávanými daty. Tím, jak data v jednotlivých stavech algoritmu vypadají, musí být jednoznačně určeno, který krok následuje (např: V řešení trojúhelníka může nastat situace, kdy vychází na základě vstupních dat jedno nebo dvě řešení. Situace je tedy nejednoznačná, řešení musí být jednoznačné, tzn. v předpisu se s touto možností musí počítat a musí v něm být návod, jak ji řešit.). Opakovatelnost Při použití stejných vstupních údajů musí algoritmus dospět vždy k témuž výsledku. Rezultativnost Algoritmus vede ke správnému výsledku. Elementárnost Algoritmus se skládá z konečného počtu jednoduchých (elementárních) kroků. Jiří Dvorský (VŠB TUO) Pojem algoritmus 69 / 358 Jiří Dvorský (VŠB TUO) Pojem algoritmus 70 / 358 Algoritmus formálnější přístup Algoritmus formálnější přístup Turingův stroj teoretický model počítače popsaný matematikem Alanem Turingem, procesorová jednotka, tvořená konečným automatem, program ve tvaru pravidel přechodové funkce, a pravostranně nekonečné pásky pro zápis mezivýsledků. cs.wikipedia.org/wiki/turingův_stroj Church-Turingova teze Ke každému algoritmu existuje ekvivalentní Turingův stroj. Kvůli neformální definici pojmu algoritmus nemůže být tato teze nikdy dokázána. Lze ji ale vyvrátit, podaří-li se sestrojit algoritmus, který bude umět řešit problémy, které Turingův stroj řešit neumí. Jelikož každý počítačový program lze přeložit do jazyka Turingova stroje a obvykle i naopak, lze tezi ekvivalentně formulovat pro kterýkoli běžně používaný programovací jazyk. Jiří Dvorský (VŠB TUO) Pojem algoritmus 71 / 358 Jiří Dvorský (VŠB TUO) Pojem algoritmus 72 / 358

Algoritmus formálnější přístup Shrnutí Přesněji, programovací jazyk potřebuje jednu z následujících konstrukcí, aby byl s Turingovým strojem ekvivalentní: while-cyklus nebo neomezenou (alespoň teoreticky) rekurzi nebo podmíněný skok. Běžné programovací jazyky mívají všechny tři tyto konstrukce. Mezi jazyky, které nejsou ekvivalentní s Turingovým strojem patří například jazyk SQL (myšleno bez vložených procedur). Algoritmický problém Algoritmus konečnost, hromadnost, jednoznačnost, opakovatelnost, rezultativnost, elementárnost. Turingův stroj Church-Turingova teze Jiří Dvorský (VŠB TUO) Pojem algoritmus 73 / 358 Jiří Dvorský (VŠB TUO) Pojem algoritmus 74 / 358 Základy C++ Děkuji za pozornost doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Jiří Dvorský (VŠB TUO) Pojem algoritmus 75 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 76 / 358

Co je to počítač? Z čeho se skládá počítač Počítač Počítač můžeme definovat jako zařízení schopné provádět výpočty a rozhodnutí založená na logice. Hardware (HW) technická část počítače, různá zařízení z nichž je počítač sestaven, např. klávesnice, monitor, pevný disk, paměť, procesor, sběrnice... Software (SW) programové vybavení počítače, oživuje hardware, mnoho úrovní software: ovladače zařízení, jádro operačního systému, moduly operačního systému (správa uživatelů, správa disků atd.), grafické uživatelské rozhraní, uživatelské aplikace. Jiří Dvorský (VŠB TUO) Základy C++ 77 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 78 / 358 Základní struktura počítače Základní struktura počítače Konceptuální schéma počítače vstup, výstup, paměť, řadič a aritmeticko logická jednotka (ALU). Poznámky O takto koncipovaném počítačí říkáme, že má von Neumannovskou architekturu. Řadič a ALU tvoří dohromady to, čemu se běžně říká procesor. Jiří Dvorský (VŠB TUO) Základy C++ 79 / 358 Vstup Výstup zařízení pomocí kterého se dostávají informace do počítače, klávesnice, myš, scanner, počítačová síť... předává informace z počítače jeho periferiím výsledky výpočtů a řídící informace. Jiří Dvorský (VŠB TUO) Základy C++ 80 / 358

Základní struktura počítače Základní struktura počítače Paměť Paměť můžeme rozdělit na paměť primární a sekundární. Primární paměť vnitřní paměť počítače, Random Access Memory (RAM), velice rychlá, relativně malá kapacita, obsahuje zpracovávané programy, jejich data, data ze vstupu, data čekající na výstup. Sekundární paměť vnější paměti počítače, relativně pomalé, velká kapacita, obsahuje všechny programy počítače, data pro tyto programy. Aritmeticko logická jednotka, ALU centrální výkonná část počítače, provádí veškeré výpočty, logické operace atd. Charles Babbage nazýval ALU slovem mlýnice Řadič řídící část počítače, řídí a koordinuje ostatní části počítače. Jiří Dvorský (VŠB TUO) Základy C++ 81 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 82 / 358 Program versus proces Operační systém (OS) Program posloupnost instrukcí které řídí počítač při zpracování dat, statický. Proces program, který je v daném okamžiku již vykonáván počítačem, dynamický první počítače OS postrádaly, procesy si zajišťovaly vše samy, snaha usnadnit a sjednotit práci s počítačem, periferiemi, poskytnout podporu pro běžně prováděné činnosti čtení dat ze vstupu, tisk na tiskárně atd., zvýšit výkon počítače, jednoúlohový vs. víceúlohový OS, jednouživatelský vs. víceuživatelský OS, dnešní OS: UNIX/Linux, Windows, Mac OS X Mountain Lion atd., Pozor! Grafické uživatelské rozhraní (GUI), které vidíte na obrazovce je jen špičkou ledovce. OS je rozsáhlá infrasturktura skrytá za tímto rozhranním. Jiří Dvorský (VŠB TUO) Základy C++ 83 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 84 / 358

Osobní počítače Programovací jazyk v průběhu 70. let 20. století používá Apple pro své počítače označení osobní, v roce 1981 uvedlo IBM osobní počítač, PC s procesorem Intel 8088, IBM zvolilo cestu otevřeného standardu, podíleli se různí výrobci HW a SW. typicky procesory Intel či AMD, operační systém zprvu DOS, následně Windows a Linux. prostředek pro zápis algoritmů ve formě použitelné na počítači, jde formální jazyk formálně tj. matematicky popsaná syntaxe a sémantika jazyka, jinak řečeno jde o jazyk, který má svou gramatiku, slova, věty, věty mají svůj význam... program zápis algoritmu ve zvoleném programovacím jazyce, programovací jazyky lze členit dle mnoha hledisek. Jiří Dvorský (VŠB TUO) Základy C++ 85 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 86 / 358 Programovací jazyky Nižší programovací jazyky jazyk plně přizpůsobený počítači, jazyk symbolických adres, strojový kód, částečně VHDL. Vyšší programovací jazyky jazyk lépe pochopitelnější pro člověka, vyšší míra abstrakce, syntaxe podobná primitivní angličtině, užití např. běžných značek pro matematické operace, jednomu příkazu ve vyšším jazyce odpovídá obecně mnoho instrukcí ve strojovém jazyce, většina současně používaných jazyků. Programovací jazyky způsob překladu a spuštění Kompilované programovací jazyky program je nejprve kompletně přeložen překladačem do strojového kódu počítače, teprve po bezchybném překladu je možné přeložený tvar programu spustit, výhody: výsledný spustitelný tvar programu může být přesně optimalizován na konkrétní HW a OS, větší rychlost běhu takového programu, lepší využití prostředků HW. nevýhody: závislost na konkrétním HW a OS, pro každý HW a OS nutno zvlášť přeložit, menší pružnost při odstraňování chyb v programech, nelze snadno měnit kód programu za jeho běhu. typické překládané jazyky C, C++, Pascal (Delphi), Fortran. Jiří Dvorský (VŠB TUO) Základy C++ 87 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 88 / 358

Programovací jazyky způsob překladu a spuštění Kompilované programovací jazyky poznámka překladač se někdy označuje jako kompilátor (compiler) a překlad jako kompilování (to compile), překladač je program, který překládá program z jednoho jazyka do jiného jazyka, typicky například z C++ do strojového kódu procesoru, překladače nemusí překládat jen programy, například tato prezentace je napsána v jazyku L A TEX a překladem textu v tomto počítačovém jazyce získáme PDF dokument, který právě čtete. Programovací jazyky způsob překladu a spuštění Interpretované programovací jazyky speciální prostředí pro běh programu, toto prostředí čte zdrojový kód programu a jakmile načte celý příkaz, okamžitě jej vykoná a pokračuje na další příkaz, výhody: nezávislost programů na HW a OS, závislý je pouze interpret, dynamičtější manipulace s programem, např. za běhu programu lze opravovat zdrojový kód, protože tento kód je interpretem opakovaně načítán. nevýhody: obtížná optimalizace pro daný HW a OS, horší využití prostředků HW a OS (na počítači musí běžet i interpret). typický interpretovaný jazyk je BASIC ve své klasické podobě, například na starých 8-bitových počítačích pozor jazyk Visual Basic.NET nebo Java jsou uspořádány jinak! Jiří Dvorský (VŠB TUO) Základy C++ 89 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 90 / 358 Programovací jazyky způsob překladu a spuštění Interpretované programovací jazyky členění na kompilované a interpretované není absolutní, tyto přístupy lze kombinovat, jazyk Java a jeho Java Virtual Machine (JVM): JVM představuje virtuální procesor se svým specifickým strojovým jazykem, zdrojový kód v jazyku Java je kompilován do strojového kódu JVM (výsledkem jsou class a jar soubory), při spuštění JVM začne jednotlivé instrukce uložené např. v jar souboru interpretovat. obdobně se chová i Visual Basic.NET či Python, Just in Time (JIT) kompilace: zdrojový kód programu je teprve při spuštění kompilován do strojového kódu počítače a okamžitě spuštěn, přeložený tvar programu se nikde neukládá, program je vždy kompilován znovu. Nižší programovací jazyky Strojový kód jediný jazyk, kterému počítač (procesor) rozumí, sekvence 0 a 1, strojově závislý, pro člověka nestravitelný. Příklad 0010 1101 1101 1000 1001 1000 0001 0010 0010 0000 Jiří Dvorský (VŠB TUO) Základy C++ 91 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 92 / 358

Nižší programovací jazyky Vyšší programovací jazyky Jazyk symbolických adres nesprávně česky nazýván assembler, assembler překladač do strojového kódu, assembly language, anglické zkratky názvů instrukcí, pro člověka stravitelnější, Příklad MOV reg0, Vyska MOV reg1, Sirka MUL reg0, reg1 MOV reg0, Plocha Procedurální (imperativní) Strukturované, např. C, BASIC, Objektově orientované, např. Smalltalk, Java. Neprocedurální (deklarativní) Funkcionální, např. Lisp, Haskell, Logické, např. Prolog. Jiří Dvorský (VŠB TUO) Základy C++ 93 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 94 / 358 Příklady vyšších programovacích jazyků Co je C++? Příklad FORTRAN (FORmula TRANslation) první vyšší jazyk z roku 1957, vývoj trval tři roky, dodnes používán pro numerické výpočty, COBOL (COmmon Business-Oriented Language) 1959, jazyk pro hromadné zpracování dat, Pascal 1970, strukturované programování, výuka programování. Basic (Beginner s All-purpose Symbolic Instruction Code) 1963, nyní převážně MS Visual Basic Plocha = Vyska * Sirka C++ je: vyšší programovací jazyk, určen pro všeobecné použití, určen pro profesionální programátory, zachovává zpětnou kompatibilitu s jazykem C. C++ je jazyk typicky překládaný do strojového kódu. C++ dnes V dnešní době plní jazyk C++ úlohu moderního assembleru. Jiří Dvorský (VŠB TUO) Základy C++ 95 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 96 / 358

Historie jazyka C Jazyk C++ autor Dennis Ritchie, Bell Laboratories, v letech 1968 až 1973, vychází z jazyků BCPL a B, silná vazba na OS UNIX, jádro OS UNIX práno v C, Brian Kernighan a Dennis Ritchie vydávají v roce 1978 knihu The C Programming Language, jazyk označováno jako K & R C 1989 ANSI standard 1990 ANSI a ISO norma ANSI/ISO 9899: 1990 2000 C99, ISO 9899:1999 1979 Bjarne Stroustrup (Bell Laboratories) vyvíjí jazyk C with classes 1983 název změněn na C++ 1985 vychází kniha The C++ Programming Language, zatím se nejedná o standard, 1998 norma ISO/IEC 14882:1998 2011 norma ISO/IEC 14882:2011, 12. srpna 2011, rozšíření jazyka C o OOP, plus další úpravy, jazyk není čistě objektový. Jiří Dvorský (VŠB TUO) Základy C++ 97 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 98 / 358 Vznik spustitelného programu základní pojmy První program zdrojový kód napsán programátorem, textový soubor obsahující konstrukce C++ o kterých programátor doufá, že budou vykonávat to co požaduje. hlavičkový soubor deklarace funkcí, tříd, konstant atd. Buď napsán programátorem nebo dodán s překladačem. projekt soubor popisující, ze kterých zdrojových kódů a knihoven vznikne výsledný program. kód s relativními adresami anglicky object file, zdrojové kódy jsou přeloženy do instrukcí procesoru, ale nejsou dořešeny všechny vazby. spustitelný kód soubor s binárním zápisem instrukcí, přímo vykonavatelný procesorem. Hello World #include <iostream> using namespace std; // This is single line comment. void main() cout << "Hello World" << endl; Čeština ve zdrojovém kódu Nedoporučuji psát do C++ cokoliv česky s diakritikou, ani komentáře. Jiří Dvorský (VŠB TUO) Základy C++ 99 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 100 / 358

Vznik spustitelného programu Vznik spustitelného programu Vznik spustitelného programu ze zdrojového kódu prochází těmito fázemi: 1. Edit editace zdrojového kódu, 2. Preprocess rozvinutí maker, vložení hlavičkových souborů, 3. Compile vlastní překlad, výsledkem je modul s relativními adresami nebo alternativně program v assembleru, 4. Link sestavení výsledného programu, vstupem jsou moduly s relativními adresami, plus knihovny; výsledkem spustitelný program, 5. Load OS zavede spustitelný kód do primární paměti, 6. Execute vlastní vykonávání programu. Ke vzniku spustitelného programu se využívají následující programy: 1. Edit textový editor, 2. Preprocess preprocesor, 3. Compile překladač, kompilátor, 4. Link linker (sestavovač, spojovač?), 5. Load operační systém, 6. Execute operační systém. Jiří Dvorský (VŠB TUO) Základy C++ 101 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 102 / 358 Ladění Základní stavební bloky C++ Proces odstraňování chyb v programu se nazývá ladění. K ladění slouží program zvaný Debugger umožňuje sledovat vykonávání programu, vypisovat hodnoty proměnných, zobrazuje zásobník volání funkcí, umožňuje nastavovat tzv. breakpointy, tj. místa, kde se má přerušit vykonávání programu krokování programu po jednom příkazu. Data údaje, které bude program zpracovávat, Kód instrukce programu prostřednictvím jsou zapisovány algoritmy, Komentáře pomocné informace pro programátora umístěné ve zdrojovém kódu. Jiří Dvorský (VŠB TUO) Základy C++ 103 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 104 / 358

Datové typy v C++ Datové typy v C++ Datový typ definuje dvě vlastnosti: rozsah povolených dat, čili jaké hodnoty jsou povolené a jaké ne, povolené operace, čili co s těmi hodnotami lze provádět. Berte je vážně Datové typy jsou jedním z prostředků pro psaní kvalitních programů. Datový typy v C++ dělíme na: základní celočíselné s plovoucí řádovou čárkou logické adresní ukazatelé reference strukturované pole struktura třída Jiří Dvorský (VŠB TUO) Základy C++ 105 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 106 / 358 Celočíselné datové typy v C++ char jeden byte short větší nebo roven char int větší nebo roven short long větší nebo roven int long long větší nebo roven long Všechny typy jsou automaticky se znaménkem, neznaménková verze se uvádí klíčovým slovem unsigned, např. unsigned int. Rozsahy celočíselných datových typů ve VS 2010 Typ Bajty Rozsah hodnot char 1 128... 127 short 2 32 768... 32 767 int 4 2 147 483 648... 2 147 483 647 long 4 2 147 483 648... 2 147 483 647 long long 8 9223372036854775808... 9223372036854775807 Celočíselné datové typy v C++ Číselné soustavy v C++: desítková základ soustavy je číslo 10, číslice 0 až 9, např. 158 osmičková základ soustavy je číslo 8, číslice 0 až 7, např. 0236 šesnáctková základ soustavy je číslo 16, číslice 0 až 9, písmena A až F, kde A je deset, B jedenáct atd., např. 0x9E Nejběžnější se pochopitelně desítková soustava. Binární soustava se nepoužívá ve zdrojovém kódu přímo nepoužívá (dlouhý zápis čísel). Osmičková soustava je spíše historický přežitek. Šestnáctková soustava se používá pro manipulaci s bity vždy 4 bity na jednu šestnáctkovou číslici. Šestnáctková soustava se také často nazývá jako hexadecimální soustava. Jiří Dvorský (VŠB TUO) Základy C++ 107 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 108 / 358

Číselné soustavy příklad Datové typy s plovoucí řádovou čárkou v C++ Číslo 158 můžeme vyjádřit v jednotlivých číselných soustavách takto: binárně 10011110 2 = 1 2 7 +0 2 6 +0 2 5 +1 2 4 +1 2 3 +1 2 2 +1 2 1 +0 2 0 osmičkově 236 8 = 2 8 2 + 3 8 1 + 6 8 0 desítkově 158 10 = 1 10 2 + 5 10 1 + 8 10 0 hexadecimálně 9E 16 = 9 16 1 + 14 16 0 Datový typ Počet bajtů Rozsah hodnot Platné číslice float 4 ±3, 4 10 ±38 7 double 8 ±1, 7 10 ±308 15 long double ve Visual Studio 2013 shodné s double Reálná čísla vs. čísla s plovoucí řádovou čárkou Čísla s plovoucí řádovou čárkou nejsou totožná s reálnými čísly z matematiky problém s periodickými čísly, iracionálními čísly! Jiří Dvorský (VŠB TUO) Základy C++ 109 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 110 / 358 Logický datový typ v C++ Logický datový typ v C++ jazyk C++ zavádí pro logické hodnoty datový typ bool, konstanty true pravda a false nepravda, platí že true false, neexistuje žádná souvislost mezi bool a int! Logické hodnoty v ANSI C Jazyk ANSI C používá pro uložení logických hodnot typ int včetně svérázné definice hodnot true a false. V jazyce C++ důrazně doporučuji nepoužívat tento zastaralý přístup a doporučuji používat typ bool. Platné vztahy true false true = false false = true Jiří Dvorský (VŠB TUO) Základy C++ 111 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 112 / 358

Proměné Data v programu jsou reprezentována pomocí proměnných. Proměnná identifikátor, datový typ, hodnota. Jiří Dvorský (VŠB TUO) Základy C++ 113 / 358 Identifikátor obecný název pro pojmenování čehokoliv v programu co lze pojmenovat, konečná neprázdná posloupnost písmen, číslic, znaků podtržítko, která nesmí začínat číslicí, rozlišují se malá a velká písmena. délka identifikátoru není teoreticky omezena Příklad a A a1 ab _a _a1 a_b VeryLongIdentifier Jak správně volit identifikátory? Buď česky nebo anglicky, ne mixovat! NextMove nebo DalsiTah ne NextTah. Raději anglicky. Identifikátor musí popisovat co obsahuje! NumberOfStudents nebo PocetStudentu ne A28. Jiří Dvorský (VŠB TUO) Základy C++ 114 / 358 Nikdy není hotovo, dopsat další slajdy... Děkuji za pozornost Jiří Dvorský (VŠB TUO) Základy C++ 115 / 358 Jiří Dvorský (VŠB TUO) Základy C++ 116 / 358