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



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

NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

IB111 Programování a algoritmizace. Programovací jazyky

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

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

Program a životní cyklus programu

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

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

Úvod. Programovací paradigmata

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

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

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

Algoritmy a algoritmizace

Základy algoritmizace

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

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

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

ALGORITMIZACE A PROGRAMOVÁNÍ

Matematika v programovacích

DOTAZNÍK PRO URČENÍ UČEBNÍHO STYLU

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

Úvod do programování

Programování a algoritmizace: úvod

11. Přehled prog. jazyků

Sada 1 - Základy programování

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

Programovací jazyky Přehled a vývoj

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

Programování I. Martin Pergel,

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

Příklad z učebnice matematiky pro základní školu:

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

Algoritmizace. 1. Úvod. Algoritmus

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

Lekce 01 Úvod do algoritmizace

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

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

Jak mluvit s roboty. Dokážeš naprogramovat robota tak, aby postavil kelímky ve správnou stavbu?

Moravské gymnázium Brno s.r.o.

ALGORITMIZACE. Výukový materiál pro tercii osmiletého gymnázia

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

PB161 Programování v jazyce C++ Přednáška 7

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

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

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

Programování I. Martin Pergel, 10. října Martin Pergel, Programování I

Vyřešené teoretické otázky do OOP ( )

PB161 Programování v jazyce C++ Přednáška 7

Algoritmizace. Cíle předmětu

1.5.2 Číselné soustavy II

Algoritmy. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

Testování prvočíselnosti

Překladač a jeho struktura

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

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

Tematická oblast: Programování 2 (VY_32_INOVACE_08_2_PR) Anotace: Využití ve výuce: Použité zdroje:

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

Programování a algoritmizace: úvod

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

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

Kombinované úlohy - cvičení

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

1 Strukturované programování

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Úvod do informatiky. Miroslav Kolařík

Základy algoritmizace a programování

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

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

1.5.7 Prvočísla a složená čísla

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

ALGORITMIZACE Příklady ze života, větvení, cykly

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

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

6.16 Informatika a výpočetní technika

Číselné soustavy - Teorie

C2184 Úvod do programování v Pythonu podzim Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita. Úvod.

Úvod do programovacího jazyka Python

C2184 Úvod do programování v Pythonu podzim Mgr. Stanislav Geidl Národní centrum pro výzkum biomolekul Masarykova univerzita.

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Výsledky učení (Intented Learning Outcomes) jako klíčový nástroj řízení kvality vzdělávacího procesu. Teaching Excellence

Co je to matematika?

Algoritmizace prostorových úloh

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

Programování II. Modularita 2017/18

Architektury počítačů a procesorů

5. Metody návrhu uživatelského rozhraní

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

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

UML. Unified Modeling Language. Součásti UML

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

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

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Martin Hejtmánek hejtmmar

Projekt podpořený Operačním programem Přeshraniční spolupráce Slovenská republika Česká republika

Jaký programovací jazyk učit jako první a jak ho učit?

Informatika pro 8. ročník. Hardware

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

( ) ( ) Negace složených výroků II. Předpoklady:

Transkript:

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

Co je programování? Řešení úloh s pomocí počítače. Počítače jsou extrémně rychlé a velmi hloupé. Lidé jsou sice pomalejší, ale umí (nebo by většinou alespoň měli by umět) myslet. Dobrý programátor ovládá umění spojit lidskou inteligenci s rychlostí strojů. Schopnost převádět problémy do řeči strojů. Způsob, jak donutit počítač, aby dělal to, co chceme, aby dělal. Rozhodně je programování dovednost psát programy. Ale co je to program?

Programy a algoritmy Co je to program? Zápis algoritmu v řeči strojů. A co je algoritmus? Přesný návod či postup, kterým lze vyřešit daný typ úlohy. Teoreticky by mohl algoritmus řešit pouze jednu instanci úlohy. V tom případě ale typicky nevyužívá rychlosti strojů. Granularita kroků v návodu (tedy jak obecné může být zadání jednoho kroku) závisí čistě na platformě, pro kterou je algoritmus určen. Algoritmus pro počítač ze Star Treku může obsahovat mnohem obecnější kroky než pro počítač současný.

Problém algoritmizace Lidé přemýšlejí diametrálně odlišným způsobem, než jakým fungují stroje. Lidský mozek je (většinou) schopen abstrakce. Stroje zatím dokáží pouze transformovat určité vstupy na jiné výstupy (i když velmi rychle). Algoritmus tvoří člověk, ale vykonává ho stroj. Při psaní algoritmu NELZE vycházet z toho, že stroj problému rozumí!! Program udělá vždy PŘESNĚ to, co programátor napíše, nic navíc (ani v případě, že je to jasné ). Věci jsou jasné lidem, počítače jsou hloupé. Programátor musí umět hovořit řečí strojů.

Příklady algoritmů pro součastná PC Nalezení vyššího z čísel 1 a 2 (příklad algoritmu, kde není využita rychlost stroje). Jako výsledek vrať 2 a skonči. Nalezení nejvyššího ze dvou čísel (a,b): Pokud a > b, vrať a, jinak vrať b. Pak skonči. Nalezení nejvyššího z řady čísel: Je-li řada prázdná, skonči chybou. První číslo řady označ nejvyšší. Postupně pro každé další číslo řady (označ vždy prvek), pokud nejvyšší < prvek, označ prvek jako nejvyšší. Jako výsledek vrať nejvyšší a skonči.

Příklady nealgoritmických postupů Pro lidi: Přeložte text do češtiny. Zjistěte, zda se daný program vždy zastaví. Nevystavujte se při práci zbytečnému riziku. Proveďte bezpečnostní audit. Pro počítače ze Star Treku: Zjisti, jestli je planeta vhodná pro výsadek. Ověř, jestli nám od cizí lodi nehrozí nebezpečí. Tyto postupy jsou lidem jasné, ale nejedná se o algoritmy pro dnešní počítače. Ani nespadají do definice algoritmů (podle teorie vyčíslitelnosti).

Ariadnin algoritmus Ariadna, Theseus a Minotaurus (od docenta Holana, který báji doplnil fixou). Úkolem je určitě najít Minotaura (je-li v labyrintu) a bez bloudění se vrátit. V každé místnosti postupuj odpředu podle následující tabulky: Je tu Minotaurus zab ho a vrať se po niti až k Ariadně. Je tu více chodeb, ze kterých vede nit motej nit zpět a chodbu značkuj fixou. Je možnost jít chodbou, která není označena fixem vydej se tam. Je tu Ariadna statický Minotaurus neexistuje. Je tu jen jedna chodba, ze které vede nit motej nit zpět a chodbu značkuj fixou.

Ariadnin algoritmus Jaké má vlastnosti? Vždy existuje nějaké pravidlo. Vždy skončí. Cesta zpět se nebude křížit. Nit neustále určuje cestu zpět. Zastaví se u Ariadny. Existuje-li statický Minotaurus (tedy takový, který se nepohybuje), najde ho. Ariadnin algoritmus by bylo možné provést i bez fixy, ale museli bychom mít delší nit. Nit je analogií pro paměť dala by se reprezentovat jako posloupnost míst, kterými prochází.

Je algoritmus správně napsaný? Správnost algoritmu nelze algoritmicky ověřit. Nejen proto, že pojem správnost je vágní. Algoritmicky není ověřitelné ani to, zda se algoritmus zastaví! Halting problem (velmi známý) Algoritmická neověřitelnost správnosti algoritmu je dokázána. Je velký rozdíl mezi tím, když je dokázáno, že něco nejde, a tím, že na něco ještě nikdo nepřišel. Algoritmus, který bude říkat cokoliv zajímavého o jiných algoritmech, nikdy nebude existovat. Program, který porozumí přirozenému jazyku, zatím neexistuje (a pravděpodobně ještě dlouho nebude), ale není vyloučeno, že by (někdy) existovat mohl.

Problémy s ověřováním správnosti algoritmů U všech zajímavých algoritmů nestačí k ověření správnosti konečný počet kroků (dokonce ani k ověření toho, jestli algoritmus vůbec skončí). Příklad (starověký čínský algoritmus): Úkol: Zjistěte, zda je číslo n prvočíslo. Postup: Je-li n dělitelem výrazu (2 n 2), pak je n prvočíslo, jinak není. Příklad: 28 2 = 254 (není dělitelné osmi), takže 8 není prvočíslo. 211 2 = 2046 (dělitelné jedenácti), takže 11 je prvočíslo. Problém: Pro číslo 341 algoritmus selže (kdo to mohl čekat?), funguje tedy jen pro čísla od jedné do 340.

Sémantika a syntax O sémantice a syntaxi má smysl mluvit v souvislosti s algoritmy, respektive jejich elementárními kroky. Sémantikou rozumíme význam jednotlivých kroků algoritmu, je to vlastně myšlenka. Příklad: Sémantika zápisu 2 + 4 je většinou matematický součet čísel 2 a 4 (může být ale i jiná). Syntax je pak zápis myšlenek (sémantiky). Příklad: Operaci mocnění dvojky na čtvrtou můžeme vidět zapsanou jako 2^4 nebo 2 4, což jsou syntakticky dva různé zápisy stejné věci. Sémanticky stejný algoritmus se popisuje různou syntaxí v závislosti na tom, čemu nebo komu je algoritmus určen.

Programovací jazyky Stejnou sémantiku lze zapsat syntakticky různě (v rozdílných jazycích). Různé jazyky se z valné většiny liší jen syntaxí. Sémanticky se jazyky liší pouze na úrovni jednotlivých příkazů (granularitou kroků algoritmů). Drtivá většina programovacích jazyků (vlastně všechny normální ) je stejně silná. To znamená, že co jde napsat v jednom, lze i ve všech ostatních (a naopak co v jednom jazyce není možné napsat, nelze v žádném). Programovací jazyky (určené pro počítače) jsou oproti jazykům přirozeným (určeným pro lidi) jednoduché a strohé, aby jim stroje rozuměly. Celé to porozumění spočívá jen v tom, že každý příkaz jazyka lze popsat instrukcemi procesoru.

Rozdíly mezi programovacími jazyky Jestliže lze ve všech programovacích jazycích napsat totéž, není jedno, který použijeme? Ne!! Jazyky se liší. Čím? Rychlostí programů napsaných v daném jazyce. Rychlostí a pohodlností psaní kódu pro programátora. Specializací na určitý typ úloh. Knihovnami, které pro daný jazyk existují. Tato kritéria mají signifikantní vliv na výsledky (a cenu) práce. Fatální a častou chybou bývá špatné použití PHP. Obrovské urychlení může někdy přinést Prolog.

Dělení programovacích jazyků Dle míry abstrakce jsou jazyky různě vysoké. Vyšší jazyky používají větší míru abstrakce - jedním příkazem lze vykonat mnoho instrukcí ( kratší kód). Čím vyšší jazyk, tím bývá většinou pohodlnější (rychlejší) programování, avšak pomalejší kód. Podle způsobu překladu a spuštění: Kompilované (programovací) jsou většinou rychlé. Interpretované (skriptovací) bývají vyšší a pomalé. Dle způsobu programování: Procedurální (imperativní), těmi se budeme zabývat. Neprocedurální (deklarativní), programuje se v nich jinak, nebudeme se jimi zabývat.

Umění programovat Dovednost programování *N*E*S*P*O*Č*Í*V*Á* ve znalosti co největšího počtu jazyků!!!! Navzdory tomu, že si to mnoho lidí myslí. Není pravdou, že dobrý programátor musí umět syntaxi mnoha jazyků. Šikovný programátor se nové jazyky učí relativně rychle. Dobrý programátor použije i neznámý jazyk lépe než ten, kdo programovat neumí a takzvaně umí onen jazyk. Dovednost programování stojí stranou od znalosti jazyků (která je bez schopnosti programovat k ničemu). Umění tvorby programů je o sémantice, nikoliv o syntaxi. Protože jazyky jsou důležité, spadá do umu programování i volba vhodného jazyka pro řešení problému.

Jak se naučit programovat Byly časy, kdy se programování učilo psaním programů na papír. Byly i jiné (pozdější) časy, kdy se programování vyučovalo jen jako ovládnutí jednoho jazyka. Je dobré zvolit kompromis. Učit se programovat, ale využít k tomu i konkrétní jazyk pro větší názornost. S dalšími jazyky začít až po dosažení jisté úrovně v umění programovat. Nezapomínat, že jazyk je jen prostředkem k učení. V kterém jazyce začít? V Pascalu.

Jazyk Pascal Zastaralý a nemoderní jazyk, který už se nevyvíjí. Byl navržen a vytvořen za účelem učení programování, proto je pro výuku vhodný. Dnes už se v praxi nepoužívá. Existují i volně šiřitelné překladače (Free Pascal). Vývojové prostředí pro DOS a tvorbu konzolových aplikací. Roku 1995 vyvinula firma Borland grafické prostředí Delphi k tvorbě aplikací pro Windows. S nástupem Delphi měl jazyk Pascal obrovský potenciál, v té době nic podobného na trhu nebylo. Borland však potenciálu nevyužil, Pascal/Delphi programátoři používají dnes jen zřídka.

Rekapitulace Programování je o algoritmizaci problémů, aby je mohly řešit stroje, které jsou daleko rychlejší než člověk. Počítače jsou hloupé, algoritmy musí být přesné a nelze předpokládat, že stroj udělá něco navíc jen proto, že je to přece jasné. Umění programovat NENÍ znalost co největšího počtu jazyků!! Při algoritmizaci jde o sémantiku, ne o syntaxi. Různé jazyky jsou vhodné pro různá využití. Použití špatného jazyka je častá chyba. Dobrý programátor umí zvolit pro zadaný úkol vhodný jazyk.