DTP Základy programování 01 - Úvod do předmětu
Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu
Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní problém z reálného, materiálního světa nebo abstraktní problém, který je produktem lidského intelektu Algoritmus: Algoritmus je postup řešení daného problému. Postup sestává z jednotlivých dílčích kroků. Jestliže se dílčí kroky algoritmu provádějí výlučně jeden po druhém, je algoritmus sekvenční. Je-li přípustné, aby se některé kroky algoritmu prováděly současně, je algoritmus paralelní. Vlastnosti: - determinismus (je jednoznačně dáno pořadí kroků) - obecnost (je vhodný pro celou třídu problémů) - resultativnost (vede ke správnému řešení) -konečnost (konečný počet kroků)
Základní pojmy II. Datová struktura: je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (elementů) řešeného problému. Např. pro prvek student a problém studijní IS datová struktura informace o jménu, datu narození, oboru studia, výsledcích, Správnost algoritmu: je stanovení oborů hodnot proměnných a vztahů mezi proměnnými pro každý příkaz programu. Vztahy se vyjadřují tvrzeními (logickými výroky), vztahujícími se k jednotlivým místům programu a nezávislými na cestě, po níž se k danému místu postup valgoritmu dostane. (* Platí antecedence P *) S; (* Platí konsekvence Q *) Důkaz správnosti může být velmi složitý a nespadá vždy do problematiky algoritmizace (ale např. do oblasti numerické matematiky apod.)
Základní pojmy III. Složitost: Kritérium pro objektivní hodnocení dvou různých algoritmů. Nejčastěji časová a prostorová složitost jako funkce velikosti vstupních dat. Asymptotická časová složitost: - Ο(f(n)) Omikron notace Horní hranice (nejhorší případ) - Θ(f(n)) Theta notace průměrný odhad - Ω(f(n)) Omega notace Dolní hranice (nejlepší případ) Př.: O(c), O(log(n)), O(n), O(n*log(n)), O(n^2), O(n^3), O(k^n)
Programovací jazyky Programovací jazyk: prostředek pro zápis algoritmů, jež mohou být provedeny na počítači. Zápis algoritmu ve zvoleném programovacím jazyce se nazývá program. Programovací jazyk je tedy komunikačním nástrojem mezi programátorem, který v programovacím jazyce formuluje postup řešení daného problému, a počítačem, který program vykonává. Programovací jazyk je soubor pravidel pro zápis algoritmu, odborně řečeno se jedná o formální jazyk. Programovací jazyk má svoje lexikální jednotky, syntaktickou stavbu i sémantiku. V praxi existuje poměrně malý počet konceptů zahrnující stovky jazyků, které byly navrženy nebo implementovány. Nejlepší cesta jak se naučit programovací jazyk je používáním. Zkoušením využívat jazyk k řešení problémů. Psaním malých testovacích programů, na vyzkoušení si základních úloh.
Dělení programovacích jazyků Nižšíprogramovacíjazyky(low level languages): - strojový kód jediný kterému počítač přímo rozumí (je závislý na konkrétním procesoru a jeho instrukční sadě) 11001101 00100001 (0xCD 0x21) - Jazyk symbolických adres (assembly language, assembler - překladač) strojově závislý, pro programátory přístupnější, pojmenování adres a instukcí mov al, 61h Vyšší programovací jazyky zavádějí mnohem větší stupeň abstrakce a obecně nejsou přímo závislé na konkrétním procesoru (jejich překladač ano) Dělení podle způsobu překladu: - kompilované překladač (compiler) převádí zdrojový kód na strojový kód (spustitelný program), ten je pak možné na cílovém počítači přímo provádět - interpretované jazyk se nepřekládá dopředu, ale řeší se až při požadavku na spuštění (pouze se interpretují, částečně překládají do mezikódu nebo i kompletně překládají) pomalejší
Vyšší programovací jazyky I. Procedurální programovací jazyky (imperativní) sekvenční provádění instrukcí a procedur s využitím příkazů pro řízení toku programu - strukturované algoritmus je rozdělen na podproblémy implementované s využitím strukturovaných datových typů a řídících struktur (posloupnost příkazů, větvení, cykly) Např. C, Pascal -objektově-orientované programování (OOP) založeno na objektech (data + metody) a vztazích mezi nimi. Definovány jako třídy, kdy objekt je její instancí. Vlastnosti: Abstrakce, zapouzdření, dědičnost, polymorfismus. Objektově orientovaný přístup zahrnuje i metody analýzy a návrhu programu Kromě čistě OO jazyků (např. Smalltalk) je většinou možné využít i klasického (strukturovaného) přístupu (C++)
Vyšší programovací jazyky II. Funkcionální programovací jazyky řeší algoritmů vyhodnocováním nebo aplikací funkcí na známé hodnoty. Celý program je chápán jako funkce a výsledek je výraz v normální formě. Základem je výpočtový model - λ-kalkul. Př. LISP (list processing) Logické programovací jazyky program se skládá z množiny tvrzení a jejich odvozování a dokazování. Např. PROLOG (založen na predikátové logice 1. řádu)
Prostředky strukturovaných programovací jazyků I. Proměnné a konstanty slouží k práci s hodnotami. Mají svůj datový typ a svoji identifikaci. Datový typ - říká druh možných dat (obor hodnot) a přípustné operátory. - jednoduché (int, char, ) - složené (array, string, ) Př.: int cislo; Operátory určuje jaká operace se bude provádět (+, -, *, &&, ) Výraz skládáse z proměnných konstant a operátorů (a+b, cislo1 < cislo2, ) Příkaz proveditelný výraz (vracející hodnotu) Např.: vysledek = cislo1 + cislo2;
Prostředky strukturovaných programovací jazyků II. Větvení v závislosti na podmínce (vyhodnocení výrazu) dojde odlišnému provádění dalších příkazů Př.: if (a>5) příkaz1; else příkaz2; Cykly provádění části kódů opakovaně (většinou se změněnými hodnotami proměnných) Př.: while (c>='0' && c<='9') { } Funkce: - standardní které nabízí sám jazyk ( printf( Hello ); ) - uživatelské definované programátorem Funkce jsou zaváděny k přehlednějšímu strukturovanému kódu (jedná se prostě o uzavřený celek kódu k určitému účelu) a umožňují opakované volání s různými parametry (jejich počet a typ musí souhlasit při deklaraci funkce i jejím volání) Např.: int secti(int a, int b) { return (a+b); } vysledek = secti(5,8);
Příklad programovacích jazyků C: #include <stdio.h> int main(void) { printf( Hello, World\n ); return 0; } C (jinak): #include <stdio.h> void main() { char* msg="hello World!"; puts(msg); } PASCAL program Hello(Output); begin Writeln( Hello World ); End. C++: #include <string.h> #include <stdio.h> class Message { private: char msg[50]; public: Message(char* s) {strcpy(msg,s);}; void print() {puts(msg);}; }; void main() { m = new Message("Hello World!"); m->print(); delete m; } C++ (neobjektová varianta) #include <iostream> #include <string> using namespace std; int main() { string msg("hello World!"); cout << msg; return 0; } LISP: ( (setq msg "Hello World") (print 'msg)) PROLOG: Message is "Hello World" Message?
Zásady psaní programů Vhodně pojmenovávat identifikátory Vhodně strukturovat kód (používání uživatelských funkcí apod.) Přehledně upravovat zdrojový kód (odsazování apod.) Psát komentáře!
Překlad Řádkovým příkazem: Q:\gcc.exe hello.c -o hello.exe -std=c99 -Wall - pedantic W Q:\hello.exe Pomocí makefile (textový soubor s příkazy a parametry překladu, překlad se pak volá příkazem make ) Pomocí IDE (Integrated development environment) vývojové prostředí s možnostmi překladu a ladění programů
Vývojová prostředí I. III.
Vývojová prostředí II.
KONEC Děkuji za pozornost DOTAZY? Příště