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



Podobné dokumenty
Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Úvod do programování - Java. Cvičení č.4

Algoritmizace a programování

Lineární datové struktury

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

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

Lineární datové struktury

Úvod do programovacích jazyků (Java)

Programovací jazyk Pascal

Základní datové struktury

Paměť počítače. alg2 1

Úvod do programovacích jazyků (Java)

Programování v C++ 2, 4. cvičení

Datové struktury. alg12 1

Kolekce, cyklus foreach

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

ADT/ADS = abstraktní datové typy / struktury

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

Abstraktní datové typy: zásobník

Zápis programu v jazyce C#

Řídicí struktury. alg3 1

Abstraktní datové typy

6 Příkazy řízení toku

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

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

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

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

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

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

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Algoritmizace a programování

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Algoritmizace a programování

5 Přehled operátorů, příkazy, přetypování

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Základy algoritmizace a programování

Opakování programování

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

5 Rekurze a zásobník. Rekurzivní volání metody

Výrazy, operace, příkazy

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Objektově orientované programování

7. Datové typy v Javě

Zadání k 2. programovacímu testu

Konstruktory a destruktory

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

6. Příkazy a řídící struktury v Javě

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

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

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Algoritmizace a programování

Úvod do programování. Lekce 1

Data, výrazy, příkazy

Programování v C++, 2. cvičení

Maturitní téma: Programovací jazyk JAVA

Datové typy a struktury

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

Jazyk C# a platforma.net

Spojová implementace lineárních datových struktur

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

Základy algoritmizace a programování

Pole a kolekce. v C#, Javě a C++

Sada 1 - Základy programování

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

Základy programování (IZP)

Programování v C++ 1, 5. cvičení

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

TÉMATICKÝ OKRUH TZD, DIS a TIS

Funkce, intuitivní chápání složitosti

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Úvod do programování - Java

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

Paralelní programování

Sada 1 - Základy programování

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Programování v C++ 1, 1. cvičení

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

Výčtový typ strana 67

Šablony, kontejnery a iterátory

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Generické programování

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

Transkript:

Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou činnost (může jím být stroj (počítač) nebo člověk). Formulace algoritmu souvisí s tím, pro jaký typ procesoru se bude vytvářet. Etapy řešení problému specifikace (definice) problému vstupy a požadavky na výstupy, analýza problému volba vhodné metody řešení, sestavení algoritmu posloupnost na sebe navazujících kroků (řídící struktury), kódování zápis algoritmu v jazyce procesoru, testování ověření správnosti navrženého algoritmu. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 1/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 2/34 Zápis algoritmu přirozený jazyk (slovní popis), grafické znázornění (např. vývojový diagram), speciální jazyk (pseudojazyk), programovací jazyk. Datový typ Určuje jakých hodnot může nabývat objekt daného datového typu a množinu přípustných operací nad tímto datovým typem. Datovým objektem rozumíme konstantu, proměnnou, výraz a funkci. Identifikátory Identifikátory jsou jména, která dáváme např. konstantám, proměnným, funkcím. Tato jména mohou být tvořena písmeny anglické abecedy, číslicemi a znakem podtržítko. int cislo; float fcislo; Point bod; bod.setcoordinate(0, 0.5); c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 3/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 4/34 Výraz Konstanta Nemění hodnotu během řešení problému. Použití: přímé 63, 10 2, ABC, pojmenování označení identifikátorem. final double pi = 3.14; // Java const double pi = 3.14; // C++ pi = 4.8; // error Proměnná Veličina, která může měnit hodnotu během řešení problému. Proměnná se zavádí definicí. int cislo = 2; cislo += 3; c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 5/34 Výraz je tvořen operátory, operandy a speciálními znaky. Operandem může být: konstanta, proměnná, výraz, volání funkce, operátor a příslušné operandy, popřípadě závorky. 12 "abc" a b sin(0.5) 12+9*3 (a+b)/2 a>=c ((a + b) * (c / d)) / 3 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 6/34

Strukturované řídící struktury - sekvence, posloupnost Příkazy (řídící struktury) popisují jednotlivé kroky algoritmu a jejich návaznosti. Rozlišujeme jednoduché a strukturované y. Celý algoritmus lze chápat jako jeden. (Pozn. pro zápis algoritmu v některém programovacím jazyce zpravidla platí, že z výrazu se stane teprve tehdy, až za něj vložíme středník.) Jednoduché y Mezi jednoduché y patří prázdný a volání funkce. Posloupnost je tvořena posloupností jednoho nebo více ů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení předchozího u. int cislo = 1; cislo += 1; System.out.println(cislo); // Java printf("%d\n", cislo); // C/C++ c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 7/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 8/34 Strukturované řídící struktury - Větvení Strukturované řídící struktury - Switch Provedení dalšího u závisí na splnění podmínky, tedy podmíněný určí, který z ů bude vykonán v závislosti na splnění či nesplnění podmínky. if (výraz) 1 else 2 bool flag = true; int cislo = 10; if (!flag) cislo = 100; int cislo = 2; if (cislo == 1) 1 else 2 switch (integral-selector) case integral-value1: break; case integral-value2: break;... default: int b = 1; switch (b) case 1: break; default: c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 9/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 10/34 Strukturované řídící struktury - Cyklus Cyklus je část algoritmu, která je opakovaně prováděna za splnění řídící podmínky. Opakující se (y) nazýváme tělo cyklu. Rozlišujeme dva typy cyklů: indukční - řídící podmínka cyklu určuje, zda bude provedena posloupnost ů, která tvoří tělo cyklu, nebo dojde k předání řízení za tělo cyklu, iterační -počet opakování těla cyklu závisí na hodnotě řídící proměnné. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 11/34 Strukturované řídící struktury - Cyklus Druhy cyklů cyklus s podmínkou před vykonáním těla cyklu while(výraz) Tělo cyklu se tedy nemusí vykonat ani jednou. cyklus s podmínkou za tělem cyklu do while(výraz) Tělo cyklu se provede minimálně jednou. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 12/34

Strukturované řídící struktury - Cyklus Algebraické struktury 1/2 cyklus s pevným počtem opakování for (výraz1; výraz2; výraz3) for (int i=0,c=3 ; i < 10 ; i++) System.out.println(i+" "+c); for ( ; ; ) Abstrakce datových typů množina a operace. Grupoid (G, ) G= G, G je grupoid, pokud množina H G je uzavřená (vzhledem k operaci G ): a, b H : G b H (1, 2, 3, +) c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 13/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 14/34 Algebraické struktury 2/2 Klasifikace: asociativita: a, b, c G : a (b c) =(a b) c pologrupa neutrální prvek: n G tak, že a G : n a = a monoid inverzní prvek: g G g 1 G tak, že g 1 g = n grupa komutativita: a, b G : a b = b a komutativní grupa (Z, +), (Q, +), (R, +) a (C, +) komutativní grupy. (Z, ) není grupa. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 15/34 Datový typ (DT) určuje množinu hodnot, kterých může nabýt konstanta, proměnná, funkce nebo výraz a množinu operací nad těmito hodnotami. Deklarací určujeme typ objektu. Informace o typu je překladačem používána při typové kontrole, typových konverzích, atd. V místě definice definujeme hodnotu proměnné či posloupnost ů funkce. int cislo; cislo = 5; int value = cislo + 10; c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 16/34 Jednoduché datové typy Strukturované datové typy Logický typ (Boolean) hodnoty: true, false. Operace: negace, konjunkce, disjunkce. boolean flag = true; Číselné datové typy celé číslo, reálné číslo (rozsah, přesnost). Operace: +,-,/,... short value = 32; double realv = 0.5; Znak každému znaku je přiřazena celočíselná hodnota, tzv. kód znaku (ASCII, Unicode,...). char ch = A ; System.out.println("cislo: " + value); c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 17/34 Pole posloupnost prvků stejného DT. int []array = new int[100]; Struktura je tvořena několika položkami. typedef struct // C++ double x; double y; Point2D; Uživatelem definované datové typy např. třídy v OO programovacích jazycích. Ukazatel (pointer) adresa v paměti obsahující hodnotu nějakého datového typu. Point point = new Point(); // Java Point point; Point* ppoint = &point; // C++ c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 18/34

Množiny Uspořádané množiny Množina skupina objektů. Množinu budeme považovat za určenou, je-li možno o každém objektu rozhodnout, zda do množiny patří či nikoliv, tj. zda je či není jejím prvkem, x M. Operace s množinami:,,... n-ární Relace Libovolná podmnožina kartézského součinu množin A 1, A 2,...,A n. R A 1 A 2... A n Binární relace: R A A, R A n A = a, b, A A = a, a a, b, b, a, b, b c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 19/34 Množina M se nazývá uspořádaná množina, jestliže je na ní definována binární relace : x : x x x, y : je-li x y a y x potom x = y x, y, z : x y a y z potom x z Jestliže pro každé x, y A platí x y nebo y x potom uspořádání nazýváme lineární uspořádání. A = 1, 2, 3, = 1, 1 1, 2, 1, 3, 2, 2... c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 20/34 Datové struktury Datová struktura - implementace množiny, často dynamická. lineární (pole, zásobník,...), nelineární (stromy). Algoritmy pracují s množinami pomocí různých operací. Aplikace Vyhledávací algoritmy. Relační model SŘBD. Vyhledávání multimediálních dat (texty, obrázky,...). Pole Zásobník Fronta Seznam c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 21/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 22/34 Pole Pole vyhledávání v nesetříděném poli 1/3 Pole (array) patří k nejjednodušším datovým strukturám. Přístup k prvkům pole je určen udáním hodnoty indexu a není závislý na přístupu k jinému prvku. Proto říkáme, že pole je strukturou s přímým nebo náhodným přístupem. Pole statické/dynamické. Sekvenční průchod. O(n). public class Array int mdata[]; public Array(int size) mdata = new int[size]; for (int i = 0 ; i < mdata.length ; i++) mdata[i] = (int)(math.random() * size); c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 23/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 24/34

Pole vyhledávání v nesetříděném poli 2/3 public int Find(int value) for (int i = 0 ; i < mdata.length ; i++) if (mdata[i] == value) return i; return -1; Pole vyhledávání v nesetříděném poli 3/3 public static void main(string[] args) Array pole = new Array(100); int order = pole.find(25); System.out.println(order); Algoritmus potřebuje v nejhorším případě n porovnání. Průměrný počet porovnání za předpokladu, že pravděpodobnost výskytu libovolného prvku množiny je stejná. C avg =(1 + 2 + + n) 1 n = 1 2 (1 + n)n 1 n = (1 + n) 2 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 25/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 26/34 Pole problémy Zásobník (Stack) Dynamické pole. Vyhledávání v setříděném poli - složitost O(log n). Perzistentní pole. U zásobníku je uplatněn princip last-in, first out (LIFO). Tj. prvek, který byl vložen poslední, je jako první ze zásobníku vyzvednut. Ukazatel na aktuální prvek v zásobníku (posledně vložený) se nazývá vrchol zásobníku (stack pointer). Opakem je dno zásobníku. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 27/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 28/34 Zásobník operace Zásobník operace Push vložení prvku na vrchol zásobníku. Pop vyjmutí prvku z vrcholu zásobníku. Empty test prázdnosti zásobníku. Top vrátí prvek z vrcholu zásobníku bez jeho vyjmutí. Pokud provedeme operaci Pop na prázdném zásobníku nastává tzv. podtečení (underflow). Pokud není možné přidat další prvek, nastává tzv. přetečení (overflow). Operace mají konstantní časovou složitost. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 29/34 a) Push(15); Push(6); Push(2); Push(9); b) Push(17); Push(3); c) Pop(); c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 30/34

Zásobník implementace pomocí pole 1/3 public class Stack int mdata[]; int mstackpointer; public Stack(int capacity) mdata = new int[capacity]; mstackpointer = -1; c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 31/34 Zásobník implementace pomocí pole 2/3 public boolean Push(int value) boolean ret = false; if (mstackpointer < mdata.length-1) mdata[++mstackpointer] = value; ret = true; return ret; public int Pop() if (mstackpointer >= 0) return mdata[mstackpointer--]; return -1; c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 32/34 Zásobník implementace pomocí pole 3/3 Zásobník Stack stack = new Stack(10); for (int i = 0 ; i < 12 ; i++) System.out.print(stack.Push(i) + ", "); System.out.println(); for (int i = 0 ; i < 12 ; i++) System.out.print(stack.Pop() + ", "); System.out.println(); Výstup: true, true, true, true, true, true, true, true, true, true, false, false, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -1, Problémy Implementace pomocí seznamu a fronty. Dynamický zásobník. Perzistentní zásobník. Aplikace Překladače (závorkované výrazy, zásobníkové automaty). Uložení parametrů volaných funkcí. c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 33/34 c 2005 Michal Krátký, Jiří Dvorský Úvod do programování 34/34