17. Projekt Trojúhelníky

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

Download "17. Projekt Trojúhelníky"

Transkript

1 Projekt Trojúhelníky strana Projekt Trojúhelníky 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 rozhraním v BlueJ se vypisuje a načítá vstup z klávesnice v samostatném okně pojmenovaném Terminál. Pro spuštění vytvořte instanci třídy Trojuhelniky a zavolejte metodu zakladnicyklus(). Výsledek spuštění v BlueJ vidíte na obrázku Obrázek 17.1 Začátek komunikace aplikace Trojúhelníky po spuštění V tomto projektu budeme řešit tyto úkoly: napsat metodu main() pro spuštění aplikace, přidat další variantu trojúhelníka, pro kterou bude aplikace umět spočítat parametry trojúhelníka (rovnostranný trojúhelník), doplnit detekci chybových stavů a generování výjimek do třídy Trojuhelnik, ošetřit vzniklé výjimky ve třídě Trojuhelniky. Tento projekt má následující cíle: ukázat základní použití výčtového typu v Javě, ukázat používání a vytváření statických metod, ukázat používání výjimek v Javě Struktura tříd Projekt Trojúhelníky se skládá z následujících tříd (obrázek z BlueJ): Obrázek 17.2 Diagram tříd aplikace Trojúhelníky z BlueJ

2 Projekt Trojúhelníky strana Popis komunikace mezi objekty Při vytváření instance třídy Trojuhelniky se jednotlivé varianty (instance třídy Varianta) vloží do seznamu. Identifikace varianty se provádí pomocí konstanty z výčtového typu TypTrojuhelnika. Dále je v konstruktoru vytvořena instance třídy CteniZKonzole. Po spuštění metody zakladnicyklus() je vypsáno menu a pomocí instance třídy CteniZKonzole načtena volba uživatele. Cyklus probíhá dokud není zadána volba 1 pro konec. Po načtení volby od uživatele se v metodě zobrazvysledky() zkontroluje platnost volby. Na základě údajů o variantě jsou pomocí třídy CteniZKonzole načteny další údaje o trojúhelníku (délky stran, úhly atd.). Pokud uživatel nezadá číslo, ale např. písmeno A, zopakuje se čtení z konzole. Dostaneme tedy pouze číselné parametry. Pokračuje se voláním statické metody gettrojuhelnik() třídy Trojuhelnik, která na základě varianty a parametrů vrátí instanci třídy Trojuhelnik. Pokud zadané údaje nepředstavují trojúhelník (např. pokud ve variantě pravoúhlý AC je strana A delší než strana C), je vrácena hodnota null. Následně se vypíší informace o trojúhelníku nebo chybové hlášení, pokud trojúhelník nelze vytvořit. Výpis výsledků, když uživatel zadá volbu 0 a délky stran 5 a 8, vidíte na obrázku Obrázek 17.3 Ukázka komunikace s aplikací Trojúhelníky Následující diagram zobrazuje průběh komunikace při dotazu na jeden trojúhelník. Začíná se zobrazením nabídky voleb, končí zobrazením hodnot o trojúhelníku na obrazovce. V diagramu je též zachycen vstup údajů od uživatele.

3 Projekt Trojúhelníky strana 167 Obrázek 17.4 Diagram zobrazuje průběh komunikace při dotazu na jeden trojúhelník

4 Projekt Trojúhelníky strana Popis výčtového typu (enum) TypTrojuhelnika 1 /** 2 * Výčtový typ TypTrojuhelnika představuje jednotlivé typy 3 * trojúhelníků, se kterými umí pracovat třídy aplikace 4 * Trojuhelniky. 5 Jarmila Pavlíčková 6 1.0, duben */ 8 public enum TypTrojuhelnika { 9 PRAVOUHLY_A_B, PRAVOUHLY_A_C, ROVNOSTRANNY; 10 Výčtový typ TypTrojuhelnika obsahuje konstanty představující jednotlivé typy trojúhelníků, pro které aplikace umí vypočítat jejich strany, úhly, obvod a obsah. V deklaraci výčtového typu je již další předpřipravená konstanta ROVNOSTRANNY pro typ trojúhelníka, který máme do aplikace přidat. Výčtový typ se používá na dvou místech: jako datový atribut třídy Varianta, která popisuje podrobnosti o příslušné variantě trojúhelníka (kolik je potřeba zadat hodnot, text dotazů na jednotlivé hodnoty), jako parametr při vytváření vlastního trojúhelníka na základě typu se vybere ve statické metodě gettrojuhelnik() třídy Trojuhelnik příslušná metoda pro vytvoření instance třídy Trojuhelnik Popis kó du tř ídy Trojuhelnik 1 /** 2 * Třída popisuje trojúhelník. 3 * Pr o získání instance existuje větší množství statických 4 * me tod, které vytvářejí trojúhelník na základě jednotlivých 5 * známých parametrů. 6 * 7 Luboš Pavlíček srpen */ 10 public class Trojuhelnik{ 11 // datové atributy trojúhelníka 12 private double stranaa; 13 private double stranab; 14 private double stranac; /** 17 * Vytvoření trojúhelníka při znalosti všech tří stran. 18 */ private Trojuhelnik(double stranaa, double stranab, 21 double stranac) { 22 this.stranaa = stranaa; 23 this.stranab = stranab; 24 this.stranac = stranac; 25 26

5 Projekt Trojúhelníky strana /** 28 * Statická metoda pro získání instance pravoúhlého 29 * trojúhelníka (tj. úhel gama je 90 ) 30 * při zadání velikosti strany A a strany B (tj. obou odvěsen). 31 * 32 stranaa délka strany A 33 stranab délka strany B 34 instance třídy Trojuhelnik, která má úhel gama * a zadanou délku strany A a strany B 36 */ 37 public static Trojuhelnik getpravouhlyab (double stranaa, 38 double stranab) { 39 return new Trojuhelnik(stranaA, stranab, 40 Math.sqrt(stranaA*stranaA + stranab*stranab)); /** 44 * Statická metoda pro získání instance pravoúhlého 45 * trojúhelníka (tj. úhel gama je 90 ) při zadání 46 * velikosti strany A a strany C (tj. jedné odvěsny a přepony). 47 * 48 stranaa délka strany A (odvěsna) 49 stranac délka strany C (přepona) 50 instance třídy Trojuhelnik, která má úhel gama * a zadanou délku strany A a strany C 52 */ 53 public static Trojuhelnik getpravouhlyac (double stranaa, 54 double stranac) { 55 if (stranac <= stranaa) { 56 return null; else { 59 return new Trojuhelnik(stranaA, Math.sqrt(stranaC 60 *stranac - stranaa*stranaa), stranac); /** 65 * Obecná statická metoda pro získání instance trojúhelníka, 66 * kdy je zadán typ trojúhelníka (viz enum TypTrojuhelnika) 67 * a pole s potřebnými parametry. 68 * 69 typ typ trojúhelníka 70 parametry pole s parametry pro příslušný typ 71 * trojúhelníka 72 instance třídy Trojuhelnik příslušného typu 73 * a odpovídající zadaným parametrům 74 */

6 Projekt Trojúhelníky strana public static Trojuhelnik gettrojuhelnik (TypTrojuhelnika typ, 76 double [] parametry) { 77 if (typ == TypTrojuhelnika.PRAVOUHLY_A_B) { 78 if (parametry.length < 2) { 79 return null; return getpravouhlyab(parametry[0], parametry[1]); if (typ == TypTrojuhelnika.PRAVOUHLY_A_C) { 84 if (parametry.length < 2) { 85 return null; return getpravouhlyac(parametry[0], parametry[1]); return null; /** 93 * Vrací délku strany A trojúhelníka 94 * 95 délka strany A trojúhelníka 96 */ 97 public double getstranaa() { 98 return stranaa; /** 102 * Vrací délku strany B trojúhelníka 103 * 104 délka strany B trojúhelníka 105 */ 106 public double getstranab() { 107 return stranab; /** 111 * Vrací délku strany C trojúhelníka 112 * 113 délka strany C trojúhelníka 114 */ 115 public double getstranac() { 116 return stranac; /** 120 * Vrací velikost úhlu alfa (proti straně A) trojúhelníka 121 * ve stupních 122 * 123 velikost úhlu alfa trojúhelníka. 124 */ 125 public double getalfa() { 126 return Math.toDegrees(Math.acos( (stranab*stranab stranac*stranac - stranaa*stranaa)/(2*stranab*stranac))); /** 131 * Vrací velikost úhlu beta (proti straně B) trojúhelníka 132 * ve stupních

7 Projekt Trojúhelníky strana * 134 velikost úhlu beta trojúhelníka. 135 */ 136 public double getbeta() { 137 return Math.toDegrees(Math.acos( (stranaa*stranaa stranac*stranac - stranab*stranab)/(2*stranaa*stranac))); /** 142 * Vrací velikost úhlu gama (proti straně C) trojúhelníka 143 * ve stupních 144 * 145 velikost úhlu gama trojúhelníka. 146 */ 147 public double getgama() { 148 return Math.toDegrees(Math.acos( (stranab*stranab stranaa*stranaa - stranac*stranac)/(2*stranab*stranaa))); /** 153 * Vypočte obvod trojúhelníka. 154 * 155 obvod trojúhelníka 156 */ 157 public double obvod () { 158 return (stranaa + stranab + stranac); /** 162 * Vypočte obsah trojúhelníka. 163 * 164 obsah trojúhelníka 165 */ 166 public double obsah () { 167 double polobvod=obvod()/2; 168 return Math.sqrt(polObvod*(polObvod-stranaA) *(polobvod- 169 stranab) * (polobvod - stranac)); Třída Trojuhelnik představuje trojúhelník a poskytuje metody pro výpočet jeho parametrů (tj. úhly, obvod a obsah). V konstruktoru třídy předpokládáme, že trojúhelník je vždy zadán třemi stranami. Tento konstruktor je deklarován jako private a tudíž ho nelze spustit mimo třídu. Jednotlivé instance trojúhelníků, zadávané podle volby uživatele, nejsou tedy vytvářeny přímo voláním konstruktoru, ale pomocí statické metody gettrojuhelnik(), ve které se udává typ trojúhelníka (konstanta z TypTrojuhelnika). Toto řešení (privátní konstruktor) je zvoleno z toho důvodu, že přes konstruktory není možné rozlišit jednotlivé typy trojúhelníků, neboť některé varianty se neliší pořadím či počtem parametrů (např. trojúhelník se třemi libovolnými stranami má tři vstupní parametry, trojúhelník se dvěmi stranami a jedním úhlem má také tři vstupní parametry). Metoda gettrojuhlenik podle konstanty výčtového typu TypTrojuhelnika zavolá odpovídající statickou metodu. Metoda zkontroluje validitu dat (např. v pravoúhlém trojúhelníku nesmí být strana A delší než strana C) a případně dopočítá chybějící strany trojúhelníka, aby mohla spustit konstruktor. Jsou vytvořeny dvě takové metody getpravouhlyab() a getpravouhlyac(), které pomocí Pythagorovy věty dopočítávají třetí stranu trojúhelníka. Ostatní metody ve třídě Trojuhelnik jsou již metodami instance a pro vytvořený trojúhelník spočítají úhly, obvod a obsah.

8 Projekt Trojúhelníky strana Popis kódu třídy Trojuhelniky 1 import java.util.arraylist; 2 import java.util.list; 3 /** 4 * Základní třída aplikace Trouhelniky zobrazuje nabídku. 5 * Na základě vybrané varianty se zeptá na příslušné parametry 6 * a poté zobrazí informace o trojúhelníku. 7 * 8 Luboš Pavlíček srpen */ 11 public class Trojuhelniky { private List<Varianta> varianty; 14 private CteniZKonsole vstup; 15 /** 16 * Vytváří instanci třídy Trojuhelniky 17 */ 18 public Trojuhelniky() { 19 varianty = new ArrayList<Varianta>(); 20 varianty.add(new Varianta(TypTrojuhelnika.PRAVOUHLY_A_B, 21 "Pravoúhlý trojúhelník, známy strany A a B", 22 "délka strany A", "délka strany B", null)); 23 varianty.add(new Varianta(TypTrojuhelnika.PRAVOUHLY_A_C, 24 "Pravoúhlý trojúhelník, známy strany A a C", 25 "délka strany A", "délka strany C", null)); 26 vstup = new CteniZKonsole(); /** 30 * Metoda zobrazí nabídku z pole variant a přidá volbu Konec. 31 */ 32 private void zobraznabidku() { 33 for (int i = 0; i< varianty.size(); i++) { 34 Varianta var = varianty.get(i); 35 System.out.printf("%2d. %s%n",i,var.getpopis()); System.out.println("-1. Konec"); /** 41 * Metoda pro přístušnou volbu načte potřebné parametry, 42 * vytvoří Trojuhelnik a zobrazí informace o trojúhelniku. 43 * 44 volba - zvolená varianta z pole varianty 45 */ 46 private void zobrazvysledky(int volba) { 47 if ((volba < 0) (volba >= varianty.size())) { 48 System.out.println("tuto volbu neznam"); 49 return; Varianta var = varianty.get(volba); 52 String dotaz1=var.getdotaz1(); 53 String dotaz2=var.getdotaz2(); 54 String dotaz3=var.getdotaz3(); 55 double [] parametry = new double[var.getpocetparametru()];

9 Projekt Trojúhelníky strana if (dotaz1!= null) { 57 parametry[0] = vstup.getdouble(dotaz1); if (dotaz2!= null) { 60 parametry[1] = vstup.getdouble(dotaz2); if (dotaz3!= null) { 63 parametry[2] = vstup.getdouble(dotaz3); Trojuhelnik troj = Trojuhelnik.getTrojuhelnik(var.getTyp(), 66 parametry); 67 if (troj == null) { 68 System.out.println("!!! metoda gettrojuhelnik nevratila 69 pro zadane parametry trojuhelnik!!!!"); 70 System.out.println("\t typ: " + var.gettyp()); 71 for (int i=0; i < parametry.length; i++) { 72 System.out.printf("\tparametry[%d] : %f%n" 73 i,parametry[i]); else { 77 System.out.println("=== parametry trojuhelniku ==="); 78 System.out.printf(" strany: a=%14f b=%14f c=%14f%n", 79 troj.getstranaa(),troj.getstranab(), 80 troj.getstranac()); 81 System.out.printf(" uhly: alfa=%11f beta=%11f 82 gama=%11f%n",troj.getalfa(), 83 troj.getbeta(),troj.getgama()); 84 System.out.printf(" obvod: %f%n",troj.obvod()); 85 System.out.printf(" obsah: %f%n%n",troj.obsah()); /** 90 * Metoda přečte volbu uživatele. 91 * Neprovádí se kontrola přípustnosti vstupu. 92 * 93 volba uživatele 94 */ 95 private int nactivolbu() { 96 return vstup.getint("zadej volbu"); /** 100 * Metoda zajišťuje základní cyklus aplikace. Tj. 101 * <UL> 102 * <LI>zobrazení menu 103 * <LI>načtení volby od uživatele 104 * <LI>načtení potřebných parametrů 105 * <LI>zobrazení informací o trojúhelníku 106 * </UL> 107 * Toto pořadí se opakuje do té doby, než uživatel zvolí 108 * volbu Konec. 109 */

10 Projekt Trojúhelníky strana public void zakladnicyklus() { 111 int volba = 0; 112 zobraznabidku(); 113 volba = nactivolbu(); 114 while (volba!= -1) { 115 zobrazvysledky(volba); 116 zobraznabidku(); 117 volba = nactivolbu(); System.out.println("Konec programu"); Všimněte si v metodě zobraznabidku() způsobu procházení seznamu pomocí cyklu for s řídící proměnnou cyklu tato varianta je zvolena, aby bylo možné vypsat i pořadové číslo nabídky. U některých výstupů je použito formátování řetězců v metodě printf viz popis třídy String v kapitole Postup řešení Vytvoření metody main, pro spouštění aplikace z příkazové řádky Jak bylo uvedeno v úvodu, při spuštění projektu vytvoříme instanci třídy Trojuhelniky a zavoláme metodu zakladnicyklus(). Do metody main ve třídě Trojuhelniky tento postup zapíšeme v kódu: 1 /** 2 * Metoda main pro spuštění aplikace 3 * 4 args pole argumentů vstupní řádky nezpracovávají se 5 */ 6 public static void main (String [] args) { 7 Trojuhelniky troj = new Trojuhelniky(); 8 troj.zakladnicyklus(); Přidání nového typu trojúhelníka (rovnostranného) Typ ROVNOSTRANNY je již ve výčtovém typu TypTrojuhelnika uveden. Musíme provést změny pouze ve třídách Trojuhelnik a Trojuhelniky. Ve třídě Trojuhelniky doplníme do seznamu variant (datový atribut varianty typu List 37 na řádku 13 výpisu třídy Trojuhelniky) novou variantu s těmito parametry: prvním parametrem je typ trojúhelníka použijeme konstantu ROVNOSTRANNY z výčtového typu TypTrojuhelnika, druhým parametrem je text zobrazovaný v nabídce vypíše se Rovnostranný trojúhelník, třetím až pátým parametrem jsou texty dotazů na hodnoty vkládané uživatelem první dotaz bude na délku strany ( délka strany ), více dotazů není potřeba, proto za čtvrtý a pátý parametr použijeme konstantu null. Následující kód přidáme do třídy Trojuhelniky za řádek číslo 25. varianty.add(new Varianta(TypTrojuhelnika.ROVNOSTRANNY, "Rovnostranný trojúhelník", "délka strany",null,null)); 37 Datový atribut varianty je typu List, konkrétní instance je typu ArrayList, viz volání konstruktoru na řádku 19 zdrojového kódu třídy Trojuhelnik.

11 Projekt Trojúhelníky strana 175 Další úpravy se budou týkat kódu třídy Trojuhelnik. Musíme napsat statickou metodu getrovnostranny(), která na základě délky strany (parametru) vytvoří instanci trojúhelníka. Kód této metody je uveden v následujícím výpisu: 1 /** 2 * Statická metoda pro získání instance rovnostranného 3 *trojúhelníka při zadání velikosti strany. 4 * 5 strana délka strany 6 instance třídy Trojuhelnik, která má všechny úhly 60 7 * a zadanou délku strany 8 */ 9 public static Trojuhelnik getrovnostranny (double strana) { 10 return new Trojuhelnik(strana, strana, strana); 11 Dále upravíme kód metody gettrojuhelnik(), která dle typu trojúhelníka rozhodne, kterou konkrétní metodu pro vytvoření trojúhelníka zavolá. Do kódu této metody připíšeme rozhodování pro typ ROVNOSTRANNY spustí se metoda getrovnostranny(). Následující kód se umístí do metody gettrojuhelnik() za řádek 88 ve výpisu kódu třídy. if (typ == TypTrojuhelnika.ROVNOSTRANNY){ if (parametry.length < 1){ return null; return getrovnostranny(parametry[0]); Zjišťování chyb ve třídě Trojuhelnik, generování výjimek Aplikace již funguje téměř dobře, chybí ale detekce některých chybových stavů. Na následujícím obrázku je vidět situace, že lze zadat trojúhelník se zápornou délkou strany. Obrázek 17.5 Výpis aplikace při zadání záporné délky strany Některé chybové stavy jsou již detekovány, obecnost chybového hlášení příliš nepomůže s určením důvodu problému. Chyba se projeví např. při zadání stejně dlouhé strany a a c u pravoúhlého trojúhelníka. Obrázek 17.6 Chybové hlášení při zadání stejných délek stran A a C

12 Projekt Trojúhelníky strana 176 Pro detekci chybových stavů se většinou používá příkaz if s příslušnými podmínkami. Je potřeba však ještě vyřešit způsob, jak předat informaci o chybě včetně vhodného popisu z místa detekce na místo, kde se může chyba ošetřit (např. vypsat hlášení uživateli). Někdy máme štěstí, detekce a ošetření chyby je na jednom místě. Častější je, že se jedná o různá místa v kódu aplikace, často i o různé třídy. Ve většině současných jazyků lze použít dva mechanismy: Přes návratovou hodnotu metody tento způsob je již nyní použit např. při kontrole, zda strana c je delší než strana a, podívejte se na řádky 55 až 57 ve třídě Trojuhelnik. V případě chybového stavu se vrací hodnota null. Nevýhodou tohoto mechanismu jsou komplikace při návrhu a používání metod a omezené možnosti informování o chybových stavech. Tento mechanismus též nelze použít v konstruktorech (konstruktory nemají návratovou hodnotu). Pomocí výjimek, kdy někam umístíme kód ošetřující chybu (blok try catch) a jinam umístíme kód oznamující, že vznikla chyba (vyvolání výjimky pomocí throw). Nevýhodou výjimek je jejich pomalost, výhodou jednodušší návrh metod, přehlednější kód. My budeme používat mechanismus výjimek při zjištění chybného vstupního parametru (např. záporná délka strany) vygenerujeme výjimku IllegalArgumentException. Tato standardní výjimka svým názvem dobře vystihuje charakter chyby, je zbytečné vytvářet vlastní výjimky. Ošetření chybových stavů výpis vhodného chybového hlášení umístíme do třídy Trojuhelniky, neboť je vhodné operace pro komunikaci s uživatelem soustředit do jedné třídy (je to přehlednější, jednoznačně jsou rozděleny funkce mezi třídy, usnadní to v budoucnu výměnu textového rozhraní za grafické). V konstruktoru třídy Trojuhelnik budeme detekovat dva chybové stavy délka některé strany je menší nebo rovna nule a součet libovolných stran je menší nebo roven straně třetí: /** * Vytvoření trojúhelníka při znalosti všech tří stran. IllegalArgumentException - pokud je některá * strana <= 0 nebo pokud je součet libovolných dvou stran menší.* či roven straně třetí */ private Trojuhelnik(double stranaa, double stranab, double stranac) throws IllegalArgumentException { if ((stranaa <=0) ( stranab <= 0) (stranac <= 0)) { throw new IllegalArgumentException( "strana trojúhelníka musí být větší než 0"); if ((stranaa + stranab <= stranac) (stranaa + stranac <= stranab) (stranab + stranac <= stranac)) { throw new IllegalArgumentException("součet dvou stran "+ "trojúhelníka musí být větší než strana třetí"); this.stranaa = stranaa; this.stranab = stranab; this.stranac = stranac; Všimněte si, že popis výjimky je uveden i v dokumentačních komentářích. V hlavičce metody nemusí být v našem případě uvedeno throws IllegalArgumentException, neboť tato výjimka nepatří mezi povinně odchytávané, je však vhodnější ji uvádět, neboť čtenář kódu si možnosti vzniku výjimky všimne hned na začátku metody. Metodu getpravouhlyab() nebudeme doplňovat o detekci chybových stavů všechny v úvahu přicházející chybové stavy budou detekovány v konstruktoru třídy Trojuhelnik. Je však opět vhodné doplnit komentáře k metodě o možnost vzniku výjimky, podobně i hlavičku metody o throws. V metodě getpravouhlyac() nahradíme vracení hodnoty null generováním výjimky:

13 Projekt Trojúhelníky strana 177 public static Trojuhelnik getpravouhlyac (double stranaa, double stranac) throws IllegalArgumentException { if (stranac <= stranaa) { throw new IllegalArgumentException("u pravoúhlého " + "trojúhelníka musí být strana C větší než strana A"); else { return new Trojuhelnik(stranaA, Math.sqrt(stranaC*stranaC - stranaa*stranaa), stranac); Obdobně v metodě gettrojuhelnik() nahradíme vracení hodnoty null generováním výjimky: throw new IllegalArgumentException( "nedostatečný počet parametrů v poli"); Ošetřování výjimek ve třídě Trojuhelniky Používání výjimek má jednu výhodu pokud je programátor neošetří, použije se standardní mechanismus ošetření vypíší se informace o chybě a aplikace se ukončí. Pokud nyní zadáme zápornou délku strany, tak se zobrazí na konzole následující výpis: Obrázek 17.7 Výpis aplikace při zadání záporné délky strany Z tohoto popisu chyby bude programátor většinou nadšen ve výpisu vidí typ a popis chyby i kde v kódu ji má hledat výjimka IllegalArgumentException vznikla na řádku 25 v konstruktoru třídy Trojuhelnik a konstruktor byl volán z metody getpravouhlyab() na řádku 46. Tato metoda byla volána z metody gettrojuhelnik(), ta byla volána z metody zobrazvysledky() ve třídě Trojuhelniky, atd. Spokojenost uživatele však bude minimální. Výjimky budeme odchytávat a ošetřovat ve druhé části metody zobrazvysledky(). Umístíme sem konstrukci try catch, v bloku try bude volání metody gettrojuhelnik() a výpis parametrů trojúhelníka při správně zadaných parametrech. Blok catch bude pouze jeden, v něm budeme odchytávat výjimku IllegalArgumentException. Zprávu předávanou přes výjimku získáme pomocí metody getmessage(). private void zobrazvysledky(int volba) { if ((volba < 0) (volba >= varianty.size())) { System.out.println("tuto volbu neznam"); return; Varianta var = varianty.get(volba); String dotaz1=var.getdotaz1(); String dotaz2=var.getdotaz2(); String dotaz3=var.getdotaz3(); double [] parametry = new double[var.getpocetparametru()];

14 Projekt Trojúhelníky strana 178 if (dotaz1!= null) { parametry[0] = vstup.getdouble(dotaz1); if (dotaz2!= null) { parametry[1] = vstup.getdouble(dotaz2); if (dotaz3!= null) { parametry[2] = vstup.getdouble(dotaz3); try { Trojuhelnik troj = Trojuhelnik.getTrojuhelnik(var.getTyp(), parametry); System.out.println("=== parametry trojuhelniku ==="); System.out.printf(" strany: a=%14f b=%14f c=%14f%n", troj.getstranaa(),troj.getstranab(),troj.getstranac()); System.out.printf(" uhly: alfa=%11f beta=%11f gama=%11f%n", troj.getalfa(),troj.getbeta(),troj.getgama()); System.out.printf(" obvod: %f%n",troj.obvod()); System.out.printf(" obsah: %f%n%n",troj.obvod()); catch (IllegalArgumentException exc) { System.out.println("!!! chybné vstupní parametry: "+ exc.getmessage()); System.out.println("\t typ: " + var.gettyp()); for (int i=0; i < parametry.length; i++) { System.out.printf("\t parametry[%d] : %f%n", i, parametry[i]); Domácí úkoly 1. Doplňte aplikaci o další typy trojúhelníků: - obecný trojúhelník, zadány tři strany, - obecný trojúhelník, zadány dvě strany a úhel, - obecný trojúhelník, zadány dva úhly a strana. U všech typů doplňte i kontrolu, zda zadané údaje opravdu představují trojúhelník (libovolný úhel i součet dvou úhlů musí být menší než 180 stupňů, součet dvou stran trojúhelníka musí být vždy větší než třetí strana atd.). 2. Upravte aplikaci, aby se varianty při výpisu číslovaly od jedničky a ne od nuly. 3. Upravte předchozí projekt Kalkulačka tak, aby používal pro uložení operace výčtový typ (enum). 4. Nastudujte v dokumentaci Javy možnosti rozšiřování výčtového typu enum a zkuste sloučit třídu Varianta a výčtový typ TypTrojuhelnika do jednoho výčtového typu.

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

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

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

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

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

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

19. Projekt Adventura

19. Projekt Adventura Projekt Adventura strana 189 19. Projekt Adventura 19.1. Základní popis, zadání úkolu Pracujeme na projektu Adventura, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy Hra.

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

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

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

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

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

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah: Obsah: Testování... 1 Zadání příkladu... 1 Vytvoření kostry třídy... 1 Napsání testů... 2 Testy správnosti... 3 Testy výjimek... 3 Testy vztahů/závislostí... 4 Zdrojový text testu... 4 Spuštění testů...

Více

Více o konstruktorech a destruktorech

Více o konstruktorech a destruktorech Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení

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

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

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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

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

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

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

Operační systémy. Cvičení 4: Programování v C pod Unixem

Operační systémy. Cvičení 4: Programování v C pod Unixem Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné

Více

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

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 Ú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 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací

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

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

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch. 1. ŘEŠENÉ PŘÍKLADY 1.2 PŘÍKLAD 24-2-8-2_DOKONALÉ ČÍSLO Napište program, který má na vstupu přirozené číslo N > 1. Výstupem je informace o tom, zda toto číslo je/není dokonalé. (Dokonalé číslo je takové

Více

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

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

1. Téma 03 - Rozhodování

1. Téma 03 - Rozhodování 1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java 1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice

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

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

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

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

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit

Více

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

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

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans. 1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými

Více

OOPR_05. Případové studie

OOPR_05. Případové studie OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára

Více

Překladač a jeho struktura

Překladač a jeho struktura Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice

Více

Semestrální práce 2 znakový strom

Semestrální práce 2 znakový strom Semestrální práce 2 znakový strom Ondřej Petržilka Datový model BlockFileRecord Bázová abstraktní třída pro záznam ukládaný do blokového souboru RhymeRecord Konkrétní třída záznamu ukládaného do blokového

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

"Václav Klaus". public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) {

Václav Klaus. public class Clovek { protected String jmeno; protected int roknarozeni; public Clovek(String j, int rn) { 4. Třída versus objekt Co je třída a objekt? Třída (také poněkud nepřesně zvaná objektový typ) představuje skupinu objektů, které nesou stejné vlastnosti "stejné" je myšleno kvalitativně, nikoli kvantitativně,

Více

Obrázek. Základní popis, zadání úkolu. Struktura tříd,

Obrázek. Základní popis, zadání úkolu. Struktura tříd, Obrázek Základní popis, zadání úkolu Pracujeme na projektu Domecek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy Obrazek a zavoláme metodu kresli(). Výsledkem

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

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

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník 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 Abstraktní datové typy omezené rozhraní

Více

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus Pracovní listy - programování (algoritmy v jazyce Visual Basic) Předmět: Seminář z informatiky a výpočetní techniky Třída: 3. a 4. ročník vyššího stupně gymnázia Algoritmus Zadání v jazyce českém: 1. Je

Více

Množina v C++ (set, multiset).

Množina v C++ (set, multiset). Množina v C++ (set, multiset). Množina je datová struktura, ve které jsou uloženy nějaké prvky. V množině nesmí být dva stejné prvky. Naopak multimnožina může obsahovat i stejné prvky. Nad množinou lze

Více

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Java aplety. Předávání parametrů z HTML

Java aplety. Předávání parametrů z HTML Java aplety Aplety jsou speciální formou Java aplikací - mohou být spouštěny z prostředí WWW prohlížeče. Aby je prohlížeč spustil, musíme vložit do HTML stránky potřebné příkazy:

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

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

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

11. Dědičnost. Dědičnost strana 103

11. Dědičnost. Dědičnost strana 103 Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

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

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

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

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

První kapitola úvod do problematiky

První kapitola úvod do problematiky První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru

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

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

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

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

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 Procesy, vlákna 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 Implementace vláken one-to-one o implementace na úrovni jádra o každé vlákno je pro

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty 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 C E T

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

7. Dynamické datové struktury

7. Dynamické datové struktury 7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.

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

Programy na PODMÍNĚNÝ příkaz IF a CASE

Programy na PODMÍNĚNÝ příkaz IF a CASE Vstupy a výstupy budou vždy upraveny tak, aby bylo zřejmé, co zadáváme a co se zobrazuje. Není-li určeno, zadáváme přirozená čísla. Je-li to možné, používej generátor náhodných čísel vysvětli, co a jak

Více

Stručný návod k programu Octave

Stručný návod k programu Octave Stručný návod k programu Octave Octave je interaktivní program vhodný pro technické výpočty. Je nápadně podobný programu MATLAB, na rozdíl od něho je zcela zadarmo. Jeho domovská vebová stránka je http://www.octave.org/,

Více

Remote Method Invocation RMI

Remote Method Invocation RMI Remote Method Invocation RMI Java TM Remote Method Invocation (RMI) umožňuje objektu na jedné Java Virtual Mashine(JVM) jednoduše spustit metodu jiného objektu na vzdálené JVM. Při volání vzdálené metody

Více

Kód. Proměnné. #include using namespace std; int main(void) { cout << "Hello world!" << endl; cin.get(); return 0; }

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << Hello world! << endl; cin.get(); return 0; } Jazyk C++ Jazyk C++ je nástupcem jazyka C. C++ obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Dědičnost tříd Dědičnost umožňuje vytvářet nové třídy z tříd existujících tak, že odvozené třídy (tzv. potomci) dědí vlastnosti

Více

Syntaxe vyjímek. #include #include using namespace std; // Trida vyjimek class Vyjimka { private:

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private: Vyjímky. Pod pojmem výjimka se rozumí nějaká výjimečná situace, která nastane v dané funkci. V jazyce C i C++ se často používá návratových hodnot funkcí, které vracejí úspěšnost provádění nějaké operace

Více

Konvertor diakritiky 3. Instalace

Konvertor diakritiky 3. Instalace OBSAH Popis... 2 Ovládání aplikace... 3 Odstranění diakritických znamének... 4 Operace s textem... 4 Nastavení aplikace... 4 Písmo... 4 Jazyk... 4 Přidání dalšího jazyka do aplikace... 5 Znaky... 5 Instalace

Více

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

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd 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 Prostory jmen motivace spolupráce

Více

Operační systémy. Cvičení 3: Programování v C pod Unixem

Operační systémy. Cvičení 3: Programování v C pod Unixem Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s

Více

Přehled probírané látky

Přehled probírané látky OOPR_04 1 Přehled probírané látky asociace (relace) mezi třídami popis množiny spojení mezi objekty skládání objektů - upřesněný typ asociace, vazba mezi objekty kompozice objektů (velmi pevná vazba mezi

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Vstup a výstup v C++ Proudy pro standardní vstup a výstup V jazyce C++ provádíme textový vstup a výstup prostřednictvím tzv. datových proudů Datové

Více

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

boolean hasnext() Object next() void remove() Kolekce 11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída

Více

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

Rozklad problému na podproblémy

Rozklad problému na podproblémy Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy zadaný problém rozložíme na podproblémy pro řešení podproblémů zavedeme abstraktní příkazy s pomocí abstraktních

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

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury, standardní metody Problematika načítání pomocí Scanner Některé poznámky k příkazům Psaní kódu programu Metody třídy Math Obalové třídy primitivních datových

Více

Vector datový kontejner v C++.

Vector datový kontejner v C++. Vector datový kontejner v C++. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb.

Více

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

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;

Více

Konstruktory překladačů

Konstruktory překladačů Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v

Více

Práce se soubory v Javě

Práce se soubory v Javě Práce se soubory v Javě Cílem kapitoly je naučit pracovat se soubory a adresáři v Javě. Na jednoduchých příkladech ukázat procházení adresáře, čtení z textového souboru a zápis do textového souboru. Klíčové

Více

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.

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. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru

Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru Programování v jazyce C pro chemiky (C2160) 5. Čtení dat ze souboru Čtení dat ze souboru FILE *f = NULL; char str[10] = ""; float a = 0.0, b = 0.0; Soubor otevíráme v režimu pro čtení "r" f = fopen("/home/martinp/testdata/test1.txt",

Více