NPRG031 Programování II 1 / :47:55

Podobné dokumenty
URČITÝM ZPŮSOBEM PODOBNÉ

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

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

Zápis programu v jazyce C#

Objektově orientované programování

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

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

NPRG031 Programování II 1 / :25:46

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

NMIN201 Objektově orientované programování 1 / :36:09

Jazyk C# a platforma.net

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

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

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

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

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

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

Úvod do programovacích jazyků (Java)

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

Programovací jazyk Pascal

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

PREPROCESOR POKRAČOVÁNÍ

Algoritmizace a programování

Generické programování

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

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Programování v Javě I. Únor 2009

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Řídicí struktury. alg3 1

Programování v Javě I. Leden 2008

Seminář Java II p.1/43

Ukazka knihy z internetoveho knihkupectvi

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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

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

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

Algoritmizace a programování

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Prezentace a vysvětlení programového prostředí NXC

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Základy programování (IZP)

PŘETĚŽOVÁNÍ OPERÁTORŮ

ADT/ADS = abstraktní datové typy / struktury

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Výrazy, operace, příkazy

Opakování programování

Úvod do programování. Lekce 1

Algoritmizace a programování

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

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.

Algoritmizace a programování

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

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

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

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

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

KTE / ZPE Informační technologie

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Výčtový typ strana 67

7. Datové typy v Javě

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

Jazyk C# (seminář 6)

Základy C++ I. Jan Hnilica Počítačové modelování 18

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

Základy objektové orientace I. Únor 2010

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

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

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

2 Datové typy v jazyce C

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

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

Proměnné a datové typy

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

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

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

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Programovací jazyk C++ Hodina 1

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

C# konzole Podíl dvou čísel, podmínka IF

Teoretické minimum z PJV

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

Úvod do programovacích jazyků (Java)

IRAE 07/08 Přednáška č. 1

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Více o konstruktorech a destruktorech

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

IUJCE 07/08 Přednáška č. 1

Data, výrazy, příkazy

Z. Kotala, P. Toman: Java ( Obsah )

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Odvozené a strukturované typy dat

Výrazy, operace, příkazy

Jazyk C++, některá rozšíření oproti C

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

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Transkript:

NPRG031 Programování II 1 / 43 23. 2. 2016 11:47:55

Objekty Svět se skládá z objektů! Objekt = data + funkce (metody) konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty URČITÝM ZPŮSOBEM PODOBNÉ můžeme považovat za instance jedné třídy (pes). NPRG031 Programování II 2 / 43 23. 2. 2016 11:47:55

Objekty Další pokus oddělit CO x JAK VENKU x UVNITŘ INTERFACE x IMPLEMENTACE Strukturované programování blok, funkce Modulární programování modul, unit Objektové programování objekt a třída NPRG031 Programování II 3 / 43 23. 2. 2016 11:47:55

Objekty v programu Způsob jak izolovat část kódu (příkaz-blok-procedura-modul-objekt). Způsob jak uvažovat o problému Objekt sdružuje DATA (datové složky, vlastnosti) i KÓD (funkce+procedury=metody) = ČLENY (members) OBJEKT = exemplář, instance TŘÍDY. Zapouzdření ukrývání vnitřku, díky tomu konsistentní stav NPRG031 Programování II 4 / 43 23. 2. 2016 11:47:55

Příklad: Napište program, který čte ze vstupu slova a tiskne je na řádky dané délky. NPRG031 Programování II 5 / 43 23. 2. 2016 11:47:55

Jazyk C# * C# - Java 1995, bytecode - C# 2002,.NET - Anders Hejlsberg * Microsoft Visual Studio, Expres verse zdarma * Projekt MONO (Linux) NPRG031 Programování II 6 / 43 23. 2. 2016 11:47:55

Přechod od Pascalu k jazyku C# Používání mezer a řádkování - volné, stejně jako v Pascalu - doporučená a prostředím podporovaná indentace NPRG031 Programování II 7 / 43 23. 2. 2016 11:47:55

Identifikátory - case-sensitivní - možnost používat diakritiku - klíčová slova malými písmeny - konvence (zvyklosti): - proměnné malými písmeny, konstanty velkými písmeny - jména prostorů*), tříd, metod a vlastností, veřejné členy -> PascalskáNotace např. Math, DivideByZeroException, Main, WriteLine - soukromé metody začínají malým písmenem -> velbloudínotace NPRG031 Programování II 8 / 43 23. 2. 2016 11:47:55

Struktura programu Celý program se skládá ze tříd, vše se deklaruje a používá uvnitř tříd (proměnné, konstanty, funkce, ). Položky deklarované ve třídě: datové složky třídy = členské proměnné metody = členské funkce Prozatím: celý program je tvořen jedinou statickou*) metodou (její obsah tedy odpovídá celému programu) Někdy příště: jak jinak to může vypadat se třídami NPRG031 Programování II 9 / 43 23. 2. 2016 11:47:55

Proměnné - zápis deklarace syntaxe: int alfa; - umístění deklarace: BUĎ členská proměnná třídy (tzn. datová složka objektu) NEBO lokální kdekoliv ve funkci, ale nesmí zakrýt jinou stejnojmennou deklaraci uvedenou v téže funkci (pozor na kolize!) - lokální platnost deklarace v bloku, kde je uvedena - možnost inicializace v rámci deklarace: int alfa = 15; - v programu nelze použít nedefinovanou hodnotu proměnné (kontrola při překladu) - hodnotové a referenční typy - všechno*) je objekt (instance nějaké třídy) NPRG031 Programování II 10 / 43 23. 2. 2016 11:47:55

Konstanty - syntaxe jako inicializované proměnné, specifikátor const: const int ALFA = 15; - číselné konstanty podobné jako v Pascalu (různé typy) - konstanty typu char v apostrofech: 'a', typu string v uvozovkách: "aaa" NPRG031 Programování II 11 / 43 23. 2. 2016 11:47:55

Typy Hodnotové celé číslo int System.Int32 32 bitů další typy: byte, sbyte, short, ushort, uint, long, ulong desetinné číslo double System.Double 64 bitů další typy: float, decimal logická hodnota bool znak char System.Char 16 bitů Unicode výčtový typ enum struktura struct NPRG031 Programování II 12 / 43 23. 2. 2016 11:47:55

Referenční pole [ ] System.Array znakový řetězec string System.String třída class (standardní třídy, např. ArrayList, StringBuilder, List<>) NPRG031 Programování II 13 / 43 23. 2. 2016 11:47:55

Aritmetické výrazy - obvyklé symboly operací i priority stejné jako v Pascalu + - * / - POZOR: symbol / představuje reálné i celočíselné dělení (zvolí se podle typu argumentů) = zdroj chyb! - znak % pro modulo (zbytek po celočíselném dělení) - klíčová slova checked, unchecked určení, zda se má kontrolovat aritmetické přetečení v celočíselné aritmetice - použití jako checked(výraz) nebo checked{blok} - standardní matematické funkce = statické*) metody třídy Math NPRG031 Programování II 14 / 43 23. 2. 2016 11:47:55

Středník - ukončuje každý příkaz (musí být i za posledním příkazem bloku!) - nesmí být za blokem ani za hlavičkou funkce - odděluje sekce v hlavičce for-cyklu Čárka - odděluje deklarace více proměnných téhož typu - odděluje parametry v deklaraci funkce i při volání funkce - odděluje indexy u vícerozměrného pole NPRG031 Programování II 15 / 43 23. 2. 2016 11:47:55

Komentáře - jednořádkové // xxx do konce řádku - víceřádkové /* xxx */ - dokumentační /// Blok (složený příkaz) - závorky { } místo pascalského begin end Dosazovací příkaz - syntaxe: proměnná = výraz např. i = 2*i + 10; NPRG031 Programování II 16 / 43 23. 2. 2016 11:47:55

Příkaz modifikace hodnoty i++; ++i; i--; --i; i += 10; i -= 10; i *= 10; i /= 10; i %= 10; NPRG031 Programování II 17 / 43 23. 2. 2016 11:47:55

Podmíněný příkaz - podmínka = výraz typu bool v závorkách if (a == 5) b = 17; if (a == 5) b = 17; else b = 18; - relační operátory: ==!= < > <= >= - logické spojky && and (zkrácené vyhodnocování) or (zkrácené vyhodnocování) & and (úplné vyhodnocování) or (úplné vyhodnocování)! not ^ xor NPRG031 Programování II 18 / 43 23. 2. 2016 11:47:55

For-cyklus - syntaxe: for (inicializace; podmínka pokračování; příkaz iterace) příkaz těla for (int i=0; i<n; i++) a[i] = 3*i+1; - některá sekce může být prázdná (třeba i všechny) (pokud víc příkazů, oddělují se čárkou) NPRG031 Programování II 19 / 43 23. 2. 2016 11:47:55

Cykly while a do-while - cyklus while stejný jako while-cyklus v Pascalu (podmínka je opět celá v závorce a nepíše se do ) while (podmínka) příkaz; - cyklus do-while má podmínku na konci jako cyklus repeat-until v Pascalu, ale význam podmínky je proti Pascalu obrácený, tzn. dokud podmínka platí, cyklus se provádí do příkaz while (podmínka); - více příkazů v těle cyklu musí být uzavřeno v bloku { } NPRG031 Programování II 20 / 43 23. 2. 2016 11:47:55

Ukončení cyklu - příkazy break; continue; - stejný význam jako v Pascalu NPRG031 Programování II 21 / 43 23. 2. 2016 11:47:55

Příkaz switch - analogie pascalského příkazu case - varianta se může rozhodovat podle výrazu celočíselného, podle znaku nebo také stringu - sekce case, za každým case jediná konstanta, ale pro více case může být společný blok příkazů - poslední sekce může být default: - je povinnost ukončit každou sekci case (i sekci default, neboť ta nemusí být uvedena poslední) příkazem break, příp. return nebo goto (pozor: v C, C++, Java se může propadat mezi sekcemi = zdroj chyb) NPRG031 Programování II 22 / 43 23. 2. 2016 11:47:55

int j, i =...; switch (i) { case 1: i++; break; case 2: case 3: i--; break; default: i=20; j=7; break; } NPRG031 Programování II 23 / 43 23. 2. 2016 11:47:55

Funkce - pascalské procedury a funkce -> metody (členské funkce) nějaké třídy - procedura -> funkce typu void - v deklaraci i při volání vždy píšeme ( ), i když nemá žádné parametry - ve funkci nelze lokálně definovat jinou funkci, strukturu nebo třídu, lze tam ale deklarovat lokální proměnné (ve třídě lze deklarovat jinou třídu ta může mít své metody) NPRG031 Programování II 24 / 43 23. 2. 2016 11:47:55

Funkce... - mohou vracet i složitější typy - return <hodnota>; definování návratové hodnoty a ukončení funkce v případě funkcí typu void pouze return; - předávání parametrů: standardně hodnotou odkazem specifikátor ref v hlavičce i při volání *) výstupní parametr specifikátor out v hlavičce i při volání (out je také odkazem, nemá ale vstupní hodnotu) NPRG031 Programování II 25 / 43 23. 2. 2016 11:47:55

Výchozí metoda Main() - plní funkci hlavního programu (určuje začátek a konec výpočtu) - je to statická*) metoda nějaké třídy (nic mimo třídy neexistuje), často se pro ni vytváří samostatná třída - obvykle jediná v aplikaci je tak jednoznačně určeno, kde má začít výpočet - může jich být i více, pak se ale při kompilaci musí přepínačem specifikovat, ze které třídy se má použít Main() při spuštění programu - syntaxe: static void Main(string[] args) NPRG031 Programování II 26 / 43 23. 2. 2016 11:47:55

Standardní vstup a výstup Console.Read(); vrací int = jeden znak ze vstupu (jeho kód) Console.ReadLine(); vrací string = jeden řádek ze vstupu Console.Write(výraz); vypíše hodnotu zadaného výrazu Console.WriteLine(výraz); vypíše hodnotu zadaného výrazu a odřádkuje NPRG031 Programování II 27 / 43 23. 2. 2016 11:47:55

Formátovaný výstup Console.WriteLine(string); do stringu se dosadí hodnoty výrazů po řadě na místa vyznačená pomocí {0}, {1}, {2}, atd., případně i s požadovaným formátováním {0:N} Console.WriteLine( "x0={0} x1={1} x2={2}...a to je vše", x0, x1, x2 ); NPRG031 Programování II 28 / 43 23. 2. 2016 11:47:55

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { XXXXXXXXXXXXXXXXXXXX } } } NPRG031 Programování II 29 / 43 23. 2. 2016 11:47:55

Příklad: Eukleidův algoritmus static void Main(string[] args) { Console.WriteLine( "Zadej dvě kladná celá čísla:"); int a = int.parse(console.readline()); int b = int.parse(console.readline()); while (a!= b) { if (a > b) a -= b; else b -= a; } Console.WriteLine( "Nejv. spol. dělitel: {0}", a); Console.ReadLine(); } NPRG031 Programování II 30 / 43 23. 2. 2016 11:47:55

Příklady: Prvočíselný rozklad Hornerovo schéma vstup čísla po znacích NPRG031 Programování II 31 / 43 23. 2. 2016 11:47:55

static void Main(string[] args) { int v; int c; c = Console.Read(); // preskocit ne-cislice: while ((c < '0') (c > '9')) { c = Console.Read(); } // nacitat cislice: v = 0; while ((c >= '0') && (c <= '9')) { v = 10 * v + (c - '0'); c = Console.Read(); } Console.WriteLine(v); Console.ReadLine(); } NPRG031 Programování II 32 / 43 23. 2. 2016 11:47:55

Dynamicky alokované proměnné - vytvářejí se pomocí zápisu new + konstruktor*) vytvářeného objektu - new je funkce, vrací vytvořenou instanci (ve skutečnosti ukazatel na ni) - v odkazech se nepíšou ^ - string, pole, třídy referenční typy - konstanta null (jako NIL v Pascalu) - automatická správa paměti nedostupné objekty jsou automaticky uvolněny z paměti (ne nutně úplně okamžitě, až to bude potřeba) NPRG031 Programování II 33 / 43 23. 2. 2016 11:47:55

Příklad prvni = null; // to je korektní zrušení celého spojového seznamu class Uzel { public int info; public Uzel dalsi; } class Program { static void Main(string[] args) { Uzel prvni = new Uzel(); prvni.info = 123; prvni.dalsi = null; //... } } NPRG031 Programování II 34 / 43 23. 2. 2016 11:47:55

Pole - deklarace: int[] aaa; - referenční typ, je nutné vytvořit pomocí new: int[] aaa = new int[10]; - každé pole je instancí třídy odvozené*) z abstraktní statické třídy System.Array - indexování vždy od 0 - možnost inicializace: int[] aaa = new int[3] { 2, 6, 8 }; int[] aaa = { 2, 6, 8 }; - počet prvků: aaa.length vždy se provádějí kontroly přetečení mezí při indexování aaa[i] NPRG031 Programování II 35 / 43 23. 2. 2016 11:47:55

POZOR! static void Main(string[] args) { int[] aaa = { 2, 6, 8 }; int[] bbb; bbb = aaa; aaa[0] = 27; } Console.WriteLine(bbb[0]); dosazuje se ukazatel!! NPRG031 Programování II 36 / 43 23. 2. 2016 11:47:55

Pole... - připravené metody, např. CopyTo, Sort, Reverse, BinarySearch, Array.Reverse(aaa); - vícerozměrné pole obdélníkové [,] a nepravidelné [][] Nepravidelné dvourozměrné pole je ve skutečnosti pole polí (tzn. pole ukazatelů na řádky, což jsou pole jednorozměrná), - každý řádek je třeba zvlášť vytvořit pomocí new - řádky mohou mít různou délku int[][] aaa = new int[3][]; aaa[0] = new int[4]; aaa[1] = new int[6]; aaa[2] = new int[2]; NPRG031 Programování II 37 / 43 23. 2. 2016 11:47:55

Příklad: Třídění čísel v poli - přímý výběr static void Main(string[] args) { Console.Write("Počet čísel: "); int pocet = int.parse(console.readline()); int[] a; a = new int[pocet]; int i = 0; while (i < a.length) a[i++] = int.parse(console.readline()); i = 0; while (i < a.length) { int k = i; int j = i+1; while (j < a.length) { NPRG031 Programování II 38 / 43 23. 2. 2016 11:47:55

} if (a[j] < a[k]) k = j; j++; } if (k!= i) { int x = a[i]; a[i] = a[k]; a[k] = x; } i++; } i = 0; while (i < a.length) Console.Write(" {0}", a[i++]); Console.WriteLine(); NPRG031 Programování II 39 / 43 23. 2. 2016 11:47:55

Znakový řetězec - deklarace: string sss; - typ string referenční typ, alias pro třídu System.String - vytvoření instance: string sss = "abcdefg"; - nulou ukončené řetězce, nemají omezenou délku - indexování znaků od 0 - délka = sss.length() - obsah nelze měnit (na to je třída StringBuilder) - všechny třídy mají konverzní metodu ToString(), pro struktury a objekty je vhodné předefinovat ji (jinak se vypisuje jenom jejich jméno) NPRG031 Programování II 40 / 43 23. 2. 2016 11:47:55

Struktura struct - zjednodušená třída - má podobný význam a použití jako pascalský záznam (record) - navíc může mít metody (jako třída) - může mít i konstruktor (vlastní konstruktor musí inicializovat všechny datové složky, jinak má i implicitní bezparametrický konstruktor) - je to hodnotový typ (na rozdíl od instance třídy se nemusí alokovat) - některá omezení oproti třídám (např. nemůže dědit) NPRG031 Programování II 41 / 43 23. 2. 2016 11:47:55

struct Bod { public int x, y; public Bod(int x, int y) { this.x = x; this.y = y; } } NPRG031 Programování II 42 / 43 23. 2. 2016 11:47:55

NPRG031 Programování II 43 / 43 23. 2. 2016 11:47:55