Ú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.

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

IB111 Programování a algoritmizace. Programovací jazyky

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

Program a životní cyklus programu

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

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

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

Úvod. Programovací paradigmata

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

Základy algoritmizace

Algoritmizace. 1. Úvod. Algoritmus

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

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

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

Matematika v programovacích

Algoritmizace. Cíle předmětu

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

Algoritmy a algoritmizace

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

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

Lekce 01 Úvod do algoritmizace

11. Přehled prog. jazyků

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

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

Algoritmizace prostorových úloh

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

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

VISUAL BASIC. Přehled témat

Algoritmizace a programování

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

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

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

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

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

Vývojové diagramy 1/7

1 Strukturované programování

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

Úvod do programování

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

Programování II. Modularita 2017/18

Programovací jazyky Přehled a vývoj

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

Programovací jazyk Pascal

Algoritmizace prostorových úloh

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

ALGORITMIZACE A PROGRAMOVÁNÍ

Martin Hejtmánek hejtmmar

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

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Sada 1 - Základy programování

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

Vizuální programování

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

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

Architektura počítačů

Základy algoritmizace a programování

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

Základy algoritmizace, návrh algoritmu

Základy algoritmizace a programování

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

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

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

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

1 Základy algoritmizace a programování. 1.1 Algoritmus Možnosti zápisu algoritmů. Základy algoritmizace a programování

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

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. Výukový materiál pro tercii osmiletého gymnázia

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

Objektově orientovaný přístup

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

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

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

Pohled do nitra mikroprocesoru Josef Horálek

6 Příkazy řízení toku

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

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

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

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

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

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

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

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

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

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

Dynamické datové struktury IV.

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

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

Dynamické datové struktury III.

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

1. Programování proti rozhraní

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

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

MPASM a IDE pro vývoj aplikací MCU (Microchip)

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

Úvod do programování. Lekce 1

Modelování procesů s využitím MS Visio.

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

Transkript:

Úvod do programování Algoritmus. Vlastnosti algoritmů. Dělení algoritmů. Složitost algoritmů. 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 / 49

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 Vývoj programovacích jazyků 7 Překlad programu 8 Programovací jazyky a jejich dělení 9 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 / 49

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 Java. Literatura: [1] Herout P.: Učebnice jazyka Java, Java, Kopp, 2001 [2] Eckel B. : Myslíme v jazyce Java, Grada Publishing, 2000 [3] Chapman S. J.: Začínáme programovat v jazyce Java, Computer Press, 2001 [4] Virius M.: Java pro zelenáče, Neocortex, 2001 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 3 / 49

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 / 49

3. Popis problému Problém a algoritmus Problém v geoinformatice/počítačové kartografii lze formálně zapsat takto: NÁZEV PROBLÉMU: Slovní popis problému VSTUP: Popis přípustného vstupu (množina vstupních dat). VÝSTUP: Popis výstupu, tj. 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. VSTUP/VÝSTUP: Kombinace znaků, celých čísel či přirozených čísel Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 5 / 49

Algoritmus 4. 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. Algoritmicky řešitelné problémy Algoritmus A řeší problém P, pokud libovolnému vstupu x, x IN, přiřazuje v konečném počtu kroků (alespoň jeden) výstup y, y OUT, tak, že platí: y = f (x). Poznámky: Předpokládáme, že algoritmus A rozumí vstupnímu kódování a je schopen uložit data ve výstupním kódování. Pro zadaný vstup x může existovat více než jedno řešení y, algoritmus A by měl nalézt alespoň jedno. 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.) 6 / 49

5. Vlastnosti algoritmu Algoritmus A) Determinovanost Algoritmus musí být jednoznačný jako celek i v každém svém kroku. Tohoto stavu nelze dosáhnout přirozenými jazyky, proto jsou pro zápis algoritmu 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.) 7 / 49

6. Řešitelnost problému Algoritmus Řešitelnost problému nelze posuzovat obecně, je nutné stanovit určitá omezení. Omezení problému na speciální typ problému, tzv. ANO/NE problém Problém musí být řešitelný v konečném čase. ANO/NE problém (tzv. rozhodovací problém): Vstupní množina IN = {0, 1} a výstupní množina OUT = {0, 1} jsou dvouprvkové, algoritmus A, problém P. VSTUP: x 1, x 2 VÝSTUP: f (x 1 ) = f (x 2 )? (tj. ANO/NE) Pokud algoritmus A řeší rozhodovací problém problém P (přiřadí správně odpovědi a skončí v konečném čase), problém P označujeme jako algoritmicky rozhodnutelný. Pokud algoritmus A vstupu, na který je odpověd 1, přiřadí správnou odpověd 1 a skončí a pro vstup, na který je odpověd 0, přiřadí odpověd 0 nebo je jeho běh nekonečný, problém P označujeme jako algoritmicky částečně rozhodnutelný. V jiném případě označujeme problém jako algoritmicky nerozhodnutelný. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 8 / 49

Algoritmus 7. Řešení problému prostřednictvím algoritmu 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 = dekompozice problému. 3) Sestavení algoritmu Na základě navrhneme a sestavíme algoritmus řešící požadovaný problém. Algoritmus může být popsán v přirozeném i formálním jazyce. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 9 / 49

Algoritmus 8. Kódování, ověření, nasazení, optimalizace algoritmu 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 však není postačující k ověření funkčnosti a správnosti algoritmu. Algoritmus by měl být matematicky dokázán pro všechny možné varianty vstupních dat. 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. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 10 / 49

Znázorňování algoritmu 9. 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 nebo 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.) 11 / 49

Znázorňování algoritmu 10. Vývojové diagramy Jeden z nejčastěji používaných prostředků pro znázorňování algoritmů. Tvořeny značkami ve formě uzavřených rovinných obrazců, do kterých jsou vepisovány slovní či symbolickou formou jednotlivé operace. Tvary a velikosti značek jsou dány normami. Značky jsou spojeny přímými nebo lomenými spojnicemi čarami a znázorňují tak posloupnosti jednotlivých kroků. Čáry mohou být orientované zavedením šipek, neměly by se křížit. Pokud již ke křížení dojde, měly by být čáry zvýrazněny tak, aby bylo jednoznačně patrné, odkud a kam směřují. Vývojový diagram čteme ve směru shora dolů. Výhody: názornost, přehlednost Nevýhody: pracnost a složitost konstrukce, složité diagramy se nevejdou na jednu stránku a stávají se méně přehlednými, malé Tomáš Bayer bayertom@natur.cuni.cz ˇ (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 12 / 49

Znázorňování algoritmu 11. Komponenty vývojového diagramu Start/konec algoritmu: Počáteční a koncový krok algoritmu. Vstup/Výstup: Načtení dat potřebných pro běh programu, uložení dat. Předzpracování dat: Incializace proměnných. Zpracování dat: Dochází k transformaci dat. Jeden vstup a jeden výstup, nesmí dojít k rozvětvení programu. Rozhodovací blok: Větvení na základě vstupní podmínky. Je -li splněna, pokračuje se větví (+), v opačném případě větví (-). Podprogram: Samostatná část programu tvořená větším počtem kroků. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 13 / 49

Znázorňování algoritmu 12. Ukázky vývojových diagramů Start Read: a,b + - a<10? Konec a=a+b c=c*(d-1) Read Matrix A Print(A) a=1 Input(a) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 14 / 49

Znázorňování algoritmu 13. 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.) 15 / 49

14. Strukturogram Znázorňování algoritmu Úspornější znázornění algoritmu, kombinace grafického a textového popisu Tvořen obdélníkovou tabulkou, do řádků zapisujeme postup kroků symbolickou či slovní formou v pořadí, v jakém budou prováděny. Záhlaví tabulky obsahuje název algoritmu nebo dílčího kroku. Výhody: Přehlednější způsob znázornění. Lze ho aplikovat i na složitější problémy. Jednoznačný a snadný přepis do formálního jazyka. Nevýhody: Pracnost konstrukce, složité strukturogramy se nevejdou na jednu stránku. Malé možnosti pozdějších úprav. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 16 / 49

Znázorňování algoritmu 15. UML = Unified Modeling Language Jazyk pro vizuální návrh a popis datových struktur, programů či systémů. Umožňuje vytvářet různé typy diagramů: diagram komponent programu, diagram objektů, diagram tříd... Z těchto diagramů lze zpětně vygenerovat kostru zdrojového kódu. Výhody UML: Open-source. 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.) 17 / 49

16. Ukázka UML Znázorňování algoritmu Zdrojový kód: # Test UML Diagram [D=b*b-4*a*c]->[D>=0] [D>=0]-N>[D>0] [D>=0]-A>[Nema reseni v R] [D>0]-A>[2 ruzne koreny] [D>0]-N>[1 koren] Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 18 / 49

Znázorňování algoritmu 17. Textové vyjádření algoritmu Tento způsob vyjádření algoritmů se v současné době používá nejčastěji. Zápis algoritmu prostřednictvím formalizovaného jazyka. Využíván pesudokód nebo PDL (Program Description Language). 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.) 19 / 49

Znázorňování algoritmu 18. 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.) 20 / 49

Jazyk a jeho vlastnosti 19. Jazyky a jejich vlastnosti (úvod) Jazyky a jejich dělení: Přirozené jazyky Komunikační prostředek mezi lidmi. Skládání symbolů do vyšších celků není řízeno tak striktnějšími pravidly jako u formálních jazyků. Nevýhodou je významová nejednoznačnost některých slov (synonyma, homonyma), která omezuje jejich použití při popisu řešení 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.) 21 / 49

Jazyk a jeho vlastnosti 20. Slovo, abeceda, jazyk Pro popis algoritmů používány formální jazyky. Formální abeceda : Konečná množina elementárních symbolů (písmen, znaků) přesného významu, které lze spojovat do složitějších útvarů. Binární abeceda = {0, 1}, hexadecimální abeceda = {0,.., 9, A,..., F}, textová abeceda: ASCII, UTF. Formální slovo w nad abecedou : Konečný řetězec symbolů nad danou abecedou představovan libovolnou posloupností těchto symbolů. Má jednoznačný význam. Příklady slov: w = 010101, prázdné slovo ε. 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.) 22 / 49

Vývoj programovacích jazyků 21. 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.) 23 / 49

Vývoj programovacích jazyků 22. 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.) 24 / 49

Vývoj programovacích jazyků 23. 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.) 25 / 49

Vývoj programovacích jazyků 24. 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 (NiklausWirth, 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 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 26 / 49

Vývoj programovacích jazyků 25. 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 s evýtazně 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ě Tomáš Bayer orientovaných bayertom@natur.cuni.cz systémů. (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 27 / 49

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.) 28 / 49 Vývoj programovacích jazyků 26. 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

27. Překlad programu Překlad programu 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.) 29 / 49

28. Překlad programu Překlad programu 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.) 30 / 49

Programovací jazyky a jejich dělení 29. Paradigmata programování Paradigma: Souhrn základních domněnek, předpokladů, představ dané skupiny vědců. Souhrn způsobů formulace problémů, metodologických prostředků řešení, metodik zpracování apod. 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í: Základem algoritmus, přesně daná posloupnost kroků. Objektově orientované programování: Založeno na objektově orientovaném přístupu k problému. Deklarativní programování: Opak imperativního programování (říkáme co, ne jak) Funkcionální programování: Varianta dekalarativního programování, založeno na lambda kalkulu. Logické programování: Kombinace procedurálního / deklarativního přístupz. Paralelní programování: Pro dekomponovatelné úlohy, paralelizace Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 31 / 49

Programovací jazyky a jejich dělení 30. 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.) 32 / 49

Programovací jazyky a jejich dělení 31. 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.) 33 / 49

Programovací jazyky a jejich dělení 32. 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#. Nevýhody: Interpret výrazně pomalejší než kompilátor. 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.) 34 / 49

Programovací jazyky a jejich dělení 33. 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: Program 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.) 35 / 49

Programovací jazyky a jejich dělení 34. 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.) 36 / 49

Programovací jazyky a jejich dělení 35. 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.) 37 / 49

Zásady pro zápis zdrojového kódu 36. 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.) 38 / 49

Zásady pro zápis zdrojového kódu 37. Č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.) 39 / 49

Zásady pro zápis zdrojového kódu 38. 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.) 40 / 49

Zásady pro zápis zdrojového kódu 39. 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.) 41 / 49

Zásady pro zápis zdrojového kódu 40. 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.) 42 / 49

Zásady pro zápis zdrojového kódu 41. 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.) 43 / 49

Zásady pro zápis zdrojového kódu 42. 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.) 44 / 49

Zásady pro zápis zdrojového kódu 43. 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.) 45 / 49

Zásady pro zápis zdrojového kódu 44. 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; Zásada č. 17: Jména proměnných začínají malými písmeny. double X_Jtsk; double x_jtsk; //Spatne //Dobre //Spatne //Dobre Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Úvod geoinformatiky do programování a kartografie. Přírodovědecká fakulta UK.) 46 / 49

Zásady pro zápis zdrojového kódu 45. 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.) 47 / 49

Zásady pro zápis zdrojového kódu 46. 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.) 48 / 49

47. 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.) 49 / 49