KTE / ZPE Informační technologie

Podobné dokumenty
KTE / ZPE Informační technologie

3 KTE / ZPE Informační technologie

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

Algoritmizace a programování

Algoritmizace a programování

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

Úvod do programovacích jazyků (Java)

KTE / ZPE Informační technologie

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

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

Objektově orientované programování

Úvod do programovacích jazyků (Java)

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

Řídicí struktury. alg3 1

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

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

Algoritmizace a programování. Terminálový vstup a výstup

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

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

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

5 Přehled operátorů, příkazy, přetypování

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Programování v Javě I. Leden 2008

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

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

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

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

6 Příkazy řízení toku

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

Jazyk C# a platforma.net

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

Výčtový typ strana 67

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

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

Seminář Java II p.1/43

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

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

Teoretické minimum z PJV

Generické programování

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Regulární výrazy. Vzory

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Zápis programu v jazyce C#

Úvod do programování v jazyce Java

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/

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

Soubor jako posloupnost bytů

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

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

7. Datové typy v Javě

Příkazy a řídicí struktury v Javě. Tomáš Pitner, upravil Marek Šabo

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

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Více o konstruktorech a destruktorech

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Algoritmizace a programování

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

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

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

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

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

URČITÝM ZPŮSOBEM PODOBNÉ

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

17. Projekt Trojúhelníky

Principy objektově orientovaného programování

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

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

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

Jak v Javě příkazy, operace a výrazy. BD6B36PJV 00 Fakulta elektrotechnická České vysoké učení technické

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

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

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

Abstraktní datové typy: zásobník

Pointery II. Jan Hnilica Počítačové modelování 17

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

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Textové soubory. alg9 1

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

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

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

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

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

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Algoritmizace a programování

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

1. Programování proti rozhraní

Základy programování (IZP)

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Konstruktory a destruktory

1. Téma 03 - Rozhodování

Formátové specifikace formátovací řetězce

Programování v jazyce JavaScript

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

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

PREPROCESOR POKRAČOVÁNÍ

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

Transkript:

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

- ternární operátor: podm? příkaz_je-li_pravda : příkaz_je-li_nepravda; - return, return(hodnota či proměnná) konec metody a předání návratové hodnoty - switch-case-break-default podobný jako v MATLABu, pouze pozor na default - řídící výraz (viz níže proměnná a) smí být typu byte, char, short, int (nelze long, float, double) - od Java 7 lze též využít textové řetěz (String) Např.: switch (a) { case 5 : příkazy; break; case 8 : příkazy; break; case 10 : příkazy; break; case 25 : příkazy; break; default : příkazy; break;

- návěští JAVA nezná goto, ale návěští se používají s příkazy break a continue, návěští nelze umístit kdekoliv, jen před nějaký cyklus (popř. blok { kód;), slouží např. o "vyskočení" z vícenásobně vnořených cyklů Např.: navesti: while (podm) { toc_to_sem: while (podm2) { while (podm3) { prikaz; if (podminka) continue toc_to_sem; prikaz; break navesti; atd... - stejně funguje pro continue; a stejně pro cyklus for Pozn.: return v mainu ukončí program. Pokud potřebuji nuceně ukončit program kdekoliv: System.exit(); - pozor běžně neužívat, jde o tvrdé zabití programu zabije přímo proces.

Metody - statické (patří třídě, společné pro všechny instance dané třídy) a metody instancí - ale: nutno uvést návratový typ (může být void, ale musí se napsat) - metoda bez parametru vypadá takto: int bezpar() {... neco... - metoda bez parametru a bez návratové hodnoty vypadá takto: void bezniceho() {... neco... - Pozor na typovou konverzi parametrů a návratových hodnot int fun(double d) { return d; // chyba, mám vracet int a vracím double - správně bude: int konverze(double d) { return (int) d; Předávání parametrů metodám - pouze hodnotou - Pozor: vyjma parametrů základních typů (int, double, char atd.) předává JAVA hodnotu reference, referenční proměnnou, tj. odkaz - Pozn. pole je referenční typ (i pole int apod.)

Program převod z desítkové na dvojkovou soustavu package fel.kte.zpe; import java.util.scanner; /** * Jednoduchý "manuální" převod z desítkové soustavy na dvojkovou * * @author Petr Kropík */ public class Hlavni { /** * Hlavní spouštěcí funkce * * @param args the command line arguments */ public static void main(string[] args) { Scanner klavesnice = new Scanner(System.in); System.out.printf("Jednoduchý \"manuální\" převod z desítkové soustavy na dvojkovou%n"); System.out.printf("Zadejte desítkové číslo: "); int desitkovecislo = klavesnice.nextint(); int mezivysledek = desitkovecislo; int kolikbcislic = 0; int vysledekjakopolecisel01[] = new int[1000]; do { vysledekjakopolecisel01[kolikbcislic] = mezivysledek % 2; // zbytek po dělení 2 - určuje číslici v bin. čísle mezivysledek = mezivysledek / 2; // celočíselné dělení

kolikbcislic++; while (mezivysledek > 0); kolikbcislic--; // máme o 1 méně číslic, už bychom byli za poslední System.out.printf("Císlo %d je v binární podobě: %n", desitkovecislo); for (int i = kolikbcislic; i >= 0; i--) { System.out.printf("%1d", vysledekjakopolecisel01[i]); System.out.printf("%nHotovo.%n"); Metody s proměnným počtem parametrů int nevikolikparametru(double... d) { for (int i = 0; i < d.length; i++) System.out.println("Cislo je: "+d[i]); return d.length; lze volat: nevikolikparametru(); nevikolikparametru(2.3, 4.5, 6.7); nevikolikparametru(x, y, z, w, h, u); Přetížené metody - metody stejného jména, ve stejné třídě liší se počtem nebo typem nebo pořadím (typů) parametrů a vykonávajících obv. různý kód (každá má své tělo) - výhoda pro různé parametry stejné volání funkce, ale naloží se s nimi jak odpovídá jejich typu - nestačí však odlišit dvě metody jen typem návratové hodnoty - často u knihovních metod (JAVA API), např. println

Např.: int secti(int a, int b) { return (a + b); // někde budeme mít třídu Komplex pro komplexní čísla o složkách public double real a public double imag // předpokládám existenci konstruktoru Komplex(double realna_cast, double imaginarni_cast) static Komplex secti(komplex a, Komplex b) { return(new Komplex(a.real + b.real, a.imag + b.imag)); nebo static Komplex secti(komplex a, Komplex b) { Komplex pom; pom = new Komplex(a.real + b.real, a.imag + b.imag) return(pom); nebo Komplex secti(komplex a) { Komplex pom; pom = new Komplex(a.real + this.real, a.imag + this.imag) return(pom); pouziti: Komplex cislo, jine, vysledek; cislo = new Komplex(3.4, 1.6); jine = new Komplex(2.8, 121.62); vysledek = cislo.secti(jine);

nebo void prictikeme(komplex a) { this.real = this.real + a.real; this.imag = this.imag + a.imag; void prictikeme(double a) { this.real = this.real + a; pouziti: Komplex cislo, jine; cislo = new Komplex(3.4, 1.6); jine = new Komplex(2.8, 121.62); cislo.prictikeme(jine); cislo.prictikeme(2.5); Potom použití: public static void main (String[] args) { Komplex prom, druha, vysledek; prom = new Komplex(2.0,4.5); druha = new Komplex(3.4,8.1); vysledek = prom.secti(druha); // obdoba + prom.prictikeme(druha); // obdoba += Nebo volání: int i, j, k; i = 5;

j = 9; k = secti(i, j); // vola secti pro int Komplex x, y, z; x = new Komplex(2.3, 5.6); // 2.3 + 5.6i y = new Komplex(7.8, 2.9); // 7.8 + 2.9i z = secti(x, y); // vola secti pro Komplex Pole - referenční datový typ - je třeba jej "vyrobit" pomocí new - každé pole v JAVĚ obsahuje datový prvek length obsahuje deklarovanou délku pole (ne to co jsme naplnili!!!) Např.: int[] poleintu, dalsipoleintu; poleintu = new int[20]; // pole 20ti intu dalsipoleintu = new int[50]; // pole 50ti intu poleintu[0] = 25; int delkapole = poleintu.length; // bude mit hodnotu 20 Např. budu mít někde hotovou třídu Slon, parametr konstruktoru bude "jmeno" typu String // jeden Slon Slon samotar; samotar = new Slon("Pepa"); // pole Slonů Slon[] stado; stado = new Slon[20]; // vyrobil jsem pole 20ti referenci na Slon stado[0] = new Slon("Lojza"); // nulty clen stada, instance Slon "Lojza" stado[1] = new Slon("Emilka"); // prvni clen stada, instance Slon "Emilka" - vytvoření inicializovaného pole int[] prvocisla = {1, 2, 3, 5, 7, 11, 13;

prvocisla[6] = 17; // jde o běžné pole, není konst. Dvourozměrná pole int[][] pole2d; pole2d = new int[5][4]; // 5 řádků, 4 sloupce int[][] pole2d, neprav2; pole2d = new int[5][4]; Zjištění počtu řádků a počtu sloupců: System.out.println("Pocet radku pole: " + pole2d.length); System.out.println("Pocet sloupcu pole radek [0]: " + pole2d[0].length); System.out.println("Pocet sloupcu pole radek [1]: " + pole2d[1].length); Je-li jiný počet v každém řádku: neprav2 = new int[3][]; // pole bude mít různé počty sloupců v řádcích neprav2[0] = new int[3]; neprav2[1] = new int[5]; neprav2[2] = new int[2]; System.out.println("Pocet radku pole: " + neprav2.length); System.out.println("Pocet sloupcu pole radek [0]: " + neprav2[0].length); System.out.println("Pocet sloupcu pole radek [1]: " + neprav2[1].length); System.out.println("Pocet sloupcu pole radek [2]: " + neprav2[2].length); Inicializované 2D pole: int[][] p2inic = {{1,2,4, {2,6,7,8,9, {8,45,90,34,23,45; System.out.println("Pocet radku pole: " + p2inic.length); System.out.println("Pocet sloupcu pole radek [0]: " + p2inic[0].length); System.out.println("Pocet sloupcu pole radek [1]: " + p2inic[1].length); System.out.println("Pocet sloupcu pole radek [2]: " + p2inic[2].length); Vícerozměrná pole stejným postupem int[][][] pole3d; pole3d = new int[3][6][4];

Lze: int [][][] pole3d; pole3d = new int[3][][]; nebo pole3d = new int[3][4][]; NELZE: pole3d = new int[3][][5]; Výroba 3D pole: int [][][] pole3d; pole3d = new int[3][][]; pole3d[0] = new int[6][]; pole3d[1] = new int[3][]; pole3d[2] = new int[5][]; t pole3d[0][0] = new int[8];... pole3d[0][5] = new int[4]; pole3d[1][0] = new int[3];... pole3d[1][2] = new int[2]; pole3d[2][0] = new int[9];... pole3d[2][4] = new int[7]; Poněkud pracné, v praxi bychom použili cyklus. Ošetření překročení mezí u polí je generována výjimka ArrayIndexOutOfBoundsException: int[][] pole2 = new int[4][3]; for (int i = 0; i <= 5; i++) { for (int j = 0; j <= 5; j++) { try { pole2[i][j] = i + j;

System.out.println("Hodnota pole2[" + i + "][" + j + "] = " + pole2[i][j]); catch (ArrayIndexOutOfBoundsException vyjimka) { System.out.println("Překročen rozsah pole na souřadnicích " + i + ", " + j); Pozn.: - pole se číslují od 0, index je typu int. Pole objektů viz dříve u polí musím nejprve new pro vytvoření pole referencí (hranaté závorky) a potom new pro každý prvek pole (kulaté závorky, volám konstruktor prvku pole třeba Slon()) Předávání skutečných parametrů metodám základní typy (byte, int, float, double atd.) se předávájí hodnotou dělá se kopie pro objekty (tedy i pole) předává se kopie reference, tj. vlastně reference na objekt (jako @ v MATLABu) void tisknipole(int[] polei) { atd. Pro vícerozměrné pole předání do metody: void tisknipole(int[][][] polei3d) { // jak na zjištění rozměrů viz dříve u polí int radek = polei3d.length; int sloupcu = polei3d[0].length; int hloubka = polei3d[0][0].length; // atd. "Prolezení" celého pole, má-li stejný počet řádek a sloupců a hloubku sloupců ("nevykousané") v praxi není vhodné, protože nepočítá s nepravidlelným polem, v indexech obsahuje magické konstanty [0]: for (i = 0; i < polei3d.length; i++) for (j = 0; j < polei3d[0].length; j++) for (k = 0; k < polei3d[0][0].length; k++) polei3d[i][j][k] = i + j + k; // neco jen tak priradime

"Prolezení" celého pole, nemá-li stejný počet řádek a sloupců a hloubku sloupců ("vykousané"): for (i = 0; i < polei3d.length; i++) for (j = 0; j < polei3d[i].length; j++) for (k = 0; k < polei3d[i][j].length; k++) polei3d[i][j][k] = i + j + k; // neco jen tak priradime Vylepšená práce s poli - pole nemají vlastní metody - mají jeden datový prvek (mimo dat v poli) length int[] poleintu = new int[200]; for(int i=0; i < poleintu.length; i++) { poleintu[i] = i * 45; Pro práci s poli existuje třída java.util.arrays - různé metody pro práci s poli např. (uvádím pro int, ale existují pro jakékoliv základní typy a objekty): Arrays.sort(poleIntu); // vzestupně setřídí poleintu Arrays.sort(poleIntu, 10, 40); // vzestupně setřídí poleintu, ovšem jen hodnoty na pozicích od 10 do 39 (před 40) Arrays.binarySearch(poleIntu, 34); // hledá v poleintu hodnotu 34 Arrays.binarySearch(poleIntu, 10, 150, 34); // hledá v poleintu hodnotu 34 od pozice 10 do pozice 149 (před 150) - pozor pole musí být setříděno

int[] novepoleintu = Arrays.copyOf(poleIntu, 400); // vyrobí nové pole, ale délky 400, zkopíruje do něj poleintu a zbytek pozic vyplní nulami int[] novepoleintu = Arrays.copyOfRange(poleIntu, 20, 125); // vyrobí nové pole z hodnot z pozic 20 až 124 (před 125) z původního poleintu Arrays.equals(poleIntu1, poleintu2); // porovná dvě pole prvek po prvku a vrátí true nebo false (vhodná spíše pro zákl. datové typy) (pozn. pro pole objektů existuje metoda Arrays.deepEquals()) Arrays.fill(poleIntu, 33); // vyplní celé pole hodnotou 33 Arrays.fill(poleIntu, 10, 50, 33); // vyplní pole od pozice 10 do pozice 49 (před 50) hodnotou 33 Arrays.toString(poleIntu); // konvertuje pole na String vrací něco jako: "[12,34,56,78,90]"