Simulace. Martin Pergel

Podobné dokumenty
Zápis programu v jazyce C#

Kolekce, cyklus foreach

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

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

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Jazyk C# (seminář 3)

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.

Přetěžování operátorů

Výčtový typ strana 67

Objektově orientované programování

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

Funkční objekty v C++.

Jazyk C++ I. Polymorfismus

Jazyk C# a platforma.net

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

Úvod do programovacích jazyků (Java)

Jazyk C# (seminář 5)

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.

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Java - řazení objektů

Iterator & for cyklus

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

Výjimky (exceptions), generické metody a třídy v C#

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

Jazyk C# (seminář 6)

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

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

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

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

Úvod do programovacích jazyků (Java)

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

KTE / ZPE Informační technologie

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

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

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

1. Téma 12 - Textové soubory a výjimky

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

Jakub Čermák Microsoft Student Partner

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

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

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Generické programování

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

Mnohotvarost (polymorfizmus)

Dědění, polymorfismus

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

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

PREPROCESOR POKRAČOVÁNÍ

Datové struktury. alg12 1

Standardní algoritmy vyhledávací.

KTE / ZPE Informační technologie

URČITÝM ZPŮSOBEM PODOBNÉ

Programovací jazyk Java

Spojové struktury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 10 A0B36PR1 Programování 1

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

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

Objektové programování

Dědičnost (inheritance)

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

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

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

Projekty pro výuku programování v jazyce Java

Java Výjimky Java, zimní semestr

9. přednáška - třídy, objekty

Desetinná čísla. pro celá čísla jsme používali typ int. pro desetinná čísla používáme typ double

7. Dynamické datové struktury

Připravil: David Procházka. Programovací jazyk C++

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

typová konverze typová inference

Jazyk C++ I. Šablony

Jazyk C# (seminář 3)

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

Část I Spojové struktury

Zpracoval:

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

Teoretické minimum z PJV

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

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

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

Algoritmizace a programování

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Ukazka knihy z internetoveho knihkupectvi

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

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

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

Vector datový kontejner v C++.

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

Chování konstruktorů a destruktorů při dědění

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

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. Kotala, P. Toman: Java ( Obsah )

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

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Vytváření a použití knihoven tříd

Transkript:

Simulace Pokračování

Seznamy Seznamy (spojové) a základní datové struktury byly probrány v Pascalu, protože v C# jsou už předimplementované: System.Collections.ArrayList je univerzální seznam. Instance této třídy jsou osazeny například metodami: Add přidání prvku. Remove odebrání prvku (jednoho výskytu), Sort setřídění (by default integerů, se stringy jsem měl potíže), IndexOf vyhledání prvku, při nálezu vrací nezáporné číslo, není-li prvek nalezen, vrátí se -1.

Příklad using System.Collections; ArrayList AL = new ArrayList(); AL.Add("První"); AL.Add(222); AL.Add(100); AL.Add(1); AL.Add(null); AL.Remove("První");

Příklad pokračování Všechny prvky lze vypsat pomocí foreach: Console.WriteLine("Počet: 0", AL.Count ); Console.WriteLine("Prvni prvek: 0", AL[0]); AL.Sort(); System.Console.Write("Všechny prvky: "); foreach (object obj in AL) System.Console.Write("0", obj); System.Console.WriteLine();

Typový seznam a generika Často potřebujeme udělat to samé pro různé typy (například spojový seznam). Víme ale předem, že prvky budou homogenní (tedy jednoho typu). K tomu slouží generika (v C++ šablony). Poznají se podle parametru ve špičatých závorkách: List<int> cisla=new List<int>(); Po definici s generikem pracujeme jako s obyčejnou proměnnou. cisla.add(10); Dnes si ukážeme jen jak generika použít.

Generikum List Je nástupcem ArrayListu od C# 2.0, proto se ovládá podobně. List<int> cela cisla=new List<int>(); cela cisla.add(5); cela cisla.add(3); cela cisla.add(1); foreach(int i in cela cisla) Console.WriteLine(i); Console.WriteLine("Celkem {0}",cela cisla.count);

Komplexní čísla... jenže jenže, mně integery nestačí class Komplexni { public double Re,Im; public Komplexni(double Re,double Im) { this.re=re; this.im=im;} } List<Komplexni> s=newlist<komplexni>(); s.add(new Komplexni(1,0)); s.add(new Komplexni(0,1));

Generická třída List je v System.Collections.Generic, obsahuje řadu metod, například: Add, Contains, Sort, BinarySearch Příklad: List<string> s1 = new List<string>(); s1.add("abcd"); s1.add("efgh"); if(s1.contains("abcd")) Console.WriteLine("Je tam!");

2. možnost implementace diskrétní simulace Kalendář je seznam událostí List<Udalost>, jednotlivé procesy jsou postrkovány ovladači událostí, v tom případě fronty na čekající procesy nejsou potřeba, čekání lze realizovat tak, že událost naplánujeme na nejbližší čas, kdy může nastat, musíme dát pozor na race-condition.

Generika I v C++ fungují obecnější šablony, využijeme jich, pokud chceme vytvořit šablonu nějaké třídy, tedy chceme vytvořit více totožných tříd, které se budou lišit datovým typem. Příklad využití byl minule v podobě generické třídy List. Jde o jistou náhražku maker preprocesoru známých z jazyka C.

Generika II Při použití generika jsme postupovali stejně jako u obyčejného datového typu, jen jsme na správné místo dali parametr do špičatých závorek. Při definici postupujeme podobně a tímto parametrem bude datový typ se všemi důsledky, které z toho plynou, tedy můžeme dělat proměnné dotyčného (parametrického) typu. class jmeno <parametry,oddelene,carkami> { definice třídy } Příklad: public class genericka <T> {public T promenna;}

Generika příklad public class seznam <T> { public T data; public seznam<t> next; }... seznam<int> x=new seznam<int>(); x.data=10; x.next=new seznam<int>(); // Tohle by bylo spatne: // x.next=new seznam<double>();

Komplexní čísla a operace s nimi, aneb přetížené operátory Čísla jsou různá: Přirozená, celá, racionální, reálná, komplexní... Na všech ale má smysl definovat sčítání, násobení, odčítání a dělení. V počítači máme jen čísla celá a necelá. Co s tím? Definujeme si vlastní třídu. Tu ale nepůjde sčítat a násobit. Anebo - ze by? Ano: Dotyčné třídě přetížíme operátory (přesněji dodefinujeme je). Syntakticky se tváříme, jako bychom definovali běžnou statickou metodu, tato funkce se ale bude divně jmenovat.

Příklad Opět Gaussova celá čísla class kompl { public int re,im; public kompl(int re,int im) { this.re=re; this.im=im;} public static kompl operator + (kompl a,kompl b) { return new kompl(a.re+b.re,a.im+b.im);} public static kompl operator * (kompl a,kompl b) { return new kompl(a.re*b.im-a.im*b.im, a.re*b.im+a.im*b.re); } }

Příklad pokračování Abychom mohli třídu kompl demonstrovat, předefinujeme jí virtuální metodu ToString jako minule: public override string ToString() { return ""+re+"+ "+im+"i";} A jedeme: kompl a=new kompl(1,0), b=new kompl(0,1),c; c=a+b; Console.WriteLine(c); Console.WriteLine(a*b);

Přetížitelné operátory Přetížit lze mnoho operátorů, konkrétně: unární +, -,!, ~, ++, -- a binární +, -, *, /, %, &,, ^, <<,>> NELZE například &&,,[],(typ)x,+ =, =...

Když je problém můžeme... ukončit program, na všech možných místech myslet na všechno možné, nehasit, co nás nepáĺı. V Pascalu byly k dispozici první dvě možnosti, tedy bud to pštrosí algoritmus, nebo se starat. C# umožňuje všechny tři možnosti, my zatím umíme tu první.

Výjimky II Výjimky už známe, objevovaly se, když jsme šlápli vedle a program tím skončil. My ovšem můžeme výjimky odchytávat, anebo dokonce házet a posílat tím zprávu, že se něco nepovedlo. Výjimka postupně propadá programem a ukončuje funkce, které ji nečekaly, dokud nevypadneme z programu, nebo nenarazíme na blok, který ji očekával.

Výjimky III Syntax a sémantika: try uvádí blok, ve kterém může nastat výjimka. catch uvádí ovladač události za try blokem. catch bloků může být více, protože výjimek je mnoho typů (a každou můžeme ošetřovat zvlášt, přesto jsou všechny výjimky potomkem třídy System.Exception). finally uvádí blok, který se má provést v každém případě (at výjimka přijde nebo ne a at je výjimka jakákoliv, tedy včetně nečekané). throw hodí výjimku (ovládá se podobně jako return).

Výjimky příklad void bezpecnedeleni(int a, int b) { try{ Console.WriteLine(a / b); } catch(system.dividebyzeroexception e) { Console.WriteLine("NELZE");} }

Vlastní výjimka class me:system.exception{}... void bezpecnedeleni(int a, int b) { } if(y==0) throw new me(); return (x/y); try{ } catch (System.Exception e) { Console.WriteLine("Prisla vyjimka!"); } finally { Console.WriteLine("V kazdem pripade...");}

Výjimky poznámky I Bloků catch může být více za sebou. Vykoná se první blok, který popisuje dotyčnou výjimku. V C# je třeba definovat ovladače synovské výjimky před rodičovskými: catch(system.exception e){...} catch(system.dividebyzeroexception e){...}... tohle ani nezkompilujeme.

Výjimky poznámky II Jak neprogramovat: bool uz=false; while(!uz) { try{ volani divne funkce();uz=true;} catch(system.exception e) { Console.WriteLine("Tak znova...");} } Výjimky jsou dobrý sluha, ale špatný pán!

Konec Děkuji za pozornost...