Úvod do programování

Podobné dokumenty
Algoritmy a jejich znázorňování.

Úvod do programování

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

IB111 Programování a algoritmizace. Programovací jazyky

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

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

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

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

Program a životní cyklus programu

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

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

Úvod. Programovací paradigmata

Matematika v programovacích

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

Základy algoritmizace

Základy programování Zdrojový kód, dokumentace, týmová práce

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

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

11. Přehled prog. jazyků

Algoritmizace. 1. Úvod. Algoritmus

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

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

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

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

Lekce 01 Úvod do algoritmizace

Algoritmizace prostorových úloh

Algoritmy a algoritmizace

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

Úvod do programování

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

Programovací jazyk univerzální notace pro zápis algoritmů, implementována.

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

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

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

VISUAL BASIC. Přehled témat

Funkcionální programování. Kristýna Kaslová

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

1 Strukturované programování

Algoritmizace. Cíle předmětu

Programování II. Modularita 2017/18

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

Algoritmizace a programování

Martin Hejtmánek hejtmmar

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

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

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

Programovací jazyky Přehled a vývoj

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

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

ALGORITMIZACE A PROGRAMOVÁNÍ

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

Algoritmizace prostorových úloh

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

Sada 1 - Základy programování

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

Architektura počítačů

Vrstvy programového vybavení Klasifikace Systémové prostředky, ostatní SW Pořizování Využití

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

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

Objektově orientovaný přístup

Vizuální programování

Vývojové diagramy 1/7

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

Programovací jazyk Pascal

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

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

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

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

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

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

1. Programování proti rozhraní

Základy algoritmizace a programování

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

Pohled do nitra mikroprocesoru Josef Horálek

Základy algoritmizace a programování

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

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

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

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

2. lekce Algoritmus, cyklus Miroslav Jílek

Dynamické datové struktury III.

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky.

Programování a algoritmizace: úvod

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

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. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

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

Funkcionální programování

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

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

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

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

Základy algoritmizace, návrh algoritmu

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

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

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

Softwarové komponenty a Internet

Úvod do programování. Lekce 1

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

Transkript:

Úvod do programování Algoritmus. Vlastnosti algoritmů. Zápis algoritmů. Programovací jazyky. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie. Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 1 / 46

Obsah přednášky 1 Úvodní informace o předmětu 2 Problém a algoritmus 3 Algoritmus 4 Znázorňování algoritmu 5 Jazyk a jeho vlastnosti 6 Překlad programu 7 Programovací jazyky a jejich dělení 8 Zásady pro zápis zdrojového kódu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 2 / 46

1. Plán přednášek Úvodní informace o předmětu Tematické celky: (1) Problémy a algoritmy. (2) Znázorňování algoritmů. Programovací jazyky. (3) Datové struktury a datové typy (4, 5) Stavební prvky algoritmu: podmínky, cykly, metody. (6, 7) Základní techniky návrhu algoritmu: rekurze (8,9) Základní techniky návrhu algoritmu: iterace, heuristika. (10,11) Třídící algoritmy. Literatura: [1] VIRIUS M.: Základy algoritmizace, 2004,Vydavatelství ČVUT [2] JANČAR P.: Teoretická informatika, 2007, VŠB, Ostrava [3] WROBLEWSKI P.: Algoritmy,datové struktury a programovací techniky, 2004,Computer Press [4] JOKL E.,ŠIBRAVA Z.,VOSPĚL Z.: Programování1,1990,Vydavatelství ČVUT Cvičení: Implementace algoritmů v jazyce Python. Literatura: [1] Summerfield M.: Python 3, Computer Press, 2012 [2] Pilgrim M.: Ponořme se do Pythonu 3, CZ NIC, 2010: http://diveintopython3.py.cz/index.html Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 3 / 46

Problém a algoritmus 2. Problém Termín mající více významů. Definice 1 (Slovník spisovného jazyka českého) Věc k řešení, nerozřešená sporná otázka, otázka k rozhodnutí, nesnadná věc Definice 2 (Wikipedia). Podmínky nebo situace nebo stav, který je nevyřešený, nebo nechtěný, nebo nežádoucí. Problém vyžaduje řešení. Pro nalezení řešení nutné pochopit nejdůležitější aspekty problému. Ne všechny problémy jsme v současné době schopni úspěšně a efektivně vyřešit!!! Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 4 / 46

3. Popis problému Problém a algoritmus Problém v geoinformatice/počítačové kartografii lze formálně zapsat takto: NÁZEV: Slovní popis problému IN: Popis přípustného vstupu (množina vstupních dat). OUT: Popis výsledku, který je pro daný vstup očekáván. Musí existovat funkce f přiřazující vstupním datům požadovaný výstup. Nalezení řešení problému nalezení příslušné funkce f. Definice: Každý problém P je určen uspořádanou trojicí (IN, OUT, f ), kde IN představuje množinu přípustných vstupů, OUT množinu očekávaných výstupů a f : IN OUT funkci přiřazující každému vstupu očekávaný výstup. IN/OUT: Kombinace znaků, celých čísel či přirozených čísel představující kódování. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 5 / 46

Problém a algoritmus 4. Znázornění problému IN OUT x 1 x 4 x 3 x5 x 2 f f f f f y 1 y 2 y 3 y 4 x 6 f y 5 y 6 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 6 / 46

5. Příklady problémů Problém a algoritmus P1: Setřídění posloupnosti čísel: IN = {16, 74, 8, 4, 11, 9, 38}, OUT = { 9, 4, 8, 11, 16, 38, 74} h 15 = 8 u u 5 1 h 57 = 2 h 45 = 5 h u 7 14 = 4 h u 4 12 = 2 h 56 = 6 h 46 = 7 h 78 = 2 h u 34 = 3 u 6 2 h 68 = 3 h h 36 = 2 79 = 3 h u 8 38 = 7 h 23 = 5 u 3 h 89 =1 h 39 = 10 u 9 P2: Nalezení nejkratší cesty v grafu: IN = {G = (U, H, ρ), u 1, u 9 } U = u 1,..., u 9, H = h 12,..., h 79 OUT = h 14, h 34,, h 36, h 68, h 89 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 7 / 46

Algoritmus 6. Algoritmus Pojem cca 1000 let starý, poprvé použit významným perským matematikem Abú Abdallahem Muhammadem ibn Musa al-khwarizmim. 1 Algoritmus je obecný předpis sloužící pro řešení zadaného problému. Představuje posloupnost kroků doplněných jednoznačnými pravidly. Setkáváme se s ním i v běžném životě: kuchyňský recept, lékařský předpis. A(P) : Algoritmus A řeší problém P, pokud x IN, libovolné velikosti, přiřazuje v konečném počtu kroků (alespoň jeden) výstup y, y OUT, a y = f (x). Poznámky: Rešení vyhovuje vstupním podmínkám. Pro zadaný vstup x může existovat více řešení y, A by měl nalézt alespoň jedno. Množina vstupů zpravidla nekonečně velká. 1 Fibonacci jeho příjmení zkomolil na Algorizmi a začal tento termín používat. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 8 / 46

7. Vlastnosti algoritmu Algoritmus A) Determinovanost Algoritmus musí být jednoznačný jako celek i v každém svém kroku. Nelze dosáhnout přirozenými jazyky, proto pro zápis používány formální jazyky. Algoritmus je invariantní vůči formálnímu jazyku!!! B) Rezultativnost Algoritmus vede vždy ke správnému výsledku v konečném počtu kroků. C) Hromadnost Algoritmus lze použít pro řešení stejné třídy problémů s různými vstupními hodnotami. Pro jejich libovolnou kombinaci obdržíme jednoznačné řešení. D) Opakovatelnost Při opakovaném použití stejných vstupních dat vždy obdržíme tentýž výsledek. E) Efektivnost Každý krok algoritmu by měl být efektivní. Krok využívá elementární operace, které lze provádět v konečném čase. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 9 / 46

8. Řešitelnost problému Algoritmus Řešitelnost problému P nelze posuzovat obecně, je nutné stanovit určitá omezení. Omezení problému na speciální typ problému P A/N (tzv. ANO/NE problém). ANO/NE problém (tzv. rozhodovací problém) P A/N : Vstupní množina IN = {0, 1} a výstupní množina OUT = {0, 1}. Příklady: f = { 1, x 1 > x 2, 0, x 1 x 2, f = { 1, x 1 mod(x 2 ) = 0, 0, jinak, Algoritmicky rozhodnutelný { P A/N : 0 A(P A/N ) x IN f (x) =, výsledek v konečném čase. 1 Správný výsledek pouze pro 1 vstup, P A/N algoritmicky částečně rozhodnutelný. V každém jiném případě je P A/N algoritmicky nerozhodnutelný. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 10 / 46

Algoritmus 9. Kódování (1/2) Vstupní a výstupní data kódována v abecedě. Formální abeceda : Konečná množina elementárních symbolů (písmen, znaků) přesného významu. Lze je spojovat do složitějších útvarů, tzv. slov w. Binární abeceda: = {0, 1}, Decimální abeceda: = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Hexadecimální abeceda: = {0,.., 9, A,..., F}. Textová abeceda: ASCII, UTF. Příklad: Problém třídění = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Nejkratší cesta v grafu = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, u, h}. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 11 / 46

Algoritmus 10. Kódování (2/2) Formální slovo w nad abecedou : Konečný řetězec symbolů nad danou abecedou. Představován libovolnou posloupností těchto symbolů. Má jednoznačný význam. Prázdné slovo ε. Příklad: Problém třídění: IN : w = {16, 74, 8, 4, 11, 9, 38}. OUT : w = { 9, 4, 8, 11, 16, 38, 74}. Nejkratší cesta v grafu: IN : w = {u 1,..., u 9, h 12,..., h 89 }. OUT : w = {h 14, h 34,, h 36, h 68, h 89 }. Formální jazyk: Množina všech formálních slov {w}, může být omezená či neomezená. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 12 / 46

Algoritmus 11. Řešení problému prostřednictvím algoritmu (1/2) Fáze řešení problému: 1) Definice problému Formulace problému společně s cílem, kterého chceme dosáhnout. Definujeme požadavky týkající se tvaru vstupních a výstupních dat. 2) Analýza problému Stanovení kroků a metod vedoucích k jeho řešení. Rozkládání problému na dílčí podproblémy. jejichž řešení je jednodušší než řešení problému jako celku. Tzv. princip dekompozice, postup shora-dolů. 3) Sestavení algoritmu Navržení a sestavení algoritmu řešící požadovaný problém. Dílčí komponenty skládány metodou zdola-nahoru. Opak dekompozice. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 13 / 46

Algoritmus 12. Řešení problému prostřednictvím algoritmu (2/2) 4) Kódování algoritmu Převod algoritmu do formálního jazyka představovaného zpravidla programovacím jazykem. 5) Ověření správnosti algoritmu Ověření funkčnosti algoritmu na konečném vzorku dat. Splnění této podmínky není postačující k ověření funkčnosti a správnosti algoritmu. Ověření funkcionality singulárních případů (mnohdy značně obtížné). Různé strategie testování: např. unit testing. 6) Nasazení algoritmu Splňuje li algoritmus požadavky na něj kladené ověřené jeho testováním, je možné jej nasadit do ostrého provozu. Poznámka: Algoritmus by měl být matematicky dokázán pro všechny varianty vstupních dat. Testování zahrnuje i singulární případy. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 14 / 46

Znázorňování algoritmu 13. Znázorňování algoritmů: Algoritmus lze znázorňovat mnoha způsoby. Nejčastěji jsou používáno: Grafické vyjádření algoritmu. Textové vyjádření algoritmu. Grafické vyjádření algoritmu Algoritmus je popsán formalizovanou soustavou grafických symbolů. Používány vývojové diagramy, strukturogramy. Výhody: přehlednost, názornost, znázornění struktury problému, poskytuje informace o postupu jeho řešení. Nevýhody: náročnost konstrukce grafických symbolů a jejich vzájemných vztahů, obtížná možnost dodatečných úprav postupu řešení vedoucí často k překreslení celého postupu, technika není vhodná pro rozsáhlé a složité problémy. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 15 / 46

Znázorňování algoritmu 14. Vývojový diagram řešení kvadratické rovnice Start Read a,b,c D=b*b-4*a*c - if(d>=0) + Nema reseni v R + - if(d>0) 2 ruzne koreny: x1=(-b+sqrt(d))/(2*a) x2=(-b-sqrt(d))/(2*a) Dvojnasobny koren: x1=(-b+sqrt(d))/(2*a) x2=x1 Print x1,x2 End Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 16 / 46

Znázorňování algoritmu 15. Textové vyjádření algoritmu Tento způsob vyjádření algoritmů se v současné době používá nejčastěji. Varianty: Slovní popis přirozeným jazykem (pouze doplňující charakter). Popis pseudokódem nebo PDL (Program Description Language). Zápis prostřednictvím formalizovaného (programovacího) jazyka. Výhody: Přehlednost zápisu. Jednoznačnost jednotlivých kroků. Snadný přepis do programovacího jazyku (nejblíže ke skutečnému programovacímu jazyku). Možnost pozdější modifikace postupu řešení. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 17 / 46

Znázorňování algoritmu 16. Textové vyjádření řešení kvadratické rovnice Algoritmus 3: Kvadratická rovnice (a,b,c) 1: read (a,b,c) 2: D=b*b-4*a*c 2: if D > 0: 3: x1=(-b+sqrt(d))/(2*a) 4: x2=(-b- sqrt(d))/(2*a) 5: else if D = 0 6: x1=(-b+sqrt(d))/(2*a) 7: x2=x1 8: else 9: x1=ø, x2=x1 10: print (x1,x2) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 18 / 46

Jazyk a jeho vlastnosti 17. Jazyky a jejich vlastnosti Jazyky a jejich dělení: Přirozené jazyky Komunikační prostředek mezi lidmi. Skládání slov do vyšších celků není řízeno tak striktními pravidly. Nevýhodou významová nejednoznačnost některých slov. Synonyma/homonyma omezují jejich použití při popisu problémů. Formální jazyky Vznikají umělou cestou. Skládání symbolů do vyšších celků je řízeno striktnějšími pravidly. Zamezení významové nejednoznačnosti. Zástupci: programovací jazyky, matematická symbolika, jazyk mapy... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 19 / 46

Jazyk a jeho vlastnosti 18. Historie programovacích jazyků John von Neumann (1903-1957): Teoretické schéma počítače tvořené: procesor, řadič, operační pamět, vstupní a výstupní zařízení. Základ architektury současných počítačů. Alan Turing (1912-1954): Zabýval se problematikou umělé inteligence Může stroj řešit problémy. Vytvořil abstraktní model počítače, tzv. Turingův stroj (eliminaci závislosti na hardware). Konrad Zuse (1910-1995): První programovací jazyk (1946), Plankalkul. Nikdy nebyl implementován. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 20 / 46

Jazyk a jeho vlastnosti 19. von Neumannovo schéma počítače Memory Control Unit Arithmetic Logic Unit Input Input Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 21 / 46

Jazyk a jeho vlastnosti 20. Vývoj programovacích jazyků (1/4) FORTRAN (FORmulaTRANslator, 1954-57) Autorem IBM, používán pro vědecké výpočty a numerické aplikace. Kompilovaný jazyk. Využíván dodnes, řada vědeckých projektů napsána ve Fortranu. FORTRAN 77, Fortran 90, Fortran 95, Fortran 2000, Fortran 2003 a Fortran 2008. ALGOL (ALGOrithmic Language, 1958-59) Jazyk pro popis algoritmů... Moderní koncepce, implementace rekurze. Podobný současným programovacím jazykům. Ve své době velmi populární. LISP (List Processing, 1958-59) Používán v oblasti umělé inteligence. První funkcionální jazyk. Z něj odvozeny další jazyky Tcl, Smalltalk nebo Scheme. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 22 / 46

Jazyk a jeho vlastnosti 21. Vývoj programovacích jazyků (2/4) COBOL (Common Business Oriented Language, 1959) Zápis programů v jazyce blízkém angličtině, přístupnost široké veřejnosti. Vytváření rozsáhlých programů k obchodním účelům. Snadný převod programů mezi počítači. Mnoho verzí, poměrně dlouho vyvíjen. BASIC (Beginners All-Purpose Symbolic InstructionCode, 1964) Jednoduchý jazyk pro řešení jednoduchých úkolů výuku programování. Nerozlišoval datové typy. Používán dodnes, doplněn o možnost objektového progrmování (Visual Basic). Pascal (Niklaus Wirth, 1971) Navržen pro výuku programování, odvozen za Algolu. Používán dodnes. Rozšíření o možnost objektového programování, Object Pascal či grafické rozhraní (Delphi). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 23 / 46

Jazyk a jeho vlastnosti 22. Vývoj programovacích jazyků (3/4) Simula (1967) První objektově orientovaný programovací jazyk. Odvozen z Algolu. Používán pro vědecké výpočty a simulace, možnost paralelizace výpočtů. Uplatnil se pouze v akademickém prostředí, v praxi příliš nepoužit. Přinesl řadu moderních prvků, např. garbage collector (převzala Java). Smalltalk (Xerox) Interpretovaný objektově orientovaný jazyk. Dodnes velmi často používán, současná implementace se výrazně liší od původní. Zavedl událost (posílání zpráv). Možnost vyjádření grafického návrhu formalizovaným jazykem. Propojení vizuálního a textového popisu. Univerzálně použitelný zejména pro modelování objektově orientovaných systémů. C (AT&T, 1973) Často programovací jazyk, stále se vyvíjí. Od poloviny 70. let standard na platformě PC (Windows, Unix). Univerzální, používán pro tvorbu malých aplikací i operačních systémů. Možnost vyjádření grafického návrhu formalizovaným jazykem. Propojení vizuálního a textového popisu. Univerzálně použitelný zejména pro modelování objektově orientovaných systémů. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 24 / 46

Tomáš Další Bayer významné bayertom@natur.cuni.cz jazyky: (KatedraPython, aplikované Úvod geoinformatiky do Ruby, programování Lua, a kartografie. Haskel, Přírodovědecká PHP, fakulta ASP... UK.) 25 / 46 Jazyk a jeho vlastnosti 23. Vývoj programovacích jazyků (4/4) C++ (Bjarne Stroustrup, 1982-85) Rozšířením jazyka C možnosti objektového a generického programování Zřejmě nejrozšířenější programovací jazyk. První standardizace až 1997, další 2003, 2006, 2007. Java (Sun, 1994-1995) Původně navržen jako jazyk pro inteligentní domácí spotřebiče. Interpretovaný jazyk, nezávislost na hardware a operačním systému. Snaha o zjednodušení a odstranění nebezpečných konstrukcí z C++ (automatická správa paměti, kompletně objektový). C# (Microsoft, 2002) Objektově orientovaný interpretovaný jazyk založený na C++ a Javě. Základ platformy NET. Jeho podíl dynamicky roste, zatím rozšířen především na OS Windows

Překlad programu 24. Proces překladu (1/2) Editor: Zápis zdrojového kódu v textovém souboru. Čisté ASCII bez formátování, nepoužívat textové editory. Preprocesor: Předzpracování zdrojového kódu, vynechání komentářů, správné includování souborů, zpracování maker. Výsledkem opět textový soubor. Kompilátor: Překlad textového souboru vytvořeného preprocesorem do assembleru. Následně překlad do relativního kódu (absolutní adresy proměnných a funkcí nemusí být ještě známy), tzv. Object code, *.obj. Každý programový modul tvořen samostatným *.obj souborem. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 26 / 46

Překlad programu 25. Proces překladu (2/2) Linker: Spojení jednotlivých *.obj souborů generovaných kompilátorem. Relativní adresy nahrazeny absolutními. Výsledkem přímospustitelný kód. Debugger: Slouží pro ladění programu. Hledání chyb nastávající za běhu programu. Nástroje break point, watch, step into/over, conditional break point, memory leak detection. Po nalezení chyby opakujeme proces od kompilace znovu. Nejčastější chyby: Neinicializované proměnné, použití ukazatele s hodnotou NULL, chyby při práci s pamětí, zakrytí lokálních proměnných, překročení indexu, nevhodný typ návratové hodnoty... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 27 / 46

Programovací jazyky a jejich dělení 26. Paradigmata programování Souhrn základních domněnek, předpokladů, představ.. Souhrn způsobů formulace problémů, metodologických prostředků řešení, metodik zpracování. Paradigma v programování ovlivňuje styl programování. Definuje jakým způsobem vnímá programátor problém, a jak ho řeší. Různá paradigmata: Procedurální (imperativní) programování Objektově orientované programování: Deklarativní programování Funkcionální programování Logické programování Paralelní programování Distribuované programování Základem algoritmus, přesně daná posloupnost kroků. Založeno na objektově orientovaném přístupu k problému. Opak imperativního programování (říkáme co, ne jak). Varianta deklarativního programování, založeno na lambda kalkulu. Kombinace procedurálního / deklarativního přístupu. Pro dekomponovatelné úlohy, paralelizace zpracování. Zpracování probíhá po částech na více počítačích. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 28 / 46

Programovací jazyky a jejich dělení 27. Dělení programovacích jazyků Kritéria pro dělení programovacích jazyků: Podle způsobu zápisu instrukcí Nižší programovací jazyky. Vyšší programovací jazyky. Podle způsobu překladu Kompilované jazyky. Interpretované jazyky. Podle způsobu řešení problému Procedurální jazyky. Neprocedurální jazyky. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 29 / 46

Programovací jazyky a jejich dělení 28. Dělení programovacích jazyků Nižší programovací jazyky: Programování je prováděno ve strojových instrukcích. Výsledný kód velmi rychlý, na programátora však tento přístup klade značné nároky. Program je závislý na typu procesoru; lze jej spustit např. na procesorech firmy Intel a nikoliv na procesorech firmy Motorola. Zástupci:strojový kód, Assembler. mov al, 61h Vyšší programovací jazyky: Používají zástupné příkazy nahrazující skupiny instrukcí, které jsou následně překládány do strojového kódu. Struktura programu je přehlednější, vývoj programu je jednodušší, program není závislý na typu procesoru. První vyšší programovací jazyk: Fortran. Většina současných programovacích jazyků: Basic, Pascal, C, C++, Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 30 / 46

Programovací jazyky a jejich dělení 29. Interpretované jazyky Obsahují interpret, program vykonávající přímo instrukce v programovacím jazyce. 3 typy interpretru: přímé vykonávání zdrojového kódu Neprováděna kompilace, nevýhodou pomalost. Zástupce: Basic. překlad do mezikódu Zdrojový kód přeložen do mezikódu a vykonán. spuštění předkompilovaného mezikódu Předem vytvořen mezikód (bajtový kód) nezávislý na operačním systému. Zástupce: Java, C#, Python. Nevýhody: Interpret výrazně pomalejší než strojový kód. Pomalejší běh programu, větší spotřeba hardwarových prostředků. Výhody: Nezávislost na platformě, hardwaru. Program může běžet pod různými operačními systémy. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 31 / 46

Programovací jazyky a jejich dělení 30. Kompilované jazyky Program je přeložen do strojového kódu a poté může být opakovaně spouštěn již bez přítomnosti interpretru. Překlad se provádí kompilátorem, výsledkem bývá spustitelný soubor (např. exe na platformě Windows). Výhody: Kód několikanásobně rychlejší než u jazyků interpretovaných. Nižší hardwarové nároky. Běh bez interpreteru. Výhody: Přeložený kód není univerzálně použitelný pod různými OS. Složitější syntaxe. Zástupci: C, C++, Fortran, Pascal. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 32 / 46

Programovací jazyky a jejich dělení 31. Procedurální jazyky Označovány jako imperativní jazyky. Zaměřeny na algoritmus, řešení problému popsáno pomocí posloupnosti příkazů, tj. předpisem, jak úlohu vyřešit. Většina programovacích jazyků umožňuje imperativní přístup. Dělení do dvou skupin: Strukturované jazyky: Algoritmus rozdělen na dílčí kroky realizované podprogramy, které se spojují v jeden celek. Zástupce: C. Objektově orientované jazyky: Snaha modelovat a nacházet řešení úloh postupy blízkými skutečnému lidskému uvažování. Využití objektového modelu, každý objekt má určité chování a vlastnosti. Objekty spolu mohou komunikovat. Zástupce: Java, C#. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 33 / 46

Programovací jazyky a jejich dělení 32. Neprocedurální jazyky Označovány jako deklarativní jazyky. Založeny na myšlence deklarativního programování: Definujeme pouze problém a nikoliv jeho řešení. Vlastní algoritmizaci problému řeší překladač. Cílem eliminace častých chyb programátora. Neobsahují cykly, příkazy pro opakování nahrazeny prostřednictvím rekurze. Pořadí jednotlivých příkazů není důležité, kód nemusí být zpracováván lineárně, tj. od počátku. Zástupci: SQL, Scheme. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 34 / 46

Zásady pro zápis zdrojového kódu 33. Obecné zásady pro zápis zdrojového kódu Zápisu programového kódu nutno věnovat zvýšenou pozornost. Nutno dodržovat níže uvedené zásady a pravidla. Cílem je tvorba snadno udržovatelného kódu. Vytvoření programu není jednorázová činnost. Jak se vyvíjí znalosti a schopnosti programátora, objevují se nové postupy řešení, měl by na ně autor programu adekvátně reagovat. Program by měl být psán přehledně a srozumitelně, aby ho bylo možné snadno modifikovat a doplňovat o novou funkcionalitu. V opačném případě se mohou doba a úsilí vynaložené na implementaci i poměrně jednoduché změny rovnat době odpovídající kompletnímu přepsání programu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 35 / 46

Zásady pro zápis zdrojového kódu 34. Čitelnost a dodržování konvencí Čitelnost: Zdrojový kód by měl být zapsán tak, aby byl přehledný a snadno čitelný. Není vhodné používat nejasné programové konstrukce znesnadňující pochopení činnosti konstrukce. Nutno dodržovat níže obecná pravidla formátování zdrojového kódu. Dodržování konvencí: Nutnost dodržování syntaktických pravidel a konvencí formálního jazyku. Pro každý formální jazyk existuje seznam konvencí. Nedoporučuje se obcházet pravidla nestandardním způsobem. Nestandardní konstrukce obtížněji čitelné, mohou u nich nastat vedlejší efekty, špatně se upravují a rozšiřují. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 36 / 46

Zásady pro zápis zdrojového kódu 35. Formátování zdrojového kódu (1/4) Zásada č. 1: 1 příkaz na jeden řádek. if (i==10) a++;b--; System.out.println(b); //Spatne if (i==10) a++; //Dobre b--; System.out.println(b); Zásada č. 2: Odsazování řádků v podřízených blocích. if (i!=j){ //Spatne a=i*j b--; System.out.println(b)} if (i!=j) //Dobre { a=i*j b--; System.out.println(b) } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 37 / 46

Zásady pro zápis zdrojového kódu 36. Formátování zdrojového kódu (2/4) Zásada č. 3: Vynechávání řádků mezi logickými celky, podcelky, metodami,... public void simplify() //Zacatek jedne metody { double x=new ArrayList<double>(); double y=new ArrayList<double>();... } //Konec jedne metody //Prazdny radek public void clearall() //Zacatek druhe metody { X.clear(); Y.clear(); } //Konec druhe metody Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 38 / 46

Zásady pro zápis zdrojového kódu 37. Formátování zdrojového kódu (3/4): Zásada č. 4: Důsledné používání komentářů (Co, jak, proč, kdy, kým), zásadně v AJ! if (v == 1) //Vertex code { //Compute first mid-point x1 = (x_point.get(v2) + x_point.get(v3)) / 2.0; y1 = (y_point.get(v2) + y_point.get(v3)) / 2.0; //Compute second mid-point x2 = (x_point.get(v1) + x_point.get(v3)) / 2.0; y2 = (y_point.get(v1) + y_point.get(v3)) / 2.0; Zásada č. 5: Rozlišování malých a velkých písmen (Case Sentivity!). double a; double A; sin(a); Sin(a); //Jedna se o jine promenne //Spravne //Spatne Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 39 / 46

Zásady pro zápis zdrojového kódu 38. Formátování zdrojového kódu (4/4): Zásada č. 6: Délka řádku menší než šířka obrazovky. Zásada č. 7: Zalamování dlouhých řádků na logickém místě. Zásada č. 8: Rozumná délka podprogramů, max. 150 řádek. Zásada č. 9: Za čárkou a středníkem mezera, před a za závorkou nikoliv. public void addpoint( double x,double y,double z ) //Spatne { x_point.add(x); y_point.add(y); z_point.add(z); } public void addpoint(double x, double y, double z) //Dobre { x_point.add(x); y_point.add(y); z_point.add(z); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 40 / 46

Zásady pro zápis zdrojového kódu 39. Jazyk a jeho používání Zásada č. 10: V programu nepoužívat více než jeden jazyk (nekombinovat ČJ a AJ). Zásada č. 11: Názvy proměnných, funkcí, tříd, komentářů uvádíme zpravidla v anglickém jazyce. Zásada č. 12: Nepoužívat diakritiku v komentářích, názvech projektů, názvech souborů, identifikátorech, metodách. class Draw { private int sirka, delka; //Spatne private int width, length; //Dobre... } Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 41 / 46

Zásady pro zápis zdrojového kódu 40. Identifikátory proměnných, metod, tříd (1/3) Zásada č. 13: Co nejvýstižnější názvy identifikátorů proměnných, funkcí, tříd. //Spatne class A; double k, l, m; int x(double y); //Spravne class Graphics; double scale, rotation, distance; int degrees(double angle) Zásada č. 14: Nepoužívat podobné názvy identifikátorů. double aaa, aab, aac; //Spatne Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 42 / 46

Zásady pro zápis zdrojového kódu 41. Identifikátory proměnných, metod, tříd (2/3) Zásada č. 14: Nepoužívat identifikátory s délkou větší než 20 znaků. Zásada č. 15: Víceslovné identifikátory spojovat podtržítky double maxangulardistortion; double max_angular_distortion; //Spatne //Dobre Zásada č. 16: Jména konstant s velkými písmeny (odlišení od proměnných) final double a_bessel=6377397,1550; final double A_BESSEL=6377397,1550; //Spatne //Dobre Zásada č. 17: Jména proměnných začínají malými písmeny. double X_Jtsk; double x_jtsk; //Spatne //Dobre Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 43 / 46

Zásady pro zápis zdrojového kódu 42. Identifikátory proměnných, metod, tříd (3/3) Zásada č. 18: Jména metod začínají malými písmeny. double Rotation; double rotation; //Spatne //Dobre Zásada č. 19: Jméno třídy začíná velkým písmenem. class graphics class Graphics //Spatne //Dobre Zásada č. 21: Ve zdrojovém kódu nepoužívat čísla bez identifikátoru. Složité záměny hodnot v celém programu. double s1, s; s=s1+125.55; //Spatne double s, s1, s2=125.55; s=s1+s2; //Dobre Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 44 / 46

Zásady pro zápis zdrojového kódu 43. Podmínky a jejich zápis Zásada č. 22: Podmínky zapisovat v pozitivní formě. if (!(a < b)) if (a >= b) //Spatne //Dobre Zásada č. 23: Vyvarovat se nekonečných podmínek. Pozor na kontradikce a tautologie!!! while (x!x) while (x &&!x) if (true) if (x 1) //Spatne, tautologie, nekonecny cyklus //Spatne, kontradikce, neprobehne ani jednou //Spatne, probehne vzdy //Spatne,probehne vzdy Zásada č. 24: Nepoužívat příkazy pro skok, vedou k nepřehlednosti programu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 45 / 46

44. Komentáře Zásady pro zápis zdrojového kódu Pomáhají udržovat přehlednost kódu. Co je nám jasné dnes, nemusí být jasné zítra, za měsíc, či za rok. Zásada č. 25: Komentovat významná místa v kódu (nepřehledná, složitá,...). Zásada č. 26: Komentovat proměnné a jejich významy. Zásada č. 27: Komentovat hlavičky metod. Zásada č. 28: Komentovat změny v kódu. Zásada č. 29: Komentovat metody. Zásada č. 30: Rozumná délka komentářů. Zásada č. 31: Stručnost, přehlednost, výstižnost. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 46 / 46