17. Projekt Trojúhelníky

Save this PDF as:
 WORD  PNG  TXT  JPG

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích.

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích. Sun, Sun Microsystems, Java a všechny obchodní známky a loga obsahující Sun nebo Java jsou ochrannými známkami nebo registrovanými ochrannými známkami firmy Sun Microsystems, Inc. v USA a v ostatních zemích.

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

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

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

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

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

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

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

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

3. Třídy. Základní pojmy objektového programování. Třídy

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

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

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

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

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat QA & Dokumentace Agenda Docházka Návrat k minulému praktickému cvičení Zápočtové práce QA opakování Dokumentace Co, jak a proč dokumentovat Dotazy, přání, stížnosti Kde je chyba? public static StringBuilder

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

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

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

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

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné

Více

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz) Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz) Autor: Radek Vystavěl Díl 12: Algebra Lineární transformace MATEMATIKA Lineární transformace, neboli přeet hodnoty x podle

Více

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro: 21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)

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

PHP tutoriál (základy PHP snadno a rychle)

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

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

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury 1 / 34 Obsah přednášky Základní řídící struktury posloupnost příkazů podmínka cyklus s podmínkou na začátku cyklus s podmínkou na konci cyklus s pevným počtem opakování Jednoduchá

Více

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

Čísla a číselné soustavy.

Čísla a číselné soustavy. Čísla a číselné soustavy. Polyadické soustavy. Převody mezi soustavami. Reprezentace čísel. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK.

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

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

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Úvod do programování. Lekce 5

Úvod do programování. Lekce 5 I N V E S T I C E D O R O Z V O J E V Z D Ě L Á V Á N Í Inovace a zvýšení atraktivity studia optiky reg. č.: CZ.1.07/2.2.00/07.0289 Úvod do programování Lekce 5 Tento projekt je spolufinancován Evropským

Více

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

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <-> Znaky každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak číslo) kódování jiný příklad kódování existuje mnoho kódů pojmy: morseova abeceda problémy o znaková sada které znaky

Více

Dotazy tvorba nových polí (vypočítané pole)

Dotazy tvorba nových polí (vypočítané pole) Téma 2.4 Dotazy tvorba nových polí (vypočítané pole) Pomocí dotazu lze také vytvářet nová pole, která mají vazbu na již existující pole v databázi. Vznikne tedy nový sloupec, který se počítá podle vzorce.

Více

Vstupní požadavky, doporučení a metodické pokyny

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

map, multimap - Asociativní pole v C++.

map, multimap - Asociativní pole v C++. map, multimap - Asociativní pole v C++. Jedná se o asociativní pole. V asociativním poli jsou uloženy hodnoty ve tvaru (klíč,hodnota), kde klíč je vlastně "index" prvku. Klíčem může být libovolný objekt,

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

10 Balíčky, grafické znázornění tříd, základy zapozdření

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření 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 balíčkům, grafickému

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

Více

Úvod. Program ZK EANPRINT. Základní vlastnosti programu. Co program vyžaduje. Určení programu. Jak program spustit. Uživatelská dokumentace programu

Úvod. Program ZK EANPRINT. Základní vlastnosti programu. Co program vyžaduje. Určení programu. Jak program spustit. Uživatelská dokumentace programu sq Program ZK EANPRINT verze 1.20 Uživatelská dokumentace programu Úvod Základní vlastnosti programu Jednoduchost ovládání - umožňuje obsluhu i málo zkušeným uživatelům bez nutnosti většího zaškolování.

Více

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM CÍLE KAPITOLY Využívat pokročilé možnosti formátování, jako je podmíněné formátování, používat vlastní formát čísel a umět pracovat s listy. Používat

Více

MS Excel 2007 Kontingenční tabulky

MS Excel 2007 Kontingenční tabulky MS Excel 2007 Kontingenční tabulky Obsah kapitoly V této kapitole se seznámíme s nástrojem, který se používá k analýze dat rozsáhlých seznamů. Studijní cíle Studenti budou umět pro analýzu dat rozsáhlých

Více

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti Práce s databází Specifikace JDBC Pro práci s relačními databázemi poskytuje Java rozhraní JDBC Java Database Connectivity. Specifikace tohoto rozhraní má několik verzí. Verze 1.x je součástí SDK již od

Více

Implementační manuál aplikace Essox Lite pro programátora/webmastera e-shopu

Implementační manuál aplikace Essox Lite pro programátora/webmastera e-shopu Implementační manuál aplikace Essox Lite pro programátora/webmastera e-shopu Obchodní a technická podpora ESSOX: Marek Ťoupalík, tel: 724366204, e-mail: marek.toupalik@essox.cz Obsah Úvod... 2 Implementace...

Více

MS Excel 2010. Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

MS Excel 2010. Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU MS Excel 2010 Základy maker Operační program Vzdělávání pro konkurenceschopnost Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU Registrační číslo: CZ.1.07/2.2.00/15.0224, Oblast podpory:

Více

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

Prezentace a vysvětlení programového prostředí NXC Úvod Další jazyk, který je možno použít pro programování NXT kostky je NXC Not exatly C Na rozdíl od jazyku NXT-G, kde jsme vytvářeli program pomocí grafických prvků přesněji řečeno pomocí programovacích

Více

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0; Iterátory v C++. Iterátor v C++ je vlastně taková obdoba ukazatelů pro kontejnery. Dříve, než se dostaneme k bližšímu vysvětlení pojmu iterátor, ukážeme si jednoduchý příklad, jak pracovat s obyčejným

Více

Tematický celek 03 - Cvičné příklady

Tematický celek 03 - Cvičné příklady Tematický celek 03 - Cvičné příklady Cvičný 1 Dim a As Object Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Proceruda tlačítka "Vlož obsah

Více

Povrchy, objemy. Krychle = = = + =2 = 2 = 2 = 2 = 2 =( 2) + = ( 2) + = 2+ =3 = 3 = 3 = 3 = 3

Povrchy, objemy. Krychle = = = + =2 = 2 = 2 = 2 = 2 =( 2) + = ( 2) + = 2+ =3 = 3 = 3 = 3 = 3 y, objemy nám vlastně říká, kolik tapety potřebujeme k polepení daného tělesa. Základní jednotkou jsou metry čtverečné (m 2 ). nám pak říká, kolik vody se do daného tělesa vejde. Základní jednotkou jsou

Více

DATABÁZE MS ACCESS 2010

DATABÁZE MS ACCESS 2010 DATABÁZE MS ACCESS 2010 KAPITOLA 5 PRAKTICKÁ ČÁST TABULKY POPIS PROSTŘEDÍ Spuštění MS Access nadefinovat název databáze a cestu k uložení databáze POPIS PROSTŘEDÍ Nahoře záložky: Soubor (k uložení souboru,

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

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP Application Note #05/14: Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP Požadavky: OMC8000 má přiřazenu IP adresu (statickou, nebo pomocí DHCP), označme ji OMC8000_IP Na straně PC máte spuštěného

Více

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení Microsoft Access Databáze je seskupení většího množství údajů, které mají určitou logiku a lze je určitým způsobem vyhodnocovat, zpracovávat a analyzovat Access je jedním z programů určených pro zpracování

Více

InputStream. FilterInputStream

InputStream. FilterInputStream 6. Vstupy a výstupy Pro práci se vstupy a výstupy nám Java poskytuje celou řadu tříd a jejich metod. Jsou uloženy v balíku java.io. Tato knihovna je založena na mechanizmu tzv. vstupních a výstupních proudů

Více

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto: 20. Programovací techniky: Abstraktní datový typ, jeho specifikace a implementace. Datový typ zásobník, fronta, tabulka, strom, seznam. Základní algoritmy řazení a vyhledávání. Složitost algoritmů. Abstraktní

Více

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování Vzdělávací oblast Informatika a informační a komunikační technologie pro vzdělávací obor Programování

Více

K OZA SE PASE NA POLOVINĚ ZAHRADY Zadání úlohy

K OZA SE PASE NA POLOVINĚ ZAHRADY Zadání úlohy Koza se pase na polovině zahrady, Jaroslav eichl, 011 K OZA E PAE NA POLOVINĚ ZAHADY Zadání úlohy Zahrada kruhového tvaru má poloměr r = 10 m. Do zahrady umístíme kozu, kterou přivážeme provazem ke kolíku

Více

Reporting. Ukazatele je možno definovat nad libovolnou tabulkou Helios Orange, která je zapsána v nadstavbě firmy SAPERTA v souboru tabulek:

Reporting. Ukazatele je možno definovat nad libovolnou tabulkou Helios Orange, která je zapsána v nadstavbě firmy SAPERTA v souboru tabulek: Finanční analýza Pojem finanční analýza Finanční analýza umožňuje načítat data podle dimenzí a tyto součty dlouhodobě vyhodnocovat. Pojem finanční analýza není nejpřesnější, protože ukazatele mohou být

Více

Google Apps. kalendář 2. verze 2012

Google Apps. kalendář 2. verze 2012 Google Apps kalendář verze 0 Obsah Obsah... Úvod... Vytvoření události... Vytvoření události v daném čase... Vytvoření celodenní události... 6 Vytvoření opakované události... 6 Vytvoření vícedenní události...

Více

KAPITOLA 2. Hádání slov ( šibenice ) Jakou hru budete tvořit

KAPITOLA 2. Hádání slov ( šibenice ) Jakou hru budete tvořit KAPITOLA 2 Hádání slov ( šibenice ) Jakou hru budete tvořit Obsahem této kapitoly je vytvoření hry, ve které se hráč snaží uhodnout slovo pomocí hádání jednotlivých písmen během omezeného počtu pokusů.

Více

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

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

Internet - internetové prohlížeče

Internet - internetové prohlížeče Název školy: Střední odborná škola stavební Karlovy Vary Sabinovo náměstí 16, 360 09 Karlovy Vary Autor: Ing. Hana Šmídová Název materiálu: VY_32_INOVACE_09_INTERNET_P2 Číslo projektu: CZ 1.07/1.5.00/34.1077

Více

Základy HTML, URL, HTTP, druhy skriptování, formuláře

Základy HTML, URL, HTTP, druhy skriptování, formuláře Základy HTML, URL, HTTP, druhy skriptování, formuláře Skriptování na straně klienta a serveru Skriptování na straně klienta se provádí pomocí programovacího jazyka JavaScript, který je vkládán do HTML

Více

Datové struktury strana 81

Datové struktury strana 81 Datové struktury strana 81 10. Datové struktury Tato kapitola popisuje, jak uchovávat více instancí stejného typu (stejné třídy) nebo jeho podtypů. Vzhledem k tomu, že je to poměrně častá úloha, většina

Více

Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny

Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny Knihovna XmlLib TXV 003 63.01 druhé vydání říjen 2012 změny vyhrazeny 1 TXV 003 63.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá XmlLib_v13 Říjen 2012 2 Druhé vydání,

Více

Programování v jazyku LOGO - úvod

Programování v jazyku LOGO - úvod Programování v jazyku LOGO - úvod Programovací jazyk LOGO je určen pro výuku algoritmizace především pro děti školou povinné. Programovací jazyk pracuje v grafickém prostředí, přičemž jednou z jeho podstatných

Více

Vyúčtování daně z příjmu ve Mzdách Profi 2015

Vyúčtování daně z příjmu ve Mzdách Profi 2015 Vyúčtování daně z příjmu ve Mzdách Profi 2015 Rozsáhlý formulář Vyúčtování daně se dosud podával klasicky na tištěném formuláři, přičemž program Mzdy Profi pro něj sestavil a vytisknul podklad pro vyplnění.

Více

Hodnocení soutěžních úloh

Hodnocení soutěžních úloh Hodnocení soutěžních úloh Superciferný součet Koeficient 1 Kategorie mládež Soutěž v programování 24. ročník Krajské kolo 2009/2010 15. až 17. dubna 2010 Vaší úlohou je vytvořit program, který spočítá

Více

1 Příklady pro druhý semestr PGL

1 Příklady pro druhý semestr PGL 1 Příklady pro druhý semestr PGL Jiří Fišer 1.1 Formátovač 1.1.1 Vytvoření aplikace pro snadné vytváření jednoduše strukturovaných dokumentů. Strukturované dokumenty musí podporovat sekce (=kapitoly) a

Více

1 Tabulky Příklad 3 Access 2010

1 Tabulky Příklad 3 Access 2010 TÉMA: Vytvoření tabulky v návrhovém zobrazení Pro společnost Naše zahrada je třeba vytvořit databázi pro evidenci objednávek o konkrétní struktuře tabulek. Do databáze je potřeba ještě přidat tabulku Platby,

Více

OPC server pro RWP80. MC Control s.r.o. 20. února 2007

OPC server pro RWP80. MC Control s.r.o. 20. února 2007 OPC server pro RWP80 MC Control s.r.o. 20. února 2007 1 Obsah 1 Úvod 3 2 Připojení 3 2.1 Připojení přes sériový port............................ 3 2.2 Připojení přes TCP socket.............................

Více

Hromadná korespondence

Hromadná korespondence Kapitola dvanáctá Hromadná korespondence Učební text Mgr. Radek Hoszowski Hromadná korespondence Hromadná korespondence Představíme si jednoduchý nástroj, který nám může ušetřit velké množství práce. Je

Více

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory Výhody objektového řešení Nástroje pro IO operace jsou v C++ součástí knihoven Hierarchie objektových

Více