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

Rozměr: px
Začít zobrazení ze stránky:

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

Transkript

1 Výjimky (exceptions), generické metody a třídy v C# Obsah VÝJIMKY (EXCEPTIONS)... 1 Chyby v programu... 2 Testování návratových hodnot funkcí... 2 Pojem výjimka... 3 Neobsloužená výjimka (unhandled exception)... 3 Vznik výjimky... 3 Ošetřování výjimek... 4 Handler... 4 Použití bloků a catch:... 5 Třídy výjimek... 6 Použití více bloků catch Blok finally Příkaz throw GENERICKÉ TŘÍDY A METODY...18 Obecnost Deklarace generické metody má tvar: Příklady generických metod: Příklad generické třídy Seznam obrázků Seznam programů Cílem kapitoly je ukázat možnosti použití výjimek a generických metod v C#. Klíčové pojmy: Výjimky obsloužené a neobsloužené, ošetření výjimek, handler, bloky, catch, throw, finály, třídy výjimek, generické metody. Výjimky (exceptions) Výjimka souvisí s výjimečným stavem, který může v programu nastat a který může vést k havárii programu (nebyl nalezen soubor, s nímž má program pracovat, dělení nulou, nedostatek paměti, ). Bude rozebrán mechanizmus výjimek vyvolání ošetření kapitola 13 1/22

2 Chyby v programu Chyby - čím později se zjistí, tím je nákladnější je opravit - jsou různé chyby: některé odhalí kompilátor (nejlevnější) některé se zjistí při 1. spuštění některé vedou k havárii programu jen občas (nejnákladnější) Málo robustní chování programy zhroutí se za určitých okolností - výjimky (výjimečné situace): místo čísla zadáme písmeno dojde paměť není k dispozici disk, s nímž program pracuje dojde k přerušení spojení se sítí Programátoři s nestabilitou bojují tak, že se snaží vytvořit robustní prog., který si umí poradit s každou situací. Možné reakce programu na výjimečnou situaci: zhroutí se informuje uživatele a ukončí se informuje uživatele a nabídne mu obnovení běhu provede automatickou úpravu a pokračuje, aniž by uživatele rušil Testování návratových hodnot funkcí Chyby můžeme ošetřovat testováním návratových hodnot funkcí: Test existence souboru: if (File.Exists(@"..\..\jmena.txt")) Console.WriteLine("Soubor existuje"); Jiný způsob testování existence souboru: Definujeme instanci třídy FileInfo: FileInfo file = new FileInfo(@"..\..\jmena.txt"); if(file.exists)console.writeline("soubor existuje"); Návratové hodnoty funkcí vyjadřují úspěšnost operace (-1 se obvykle vrací v případě chyby) kapitola 13 2/22

3 Zpracování výjimek v C# poskytuje mechanismus pro ošetření předvídatelných, ale neobvyklých okolností, které mohou nastat za běhu programu. Pojem výjimka Slovo výjimka může znamenat buď chybu vzniklou v programu, nebo objekt, který o ní nese informace. Neobsloužená výjimka (unhandled exception) Neobsloužená výjimka končí běhovou chybou programu s výpisem odpovídajícího hlášení, které informuje uživatele k jaké chybě došlo. Program 1 Program s neobslouženou výjimkou dělení nulou public class VstupInt static void Main() int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32 (Console.ReadLine()); double x = a/b; Console.ReadLine(); Po zadání hodnot: 10 0 Vypíše se zpráva o neobsloužené výjimce: Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero. Výjimka představuje problém, vzniklý za běhu programu, který je nutno odstranit, aby mohl program pokračovat v běhu. V kódu aplikace lze výjimku obsloužit. Obsloužená výjimka nemusí ukončit program. Vznik výjimky Některé výjimky může vyvolat samo prostředí.net Framework, jiné výjimky vyvoláváme příkazem throw, za nímž uvedeme odkaz na objekt, který ponese informace o chybě kapitola 13 3/22

4 Vyvolání výjimky: throw výraz; Výraz musí představovat odkaz na instanci třídy odvozené od System.Exception. Můžeme použít odkaz na existující objekt nebo můžeme vytvořit nový objekt pomocí new. Po vzniku výjimky se přeruší přirozené pořadí provádění příkazů a program začne hledat handler, část kódu, která vzniklou situaci ošetří. Tento výraz lze za jistých okolností vynechat. Ošetřování výjimek Práce s výjimkami je v C# založena na tzv. hlídaném bloku kódu. Operace, jež se nemusí podařit, tj. při nichž může vzniknout výjimka, uzavřeme do bloku, před nějž zapíšeme klíčové slovo. Za něj pak připojíme jeden nebo několik handlerů nebo koncovku (případně obojí). Ukažme si syntaktický popis hlídaného bloku: hlídaný blok: příkazy handlery nep koncovka nep Hlídaný blok musí obsahovat alespoň jeden handler nebo koncovku (nebo obojí). Handlerů může být více, koncovka může být nejvýše jedna. Handler Handler je část programu, která může ošetřit výjimku. Jeho syntax je handler: catch( typ identifikátor ) tělo handleru catch tělo handleru První možnost začíná klíčovým slovem catch, za kterým následuje v závorkách typ výjimky, kterou může tento handler ošetřit ("typ handleru"). Musí jít o třídu odvozenou od E x c e p t i o n. Identifikátor, který následuje, bude v těle handleru představovat odkaz na objekt, který nese informace o výjimce. Budeme mu také říkat "parametr handleru". Tělo handleru je tvořeno příkazy, které se zachycenou výjimkou "něco udělají", tedy které řeší vzniklou situaci. Příklad kódu pro ošetření chyby s využitím mechanismu výjimek: kapitola 13 4/22

5 // Nějaké nebezpečné funkce catch(nedostatekpameti) //Provedení nějakých akcí, které ošetřují nedostatek paměti catch(soubornenalezen) //Provedení jiné akce, která ošetřuje, že soubor nebyl nalezen Použití bloků a catch: Není jednoduché přijít na to, kam bloky umístit- nemusí být vždy zřejmé, které akce mohou vyvolat výjimky. Umístění : na místa alokace paměti využití zdrojů chyby, související s hraničními hodnotami neoprávněné vstupy. Význam klíčových slov: (zkusit) catch (zachytit) throw (zamítnout) finally (ukončení) Jinou možnost nám nabízí mechanizmus výjimek Hlídanou posloupnost příkazů označíme do zvláštního bloku ()- v tomto bloku může vzniknout výjimka. Za tímto blokem postupně uvedeme, jaké výjimky mohly v hlídaném bloku nastat, a jak je ošetřit. Co v C# může být výjimkou: proměnná jakéhokoliv primitivního datového typu instance jakékoliv třídy. Výjimka by v sobě měla nést nějakou informaci o situaci, která nastala a proč byla vyvolána. Syntaxe výjimek v C#: Výjimka se vyvolá (vyvrhne) pomocí klíčového slova throw. Hlídaný blok se značí klíčovým slovem. K odchycení vyvolaných výjimek slouží klíčové slovo catch kapitola 13 5/22

6 Třídy výjimek V C# je výjimka objektem vytvořeným (nebo) vyvolaným) v okamžiku vzniku výjimečného stavu. Zmiňovaný objekt obsahuje veškeré informace, nezbytné k nalezení problému. Třídy výjimek můžeme vytvářet sami. Můžete však čerpat z ohromného rezervoáru předdefinovaných tříd výjimek integrovaných do základní knihovny tříd ( BCL, Base Class Library) platformy.net Framework. Bázové třídy výjimek Hierarchie tříd odvozených od třídy System.Exception object Exception SystemException IndexOutOfRangeException ArithmeticException InvalidCastException DivideByZeroExceptio OverflowExceptio Obrázek 1 Hierarchie tříd výjimek kapitola 13 6/22

7 Třídy pro přenos informací o výjimkách Třídy pro přenos informací o výjimkách jsou ve jmenném prostoru System. Napíšete-li ve vývojovém prostředí Microsoft Visual Studio System., objeví se všechny členy jmenného prostoru System mezi jiným i třídy výjimek. Ty jsou ukončeny slovem Exception. Jestliže v editoru vývojového prostředí Microsoft Visual Studio nastavíte kurzor nad metodu ReadLine() u příkazu: int a = Convert.ToInt32(Console.ReadLine()); objeví se bublinková nápověda, která zobrazuje třídy výjimek, které mohou být aktivované v této metodě: System.IO.IOException System.FormatException System.OverflowException Zadáme-li na vstupu nečíselný znak, vznikne formátovací chyba: System.FormatException Zadáme-li příliš velké číslo (například ), může vzniknout System.OverflowException Ošetření uvedeného kódu ukazuje následující program: Program 2 Ošetření výjimek pro načení celého čísla a dělení nulou public class Program static void Main() int a = Convert.ToInt32(Console.ReadLine()); int b = Convert.ToInt32(Console.ReadLine()); double x = a / b; catch (FormatException) Console.WriteLine("Není zadané celé číslo"); catch (DivideByZeroException) Console.WriteLine("Dělení nulou"); catch (OverflowException) Console.WriteLine("Příliš velké číslo"); kapitola 13 7/22

8 Console.ReadLine(); Následující program zajišťuje správné zadání celého čísla: musí obsahovat pouze číslice a nesmí překročit hodnotu int.maxvalue. Program 3 Ošetření čtení celého čísla pomocí mechanismu výjimek public class VstupInt static int cislo; public static bool TestInt() cislo = Convert.ToInt32(Console.ReadLine()); return true; catch (FormatException) Console.WriteLine("Chybně zadané čislo"); return false; catch (OverflowException) Console.WriteLine("Příliš velké číslo"); return false; public static int CtiInt() bool f; do Console.WriteLine("Zadej celé čislo: "); f = TestInt(); while (!f); return cislo; public static void Main() int i = CtiInt(); Console.WriteLine(i); Podobně lze ošetřit zadávání hodnoty do znakové proměnné, nebo do proměnné typu double kapitola 13 8/22

9 Program 4 Ošetření čtení racionálního čísla pomocí mechanismu výjimek public class Vstup static double dcislo; public static bool TestDouble() dcislo = Convert.ToDouble(Console.ReadLine()); return true; catch (FormatException) Console.WriteLine("Chybně zadané číslo"); return false; public static double CtiDouble() bool f; do Console.WriteLine("Zadej racionální číslo: "); f = TestDouble(); while (!f); return dcislo; public static void Main() double d = CtiDouble(); Console.WriteLine(d); V další části programu je ukázáno, jak lze ošetřit, aby uživatel mohl zadávat v racionálním čísle jak desetinnou čárku, tak desetinnou tečku: Program 5 Ošetření čtení racionálního čísla - umožňuje zadat. i, public class Vstup static double dcislo; public static bool TestDouble() dcislo = Convert.ToDouble(Console.ReadLine().Replace('.', ',')); return true; catch (FormatException) Console.WriteLine("Chybně zadané číslo"); return false; kapitola 13 9/22

10 public static double CtiDouble() bool f; do Console.WriteLine("Zadej racionální číslo: "); f = TestDouble(); while (!f); return dcislo; public static void Main() double d = CtiDouble(); Console.WriteLine(d); Po načtení řetězce se pomocí metody Replace('.', ',') nahradí výskyt '.' (pokud existuje) ','. Program 6 Ošetření čtení racionálního znaku pomocí mechanismu výjimek public class VstupInt static char znak; public static bool TestChar() znak = Convert.ToChar(Console.ReadLine()); return true; catch (FormatException) Console.WriteLine("Chybně zadaný znak"); return false; public static char CtiZnak() bool f; do Console.WriteLine("Zadej znak: "); f = TestChar(); while (!f); return znak; public static void Main() char c = CtiZnak(); Console.WriteLine(c); kapitola 13 10/22

11 Následující program obsahuje všechny uvedené kontroly: Program 7 Kontrola vstupu znaku, celého a racionálního čísla public class Vstupy static char znak; public static bool TestChar() znak = Convert.ToChar(Console.ReadLine()); return true; catch (FormatException) Console.WriteLine("Chybně zadaný znak"); return false; static double dcislo; static bool f; public static bool TestDouble() dcislo = Convert.ToDouble(Console.ReadLine().Replace('.', ',')); return true; catch (FormatException) Console.WriteLine("Chybně zadané číslo"); return false; static int cislo; public static bool TestInt() cislo = Convert.ToInt32(Console.ReadLine()); return true; catch (FormatException) Console.WriteLine("Chybně zadané číslo"); return false; public static char CtiZnak() do kapitola 13 11/22

12 Console.WriteLine("Zadej znak: "); f = TestChar(); while (!f); return znak; public static double CtiDouble() do Console.WriteLine("Zadej racionální číslo: "); f = TestDouble(); while (!f); return dcislo; public static int CtiInt() do Console.WriteLine("Zadej celé číslo: "); f = TestInt(); while (!f); return cislo; public static void Main() int i = CtiInt(); Console.WriteLine(i); double d = CtiDouble(); Console.WriteLine(d); char c = CtiZnak(); Console.WriteLine(c); Program 8 Indikace přetečení indexu class PreteceniIndexu static void Main() int[] cisla = new int[5]; // deklarace pole typu int o délce 5 // blok kódu hlídající chyby Console.WriteLine("Před generováním chyby"); cisla[10] = 12; // přetečení indexu pole Console.WriteLine("Sem se nedostanu"); catch (IndexOutOfRangeException) // zachycení výjimky Console.WriteLine("Přetečení indexu"); Console.WriteLine("Po chybě"); kapitola 13 12/22

13 Použití více bloků catch Různé chyby generují různé druhy výjimek. Proto je třeba napsat více bloků catch za sebou. Dobrá vlastnost tohoto uspořádání je, že CLR (common language runtime) nasměruje program na správný blok catch, který je určen pro danou výjimku na základě jejího typu. Spojení výjimky s blokem catch se provede automaticky. Blok finally Výjimky způsobí skok v programu a nelze zaručit, že se nějaký příkaz spustí po ukončení předchozího, protože může dojít k vygenerování výjimky. Řešením je napsat příkaz, který má být vykonán za všech okolností v bloku finally. Blok finally můžete psát pouze bezprostředně po bloku nebo bezprostředně za poslední blok catch. Pokud program vstoupí do bloku, který je asociován s blokem finally, bude blok finally vždy spuštěn. Program 9 Indikace dvou chyb: dělení nulou a přetečení indexu class Osetreni2Vyjimek public static void Main() int[] cisla = new int[5]; int a = 5; int b = 0; // blok kódu hlídající chyby Console.WriteLine("Před generováním chyby"); a = a / b; // dělení nulou cisla[7] = 11; // přetečení indexu pole Console.WriteLine("Sem se nedostanu"); catch(dividebyzeroexception) // zachycení výjimky Console.WriteLine("Děleni nulou"); a = 0; catch(indexoutofrangeexception) // zachycení výjimky Console.WriteLine("Přetečení indexu"); finally Console.WriteLine("Toto se vypíše úplně vždy"); Program 10 Ošetření výjimky FileNotFoundException using System.IO; kapitola 13 13/22

14 class Pokus public static StreamReader sr; public static int OtevreniSouboru() // Čtení souboru sr = new StreamReader("..\\..\\Program1.cs"); return 0; catch (FileNotFoundException) Console.WriteLine("Soubor neexistuje"); return -1; static void Main() if (OtevreniSouboru()!= -1) string mystring = sr.readtoend(); sr.close(); // Zobrazení obsahu souboru. Console.WriteLine(myString); // Čekání na stisk klávesy. Console.ReadLine(); Program 11 Opakované dělení dvou čísel, dokud nezadáme nulu class Pokus public static double deleni(int a, int b) int c=a / b; return (double)a / (double)b; catch (DivideByZeroException) Console.WriteLine("Nulou dělit nelze"); return 0; static void Main(string[] args) int a, b; do Console.WriteLine("Zadej dělěnce (0 končí cyklus):"); a = Convert.ToInt32(Console.ReadLine()); if(a==0)break; Console.WriteLine("Zadej dělitele:"); kapitola 13 14/22

15 b = Convert.ToInt32(Console.ReadLine()); double x = deleni(a, b); if(x!=0)console.writeline("podíl je: 0:F2",x); while(a!=0); Příkaz throw Výjimku můžeme vyhodit manuálně pomocí příkazu throw: throw objektvyjimky; Příkaz throw vyhazuje object. Program 12 Výpočet průměru pěti známek V dalším příkladu si program vyžádá zadání známky. Pokud uživatel zadá číslo mimo interval 1 až 5, generuje se výjimka Pokud uživatel zadá správnou známku, výjimka se nevygeneruje a zadaná známka se přičte do vytvářeného součtu. Po zadání pěti správných známek se vypíše jejich průměr. class NeniZnamka:Exception public void vypis() class Program Console.WriteLine("Špatně zadaná známka"); static NeniZnamka n = new NeniZnamka(); static void Main() int z=0,i=0,s=0; do Console.WriteLine("Zadej hodnotu známky: "); z = Convert.ToInt32(Console.ReadLine()); if (z > 5 z < 1) throw n; s += z; i++; catch(neniznamka n) kapitola 13 15/22

16 n.vypis(); while(i<5); Console.WriteLine("Průměr známek je: 0", (double)s/5.0); Console.ReadLine(); Program 13 Výpočet průměru známek - zadávání je ukončeno nulovou hodnotou public class VstupInt public static int CtiInt() int i=0; bool b = false; do Console.WriteLine("Zadej známku: "); i = Convert.ToInt32(Console.ReadLine()); if (i < 0 i > 5) throw new ArithmeticException(); b = true; catch (FormatException) Console.WriteLine("Chybně zadané číslo!"); b = false; catch (ArithmeticException) Console.WriteLine("Známka je mimo rozsah"); b = false; while (!b); return i; static void Main() int a, S = 0, p = 0; do a = CtiInt(); S += a; p++; while (a!= 0); Console.WriteLine("Průměr správně zadaných známek je: 0:F2", (double)s/(double)(--p)); Console.ReadLine(); kapitola 13 16/22

17 Program 14 Určení názvu dne v týdnu Následující program implementuje metodu DT, která má jeden celočíselný argument den, reprezentující číslo dne v týdnu. Metoda vrací řetězec, který je název příslušného dne v týdnu. Řešení je provedeno příkazem switch, kde v případě nesprávně zadaného čísla se vytvoří objekt třídy ArgumentOutOfRangeException a v odpovídajícím bloku catch je vypsáno příslušné hlášeni: "Číslo je mimo rozsah". public class Den_v_Tydnu public static string DT(int den) switch(den) case 1: return "Pondělí"; case 2: return "Úterý"; case 3: return "Středa"; case 4: return "Čtvrtek"; case 5: return "Pátek"; case 6: return "Sobota"; case 7: return "Neděle"; default: throw new ArgumentOutOfRangeException(); public static string CtiInt() int den = 0; string s=""; Console.WriteLine("Zadej číslo dne v týdnu: "); den = Convert.ToInt32(Console.ReadLine()); s = DT(den); catch (FormatException) Console.WriteLine("Chybně zadané číslo!"); catch (ArgumentOutOfRangeException) Console.WriteLine("Číslo je mimo rozsah"); return s; static void Main() Console.WriteLine(CtiInt()); Console.ReadLine(); kapitola 13 17/22

18 Generické třídy a metody Dva nejdůležitější rysy jazyků vyšší úrovně jsou obsluha výjimek. generika (šablony) a Generické typy jsou definovány ve standardu C# a podporovány moderními překladači. Umožňují vytvářet znovupoužitelný a přizpůsobitelný kód. Generika (šablony typů) jsou konstrukce, v nichž typ dat je určen jako parametr - umožní použít jednu funkci nebo třídu pro několik různých typů dat. Podle šablon může překladač vytvářet celé skupiny podobných tříd nebo funkcí, které se navzájem liší jen v některých datových typech nebo v hodnotách některých konstant. Takto vytvořené funkce nebo třídy označujeme jako instance šablony. Generické metody a třídy umožňují obecnou definici algoritmu, kde konkrétní typ datových položek je uvedený až při vytvoření příslušných objektů a spuštění metod. Obecnost Obecnost je taková konstrukce třídy, která umožňuje dodání jedné nebo více jejích interně používaných částí až za běhu aplikace. Příklad Chceme použít nějaký algoritmus (např. třídění) na různé druhy dat (čísla, znaky, řetězce). V C# se parametrizovaná třída nazývá šablona typů. Obecná definice šablonové metody: < Typ> návratový_typ jméno(seznam parametrů) // tělo metody Obecná definice šablonové t:řídy, obsahující šablonové metody class NázevTřídy<Typ>; Deklarace generické metody má tvar: public static Ttyp identifikator<ttyp>(parame)příkazy Ttyp je typ dat, použitý metodou. V závorkách < > je parametr šablony. v závorkách ( ) jsou parame metody Definice ze standardní knihovny C++ (STL) jsou většinou založeny na šablonách. Překladač kontroluje syntaktickou správnost šablony v okamžiku, kdy narazí na její definici. Šablona funkce umožňuje vytvořit funkci na základě parametrů - parametrické programování kapitola 13 18/22

19 Příklady generických metod: Program 15 Generická metoda vrat1 vrací hodnotu prvního parametru V uvedeném programu generická metoda vrat1 vrátí hodnotu prvního argumentu pro různé typy dat. using System.Collections.Generic; class Generika public static T vrat1<t>(t a, T b) return a; public static void Main() int i = 1, j = 2; double a = 1.5, b = 1.2; char c='#',d='@'; string s1 = "Petr", s2 = "Pavel"; Console.WriteLine("0", vrat1(i, j)); Console.WriteLine("0", vrat1(a, b)); Console.WriteLine("0", vrat1(c, d)); Console.WriteLine("0", vrat1(s1, s2)); Console.ReadLine(); Program vypíše: 1 1,5 # Petr Program 16 Generická metoda prohod prohodí hodnoty svých dvou parametrů Další program prohodí obsah prvního a druhého argumentu generické metody prohod using System.Collections.Generic; class Generika public static void prohod<t>(ref T a, ref T b) T pom; pom = a; a = b; b = pom; ; public static void Main() kapitola 13 19/22

20 int i = 1, j = 2; double a = 1.5, b = 1.2; char c = '#', d = '@'; string s1 = "Petr", s2 = "Pavel"; prohod<int>(ref i, ref j); prohod<double>(ref a, ref b); prohod<char>(ref c, ref d); prohod<string>(ref s1, ref s2); Console.WriteLine("0 1", i, j); Console.WriteLine("0 1", a, b); Console.WriteLine("0 1", c, d); Console.WriteLine("0 1", s1, s2); Console.ReadLine(); Obecný datový typ T je uvedený za názvem generické metody v lomených závorkách je to programátorem zvolený identifikátor (zde T jako template = šablona). Tento datový typ je dále použitý pro definování formálních parametrů metody namísto konkrétního datového typu. V Mainu jsou definované proměnné i,j typu int a a,b, typu double. Při volání generické metody prohod je třeba za jejím názvem uvést konkrétní datový typ argumentů v prvním případě int, v druhém double v lomených závorkách. Program 17 Generická metoda Spojeni spoji hodnoty svých parametrů, převedené na řetězce using System.Collections.Generic; class Generika public static string Spojeni<T>(ref T a, ref T b) return a.tostring()+" "+b.tostring(); public static void Main() int i = 1, j = 2; double a = 1.5, b = 1.2; char c = '#', d = '@'; string s1 = "Petr", s2 = "Pavel"; Console.WriteLine("0", Spojeni<int>(ref i, ref j)); Console.WriteLine("0", Spojeni<double>(ref a, ref b)); Console.WriteLine("0", Spojeni<char>(ref c, ref d)); Console.WriteLine("0", Spojeni<string>(ref s1, ref s2)); Console.ReadLine(); kapitola 13 20/22

21 Příklad generické třídy Program 18 Příklad generické třídy Následující program ukazuje definici a použití generické třídy Spojeni, která obsahuje přetíženou generickou metodu Spoj bez parametrů a se dvěma parame a konstruktor, který nastaví hodnoty privátních proměnných x,y na hodnoty svých parametrů. Vstupní bod programu (Main) je ve třídě Program a jsou zde vytvořeny čtyři objekty různých datových typů a konstruktorem třídy Spojeni proměnných jsou nastaveny hodnoty privátních pro konkrétní datové typy. Potom je pomocí těchto vytvořených objektů zavolaná neparametrická a následně parametrická metoda Spoj pro vypsání návratové hodnoty, která spojí hodnoty dvou proměnných obecného typu, převedené na řetězce. using System.Collections.Generic; class Spojeni<T> T x, y; public Spojeni(T x,t y) this.x=x; this.y=y; public string Spoj() return x.tostring() + " " +y.tostring(); public string Spoj(T x,t y) return x.tostring() + " " + y.tostring(); class Program public static void Main() Spojeni<int> s1 = new Spojeni<int>(10, 20); Spojeni<double> s2 = new Spojeni<double>(10.123, ); Spojeni<char> s3 = new Spojeni<char>('#','@'); Spojeni<string> s4 = new Spojeni<string>("Otec", "Matka"); Console.WriteLine("Volání neparametrické metody Spoj:"); Console.WriteLine(s1.Spoj()); Console.WriteLine(s2.Spoj()); Console.WriteLine(s3.Spoj()); Console.WriteLine(s4.Spoj()); Console.WriteLine("\nVolání parametrické metody Spoj:"); Console.WriteLine(s1.Spoj(20,10)); Console.WriteLine(s2.Spoj(20.321,10.123)); Console.WriteLine(s3.Spoj('@','#')); Console.WriteLine(s4.Spoj("Matka","Otec")); Console.ReadLine(); kapitola 13 21/22

22 Seznam obrázků Obrázek 1 Hierarchie tříd výjimek... 6 Seznam programů Program 1 Program s neobslouženou výjimkou dělení nulou... 3 Program 2 Ošetření výjimek pro načení celého čísla a dělení nulou... 7 Program 3 Ošetření čtení celého čísla pomocí mechanismu výjimek... 8 Program 4 Ošetření čtení racionálního čísla pomocí mechanismu výjimek... 9 Program 5 Ošetření čtení racionálního čísla - umožňuje zadat. i,... 9 Program 6 Ošetření čtení racionálního znaku pomocí mechanismu výjimek Program 7 Kontrola vstupu znaku, celého a racionálního čísla Program 8 Indikace přetečení indexu Program 9 Indikace dvou chyb: dělení nulou a přetečení indexu Program 10 Ošetření výjimky FileNotFoundException Program 11 Opakované dělení dvou čísel, dokud nezadáme nulu Program 12 Výpočet průměru pěti známek Program 13 Výpočet průměru známek - zadávání je ukončeno nulovou hodnotou Program 14 Určení názvu dne v týdnu Program 15 Generická metoda vrat1 vrací hodnotu prvního parametru Program 16 Generická metoda prohod prohodí hodnoty svých dvou parametrů Program 17 Generická metoda Spojeni spoji hodnoty svých parametrů, převedené na řetězce Program 18 Příklad generické třídy kapitola 13 22/22

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

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

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

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

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

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 Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

Soubor jako posloupnost bytů

Soubor jako posloupnost bytů Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Java - výjimky. private void vstup() throws IOException {... }

Java - výjimky. private void vstup() throws IOException {... } Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace

Více

Dědičnost (inheritance)

Dědičnost (inheritance) Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)

Více

Ošetřování chyb v programech

Ošetřování chyb v programech Ošetřování chyb v programech Úvod chyba v programu = normální záležitost typy chyb: 1) programátorská chyba při návrhu každých 10 000 řádek 1 chyba lze jen omezeně ošetřit (před pádem aplikace nabídnout

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

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

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) 29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka

Více

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

C# konzole Podíl dvou čísel, podmínka IF C# konzole Podíl dvou čísel, podmínka IF Tematická oblast Datum vytvoření 2013 Ročník 3 Stručný obsah Způsob využití Autor Kód Internetové technologie, programování Výpočet podílu v konzolové aplikaci

Více

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.

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. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

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

Programování v C++ 1, 17. cvičení Programování v C++ 1, 17. cvičení výjimky 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Binární vyhledávací

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty. Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

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

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Simulace. Martin Pergel

Simulace. Martin Pergel 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

Více

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

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25 Seminář Java Výjimky Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Výjimky 1/ 25 Výjimky Co a k čemu jsou výjimky výjimka je mechanizmus umožňující psát robustní, spolehlivé

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++ 10. března 2015, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ K čemu slouží výjimky Strana 2 / 25 Obsah přednášky 1 K čemu slouží výjimky 2 Vytváření výjimek 3 Speciální případy

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

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

Připravil: David Procházka. Programovací jazyk C++ 17. října 2011, Brno Připravil: David Procházka Práce s výjimkami Programovací jazyk C++ Obecně Strana 2 / 21 Jak se může program zachovat při chybě Dříve byl obvyklý způsob zavolat metodu abort. Metoda

Více

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

IRAE 07/08 Přednáška č. 7. Začátek (head) Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

Kolekce, cyklus foreach

Kolekce, cyklus foreach Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

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/04.0006

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/04.0006 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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

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

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C# 4 - Pokročilé konstrukce C# IW5 - Programování v.net a C# Strana 1 Obsah přednášky Výjimky Delegáti Události Lambda výrazy Strana 2 Výjimky a jejich zpracování Slouží k ošetření výjimečných (chybových)

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

8. přednáška: Soubory a proudy

8. přednáška: Soubory a proudy 8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

Více

Jazyk C++ II. Výjimky

Jazyk C++ II. Výjimky Jazyk C++ II Výjimky AR 2013/2014 Jazyk C++ II Funkce abort Dříve byl obvyklý způsob zavolat metodu abort(). Metoda provádí okamžitě: Vyprázdnění vyrovnávací paměti, Ukončení celého programu, Vrátí číslo

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

Více

Mnohotvarost (polymorfizmus)

Mnohotvarost (polymorfizmus) Mnohotvarost (polymorfizmus) TYPY MNOHOTVAROSTI... 2 PŘETĚŽOVÁNÍ METOD, PŘETĚŽOVÁNÍ OPERACÍ... 3 PŘETÍŽENÍ OPERÁTORŮ... 4 ČASTO PŘETĚŽOVANÉ OPERÁTORY... 4 PŘEPISOVÁNÍ... 7 VIRTUÁLNÍ METODY... 10 SEZNAM

Více

Výjimky. v C# a Javě

Výjimky. v C# a Javě Výjimky v C# a Javě Výjimky v C# Výjimky poskytují v C# způsob, jak reagovat na nečekané události. Uživatel např. zadá místo čísla text nebo soubor, který chceme otevřít, je využíván jiným procesem. To

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Řídicí struktury. alg3 1

Řídicí struktury. alg3 1 Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení

Více

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

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

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL Středoškolská technika 2017 Setkání a prezentace prací středoškolských studentů na ČVUT PROGRAM NA GENEROVÁNÍ PRVOČÍSEL Vojtěch Pchálek Střední škola technická Kouřílkova 8, Přerov ANOTACE Bratr, který

Více

Sada 1 - PHP. 03. Proměnné, konstanty

Sada 1 - PHP. 03. Proměnné, konstanty S třední škola stavební Jihlava Sada 1 - PHP 03. Proměnné, konstanty Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond

Více

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

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

1. Téma 12 - Textové soubory a výjimky 1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se

Více

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd Soubory Druhy souborů textové nestrukturované txt strukturované - ini, xml, csv binární veřejné bmp, jpg, wav proprietární docx, cdr, psd Základy zápisu using System.IO; nutné pro odkázání na jmenný prostor,

Více

Výjimky. Tomáš Pitner, upravil Marek Šabo

Výjimky. Tomáš Pitner, upravil Marek Šabo Výjimky Tomáš Pitner, upravil Marek Šabo K čemu jsou výjimky Výjimky jsou mechanizmem umožňujícím reagovat na nestandardní (tj. chybové) běhové chování programu, které může mít různé příčiny: chyba okolí:

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 7 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň - ternární

Více

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

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená Výčtový typ Motivační příklad řízení semaforu na křižovatce = přepínání červená/oranžová/zelená const int CERVENA = 0; const int ORANZOVA = 1; const int ZELENA = 2; int prististav = CERVENA; while (true)

Více

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

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

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

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

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti

Více

PB161 programování v C++ Výjimky Bezpečné programování

PB161 programování v C++ Výjimky Bezpečné programování PB161 programování v C++ Výjimky Bezpečné programování Chyby... Snaha psát programy bez chyb myslet : ) Snaha psát programy se schopností fault tolerance. snaha se z chybového stavu dostat lze řešit testováním

Více

Textové soubory. alg9 1

Textové soubory. alg9 1 Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

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

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 Podprogramy zásady: jednu věc programovat pouze jednou podprogram 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 // nacteni strany 1 double

Více

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -

Více

15. Projekt Kalkulačka

15. Projekt Kalkulačka Projekt Kalkulačka strana 143 15. Projekt Kalkulačka 15.1. Základní popis, zadání úkolu Pracujeme na projektu Kalkulačka, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy

Více

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Ú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

Více

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

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19 Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

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

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

Programovací jazyk Java

Programovací jazyk Java 1 z 8 Programovací jazyk Java Enumerace (výčty) Složitější definice výčtového typu Konstanty anonymních typů Výčtový typ a datové struktury Java packaging JAR archivy CLASSPATH Apache Ant 10. přednáška

Více

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

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

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých

Více

URČITÝM ZPŮSOBEM PODOBNÉ

URČITÝM ZPŮSOBEM PODOBNÉ Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty (tělo obsahuje buňky, letadlo součásti). Objekty URČITÝM

Více

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Jazyk C++ I. Šablony

Jazyk C++ I. Šablony Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

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

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

Více

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: vzdělávací

Více

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina 5a. Makra Visual Basic pro Microsoft Escel Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty Zde bude stránka o cyklických odkazech a iteracích.

Více

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

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti 3. přednáška nalezení největšího prvku, druhého nejvyššího prvku, algoritmus shozeného praporku. Algoritmizace

Více

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

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

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

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

Více

Jazyk C# (seminář 5)

Jazyk C# (seminář 5) Jazyk C# (seminář 5) Pavel Procházka KMI 23. října 2014 Přetěžování metod motivace Představme si, že máme metodu, která uvnitř dělá prakticky to samé, ale liší se pouze parametry V C# můžeme více metod

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

NPRG031 Programování II --- 2/2 Z, Zk NPRG031 Programování II --- 2/2 Z, Zk paralelka Y St 14:00-15:30 v S3 Pavel Töpfer Kabinet software a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer

Více

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice Řídicí příkazy V této kapitole se seznámíte s příkazy, které řídí postup provádění programu Příkazy řízení programu se řadí do třech kategorií: příkazy výběru, kam patří příkazy if a switch, příkazy iterace,

Více