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

Podobné dokumenty
Co vás čeká. Osvojení si základy analytického myšlení při psaní algoritmů pomocí jazyka Python.

Část 1 Organizace předmětu. Základní pojmy. Část 2 Programování a výpočty. Část 3 Programovací jazyk Java

Základní pojmy. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 1 A0B36PR1 Programování 1

Základní pojmy. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 1 A0B36PR1 Programování 1

11. Přehled prog. jazyků

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

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

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

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

Matematika v programovacích

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

Úvod. Programovací paradigmata

Algoritmizace. Cíle předmětu

IB111 Programování a algoritmizace. Programovací jazyky

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:

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

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

Překladač a jeho struktura

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

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

10. Složitost a výkon

Programování II. Modularita 2017/18

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

Programování. Úvod a základní principy. Martin Urza

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

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

Programování a algoritmizace: úvod

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

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Program a životní cyklus programu

Programovací jazyky Přehled a vývoj

Algoritmy a algoritmizace

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

ALGORITMIZACE A PROGRAMOVÁNÍ

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

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

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

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

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

Hodnoticí standard. Programátor (kód: M) Odborná způsobilost. Platnost standardu. Skupina oborů: Informatické obory (kód: 18)

VISUAL BASIC. Přehled témat

Vstupní požadavky, doporučení a metodické pokyny

Algoritmizace. 1. Úvod. Algoritmus

C# konzole Podíl dvou čísel, podmínka IF

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

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

ANOTACE vytvořených/inovovaných materiálů

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

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

Úvod do programovacího jazyka Python

Rekurentní rovnice, strukturální indukce

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

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

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

Martin Hejtmánek hejtmmar

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

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

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

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

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

Algoritmizace a programování

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

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

Základy algoritmizace a programování

Základy algoritmizace

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

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

10. Techniky formální verifikace a validace

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

6 Příkazy řízení toku

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

Konečný automat. Jan Kybic.

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

VISUAL BASIC. Práce se soubory

Programování a algoritmizace: úvod

Část I. Část 1 Zápis programu v C. Přehled témat. Zápis programu v C a základní řídicí struktury. Program je recept

Zápis programu v C. Zápis programu v C Funkce Literály

Část I Organizace předmětu

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Část I Organizace předmětu

Procedurální programování

Stanislav Vítek. Katedra radioelektroniky Fakulta elektrotechnická

Práce v textovém editoru

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

Programovací jazyk Pascal

FORTANNS. 22. února 2010

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

Seminář z Informatiky a výpočetní techniky. Slovanské gymnázium Olomouc 4. září 2014 Tomáš Kühr

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

První kapitola úvod do problematiky

Binární vyhledávací stromy pokročilé partie

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

Princip funkce počítače

Vývoj programů. ÚVOD DO OPERAČNÍCH SYSTÉMŮ

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

Vývojové diagramy 1/7

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

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

Transkript:

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 1 Základy algoritmizace 1. Úvod 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 1 2 Základy algoritmizace O čem je předmět? Naučit se myslet algoritmicky Algoritmus řeší problém Naučit se ovládat počítač programovat v Pythonu (trochu) Program řídí počítač Získat přehled o základních algoritmech a práci s daty Jak funguje moje navigace? Source: http://www.marcinkossakowski.com/wp-content/uploads/2014/11/dijkstra-map.jpg

Základy algoritmizace Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 3 Algoritmus! program Source: http://www.qedcat.com/rubiks_cube/

Základy algoritmizace Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 4

Základy algoritmizace Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 5 Source: https://onedublin.files.wordpress.com/2010/01/scratch-computer-programming-example.jpg

Základy algoritmizace Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 6 Source: https://onedublin.files.wordpress.com/2010/01/scratch-computer-programming-example.jpg

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 7 Základy algoritmizace Zkuste si: code.org/learn

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 8 Základy algoritmizace Dnes Organizace předmětu Programování a výpočty Python

Organizace předmětu Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 9

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 10 Organizace předmětu Stránky předmětu https://cw.fel.cvut.cz/wiki/courses/b6b36zal/start Tutoriály http://www.tutorialspoint.com/python http://www.py.cz Literatura Cormen, Leiserson, Rivest and Stein: Introduction to Algorithms. MIT Press and McGraw-Hill.

Organizace předmětu Přednáška Nepovinná, ale doporučená Předpokládáme, že student ZNÁ látku z přednášky Cvičení Povinné (detaily na cvičení) 10 úloh za semestr Odevzdávání domácích úkolů Hodnocení 40 bodů úlohy ze cvičení (min. 10 bodů) 60 bodů zkouška A-F za 100 až 50 bodů http://cw.felk.cvut.cz/upload/ Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 11

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 12 Organizace předmětu Samostatná práce s cílem osvojit si praktické zkušenosti Odevzdání úloh = nahrání nezbytných souborů + ověření správnosti automatickými testy Úkoly jsou navrženy tak, aby se byly stihnutelné Průběžná práce je nejefektivnější Detekce plagiátů! Pokud něčemu nerozumíte, ptejte se! Pokud vám přijde úkolů málo, ptejte se po dalších úlohách na procvičování

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 13 Bodové hodnocení úloh Úloha Zaměření Max počet bodů Introduction Upload system introduction 0 Python in action Python introduction 1 Calculator Number and operations and inteligent 2 PI number Calculation PI number using cycles 3 Polynomials Using array to calculate and evaluate polynoms 4 Data sorting Sorting array and finding most/less important element Showroom Linked list in car showroom 7 BST Binary search tree 5 Permutations Permutation and recursion 5 Quickest path Dijkstra 8 5

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 14 Počítačové laboratoře Operační systém Linux Síťové domovské adresáře Přenos a synchronizace souborů USB media Síťové přenosy (ftp, ssh, atp.) Owncloud - https://owncloud.cesnet.cz/ Vlastní počítače V učebnách je k dispozici Eduroam

Programování a výpočty Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 15

Základní koncept programování Separating Programming Sheep from Non-Programming Goats http://blog.codinghorror.com/separating-programming-sheep-from-non-programming-goats/ Efektivní metody výuky programování se hledají již od dob prvních počítačů, tj. přes více než 50 let Presto se zdá, že je každý základní kurz programování obtížný a 30% až 60% studentů jej na poprvé nezvládne Základní koncept je pochopení principu přirazení hodnoty proměnné Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 16

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 17 Test pochopení principu přiřazení Zápis programu pro přirazení hodnot do proměnných a a b a následné přirazení proměnné b do a. Přirazení hodnoty proměnné Jaké jsou hodnoty proměnných a a b?

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 18 Skupiny počítačových uživatelů Uživatel Spouštěč programů Zadává vstup Čeká na výstup Čte výstup Píše, kliká Programátor Spouští programy Dává počítači příkazy Řadí je do posloupnosti Kombinuje příkazy Vytváří nové programy Relativně omezená množina vstupů Pouze to co je dovoleno Rozmanitější možnosti použití Omezen pouze limity počítače

Způsob reprezentace znalostí Z hlediska výpočtu můžeme rozlišit dva základní typy znalostí: Deklarativní Tvrzení popisuje stav Axiomatické Umožňuje jednoduše ověřovat (testovat) pravdivost tvrzení Neposkytuje návod jak vyčíslit hodnotu Příklad: Imperativní Popisuje jak něco vypočítat Způsob popisu problému Posloupnost výpočtu Test jak ovlivnit průběh výpočtu Příklad: 1. If y 2 x 2. Then return y 3. Else y y+x y 2 4. Go to Step 1 Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 19

Výpočetní prostředky (počítače) Jednoúčelové přístroje s předepsaným chováním program / posloupnost kroků (instrukcí) je vestavěná a neměnná Počítač s uloženým programem v paměti Posloupnost instrukcí čtena z paměti Flexibilita ve tvorbě posloupnosti Kalkulačka, pračka, první telefony Program lze libovolně měnit Architektura počítače se společnou pamětí pro data a program Von Neumannova architektura počítače John Louis von Neumann (1903 1957) Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 20

Von Neumannova architektura ALU Aritmeticko-logická jednotka (Arithmetic Logic Unit) Základní matematické a logické instrukce PC Čítač instrukcí (Program Counter) Ukazuje na místo v paměti s instrukcemi pro vykonání V drtivé většině případů je program posloupnost instrukcí zpracovávající jednu nebo dvě hodnoty (uložené v nějakém paměťovém místě) jako vstup a generování nějaké výstupní hodnoty, kterou ukládá někam do paměti nebo modifikuje hodnotu PC (podmíněné řízení běhu programu). Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 21

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 22 Assembler Jazyk symbolických adres Nízko-úrovňový (nad strojovým kódem) Source: http://www.cybercomputing.co.uk/languages/languages/low_level/assembly.html

Program a programovací jazyk Jiří Vokřínek, 2016 Source: B6B36ZAL http://codehackersblog.blogspot.com/2015/06/dont-call-yourself-programmer.html - Přednáška 1 23

Algoritmus Vstup algoritmus výstup Soubor program soubor Klávesnice program obrazovka GUI program GUI algoritmus algoritmus algoritmus Příklad algoritmu - vývojový diagram Source: https://cs.wikipedia.org/wiki/v%c3%bdvojov%c3%bd_diagram Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 24

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 25 Program je recept Program je posloupnost kroků (výpočtů) popisující průběh výpočtu pro řešení problému (je to recept na řešení problému) Pro zápis receptu potřebujeme jazyk Způsob zápisu programu Jazyk definuje základní sadu primitiv (operací/příkazu), které můžeme použít pro zápis receptu S konečnou množinou primitiv dobrý programátor naprogramuje cokoliv. Co muže být vyjádřeno Turing Machine obecný model počítacího stroje Alan Turing, 1936 V předmětu B6B36ZAL používáme programovací jazyk Python Programování není o znalosti konkrétního programovacího jazyka, je to o způsobu uvažování a řešení problému

Turing machine Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 26 Source: https://en.wikipedia.org/wiki/file:turing_machine_1.jpg

Turing machine Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 27 Source: https://onetimecode.wordpress.com/2015/03/22/the-imitation-game-alan-turing-defeat-enigma-machine-in-world-war-ii/

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 28 Programovací jazyk Existuje množství programovacích jazyků Nelze říci, že jeden jazyk je lepší než druhý V podstatě jsou všechny ekvivalentní Můžeme, ale říci, že některé jazyky se hodí na konkrétní úlohy Základní dělení: Vysoko-úrovňové a nízko-úrovňové Liší se mohutností množiny primitiv Obecné a speciální (určené pro konkrétní aplikace) Interpretované a překládané Dle typu: imperativní (procedurální), funkcionální, logické (deklarativní), objektově-orientované

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 29 Definice programovacího jazyka Syntax definice povolených výrazů a konstrukcí programu Plná kontrola a podpora vývojových prostředí Príklad popisu výrazu gramatikou v Backus-Naurove formě. <exp> ::= <exp> + <exp> <exp> * <exp> <exp> <number> <number> ::= <number> <digit> <digit> <digit> ::= 0 1 2 3 4 5 6 7 8 9 Statická sémantika definuje jak jsou konstrukty používány Částečná kontrola a podpora prostředí Príklad axiomatické specifikace: {P} S {Q}, P- precondition, Q- postcondition, S - konstrukce jazyka. Plná sémantika co program znamená a dělá, jeho smysluplnost Kontrola a ověření správnosti je kompletně v režii programátora

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 30 Správnost programu Syntakticky i staticky sémanticky správný program neznamená, že dělá to co od něj požadujeme Správnost a smysluplnost programu je dána očekávaným chováním při řešení požadovaného problému V zásadě při spuštění programu mohou nastat tyto události: Program havaruje a dojde k chybovému výpisu Mrzuté, ale výpis (report) je dobrý start řešení chyby (bug) Program běží, ale nezastaví se a počítá v nekonečné smyčce. Zpravidla velmi obtížné detekovat a program ukončujeme po nějaké době Program včas dává odpověď Je však dobré vědět, že odpověď je korektní Správnost programu je plně v režii programátora, proto je důležité pro snadnější ověření správnosti, ladění a hledání chyby používat dobrý programovací styl

Program a jeho zápis Program popis činnosti prováděné počítačem Programovací jazyk notační systém pro zápis programu Program zpravidla zapisujeme ve zdrojových (textových) souborech Čitelnost programu: strojová efektivnost kódu lidská srozumitelnost, udržovatelnost, kódovací konvence, Vývojová prostředí (editor), debugger, nástroje pro správu verzí, analýza, testování softwarové inženýrství Abstrakce datová základní typy, struktury, modulární řídící základní, strukturální, modulární Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 31

Jiří Vokřínek, 2016 Source: B6B36ZAL http://geoawesomeness.com/wp-content/uploads/2014/08/proglanguages.jpg - Přednáška 1 32

Python Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 33

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 34 Python Vysokoúrovňový skriptovací programovací jazyk Dynamická kontrola datových typů Různá programovací paradigmata Open-source, různé platformy Jednoduchý na učení V předmětu ZAL Python 3.5 Online: https://repl.it/languages/python Python: https://www.python.org/downloads/ PyCharm EDU: https://www.jetbrains.com/pycharm-edu PyCharm IDE: https://www.jetbrains.com/pycharm/ Licence na download.cvut.cz

Jak vypadá program? Jiří Vokřínek, 2016 Source: http://learntocodewith.me/wp-content/uploads/2014/04/python-language.jpg?230531 B6B36ZAL - Přednáška 1 35

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 36 Příklad Hello world nejčastější první program > print( hello world ) Příklady na https://cw.fel.cvut.cz/wiki/courses/pri-bootcamp/01

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 37 Spouštění programu Z konzole Pravá část repl.it V příkazové řádce python V PyCharm Tools Python Console Ze souboru Levá část repl.it V příkazové řádce python program.py V PyCharm zeleným tlačítkem Můžeme programovat!

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 38 Výstup print("hello World!") print(100) print(3+6) print(3*6) print(6*2-2*4) print(2*(3+6)) print("3*6") print(3*6) print("abc"+"def") print("abc"+123) Hello World! 100 9 18 4 18 3*6 18 abcdef Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Can't convert 'int' object to str implicitly

Komenář Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 39 # toto je komentar print("hello World!") # toto je komentar "# toto neni komentar"

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 40 Vstup Textový řetězec input("zadej text") Pro zpracování lze uložit do proměnné, případně přetypovat viz. příští přednáška vstup = input("jak se mas?") print("ja se mam taky "+vstup)

Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 1 41 Zkuste si Hra s geniální umělou inteligencí print("je to "+input("zadej cislo, ktere mam hadat ")) Příště proměnné, datové typy a funkce

Jiří Vokřínek, 2016 Source: http://scifi.stackexchange.com/questions/19782/how-does-seeing-the-code-help-neo B6B36ZAL - Přednáška 1 42