Jazyk C# (seminář 3)

Podobné dokumenty
Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Jazyk C# (seminář 6)

Jazyk C# (seminář 5)

Kolekce, cyklus foreach

Jazyk C# (seminář 3)

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

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

Simulace. Martin Pergel

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Zápis programu v jazyce C#

Úvod do programovacích jazyků (Java)

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

Generické programování

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

IRAE 07/08 Přednáška č. 7. Začátek (head)

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

Výčtový typ strana 67

Jazyk C# a platforma.net

typová konverze typová inference

Abstraktní třída a rozhraní

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Používáme pole a kolekce

Abstraktní datové typy: zásobník

Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015. poslední přednáška a materiál k samostudiu

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

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

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

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

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

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

Iterator & for cyklus

Programování v jazyce Java. Tomáš Pitner, upravil Marek Šabo

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

7. Dynamické datové struktury

Bázové třídy platformy.net

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

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

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

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

Da D to t v o é v ty t py IB111: Datové typy

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

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

Pavel Procházka. 3. prosince 2014

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

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

UJO Framework. revoluční architektura beans. verze

Seminář Java IV p.1/38

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

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

Datové struktury. alg12 1

boolean hasnext() Object next() void remove() Kolekce

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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

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

PB161 Programování v jazyce C++ Přednáška 10

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

POLE. - datová struktura ze složek stejného typu, ke kterým se přistupuje pomocí indexů

Jazyk C++ I. Polymorfismus

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

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.

URČITÝM ZPŮSOBEM PODOBNÉ

Funkční objekty v C++.

Základy programování (IZP)

Abstraktní datové typy

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

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

Java a XML. 10/26/09 1/7 Java a XML

Konstruktory a destruktory

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

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

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

Část I Spojové struktury

Java - řazení objektů

ADT/ADS = abstraktní datové typy / struktury

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

Nové prvky v C# 3.0. David Keprt

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

Lekce 2. Řetězce a práce s nimi. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2016

Java Enum Java, zimní semestr ,2017 1

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Textové soubory. alg9 1

Distribuované systémy a výpočty

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Šablony, kontejnery a iterátory

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Reaktivní programování v.net

Transkript:

Jazyk C# (seminář 3) Pavel Procházka KMI 15. října 2014

Motivace Představme si problém, jak napsat seznam v C# class IntList{... int value; public void IntList( int val, List next ){... V čem je to nevýhodné?

Řešení číslo 1 Můžeme to vyřešit pomocí vestavěné třídy object (od té ve skutečnosti dědí implicitně všechny třídy). class GeneralList{... object value; public void GeneralList( object val, List next ){... Jaká je nevýhoda tohoto řešení? (Nápověda: Typy)

Řešení generikami Typ, který má nést seznam specifikujeme pomocí dodatečného argumentu. class List<T>{ public T list_value; public List <T> next; public List ( T v, List <T> next ){ list_value = v; this.next = next;... List <int> l = new List<int>( 6, new List<int> ( 7, null ));

Syntaxe generik ve zkratce Tam, kde se díváme na generický typ jako na argument, tam dáváme <,> Pokud ten typ potřebujeme použít k vytvoření proměnné nebo jako argument, pak zobáčky nedáváme Nevýhoda (a současně výhoda) generik je ta, že do datové struktury můžeme ukládat pouze objekty stejného typu.

Pole v C# Syntaxi už známe Rozlišujeme jednorozměrná pole, vícerozměrná pole a jagged pole Pole je jenom implementovaný interface IEnumerable Pole je objekt a má mnoho zajímavých metod a veřejných členských proměnných prostudujte si je, například Length, Clone, CopyTo apod.

Kolekce Je to interface, který slouží k tomu, že na libovolný objekty, který implementuje kolekci, lze použít foreach Podívejte se, jak se tento interface implementuje http://msdn.microsoft.com/cs-cz/library/system. collections.ienumerable(v=vs.110).aspx Všimněte si metody GetEnumerator speciální metoda, která vrací postupně položky datové struktury Tato metoda slouží pro foreach GetEnumerator často používá klíčové slovo yield return, což je return, který si ale pamatuje stav funkce a při dalším zavolání se proměnné ve funkci pamatují z předchozího volání (jakoby proměnné byly static ve smyslu jazyka C)

Implementované kolekce v jazyku C# Dictionary<TKey, TValue> drží položky ve tvaru klíč/hodnota přistupuje se klíčem, nezáleží na pořadí List<T> klasický spojový seznam Queue<T> fronta SortedList<TKey, TValue> položky klíč/hodnota jsou setřízeny podle klíče Stack<T> zásobník new Hashtable(); hashovací tabulka klíč/hodnota Prohlédněte si metody těchto kolekcí na MSDN, zejména Add, Remove

Příklad na použití slovníkových kolekcí Dictionary<string, string> openwith = new Dictionary<string, string>(); openwith.add("txt", "notepad.exe"); openwith.add("bmp", "paint.exe"); openwith.add("dib", "paint.exe"); openwith.add("rtf", "wordpad.exe"); openwith["sh"] = "bash"; Console.WriteLine ("Open with: {0", openwith ["txt"]); /* prochazeni */ foreach( KeyValuePair<string, string> kvp in openwith ) { Console.WriteLine("Key = {0, Value = {1", kvp.key, kvp.value);

Běžně používané metody string.concat spojování řetěců, string je statická třída Split rozděluje objekt typu string na pole řetězců Trim odřeže od konce a od začátku bílé znaky (používá se dost na webu) IndexOf index, na kterém se nachází řetězec v řetězci Replace nahradí všechny výskyty řetězce Spojování řetězců pomocí operátoru + Srovnávání řetězců pomocí operátoru ==, <=, >,... Regulární výrazy viz. http://msdn.microsoft.com/en-us/library/ system.text.regularexpressions.regex(v=vs.110).aspx

Proměnný počet argumentů Nové klíčové slovo params public static double Average( params int[] values ){ int sum = 0; foreach (int v in values) { sum += v; return sum / values.length;... Console.WriteLine( "avg: {0", Average(1,2,3) ); => 2 Console.WriteLine( "avg: {0", Average(new int[]{1,2,3 );?? => 2 :)

A ted vy Napište třídu TextStatistic, která má za úkol provádět statistiku text Bude obsahovat metody Dictionary<string, int> GetStatistic(), která vrací slovník, kde klíč je slovo a hodnota je počet výskytů. Dictionary zkuste vyměnit za další kolekce a zjistěte, jak je to s rychlostí. Napište metodu string [] GetWordsWithOccurence( int n ), která vrátí všechny řetězce, které se vyskytují n-krát Pro ty, co budou stíhat Napište třídu MySet, která bude reprezentovat matematickou množinu. Metody si určete sami podle intuice Napište metodu MySet PowerSet(), která vrátí potenční množinu. Implementujte IEnumerator