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

Podobné dokumenty
Zápis programu v jazyce C#

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

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

1. Téma 03 - Rozhodování

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

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

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

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

NPRG030 Programování I, 2015/16 1 / :25:32

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

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ý

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

Úvod do programovacích jazyků (Java)

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

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

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

dovolují dělení velkých úloh na menší = dekompozice

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

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

Algoritmizace a programování

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

Výčtový typ strana 67

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Mnohotvarost (polymorfizmus)

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

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

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

Jazyk C# a platforma.net

Algoritmizace a programování

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

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

PREPROCESOR POKRAČOVÁNÍ

Objektově orientované programování

KTE / ZPE Informační technologie

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Řídicí struktury. alg3 1

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Opakování programování

Struktura programu v době běhu

Generické programování

Jazyk C++ I. Polymorfismus

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

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Jazyk C++ I. Šablony

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/

Jazyk C++, některá rozšíření oproti C

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

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

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

IRAE 07/08 Přednáška č. 1

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Algoritmizace a programování

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

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

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

Programování v Javě I. Leden 2008

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

Úvod do programování. Lekce 1

Sada 1 - Základy programování

Seminář Java II p.1/43

Jazyk C# (seminář 6)

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

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

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

O datových typech a jejich kontrole

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

URČITÝM ZPŮSOBEM PODOBNÉ

konstruktory a destruktory (o)

Úvod do programovacích jazyků (Java)

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Dědičnost (inheritance)

ADT/ADS = abstraktní datové typy / struktury

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

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

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

1 Nejkratší cesta grafem

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

15. Projekt Kalkulačka

Více o konstruktorech a destruktorech

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

7. Datové typy v Javě

KTE / ZPE Informační technologie

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

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

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

1. Programování proti rozhraní

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

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

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

Transkript:

Výčtový typ Motivační příklad řízení semaforu na křižovatce = přepínání červená/oranžová/zelená const int CERVENA = 0; const int ORANZOVA = 1; const int ZELENA = 2; int prististav = CERVENA; while (true) switch (prististav) case CERVENA: Console.WriteLine("cervena"); prististav = ORANZOVA; Co zabrání programátorovi Cekej(); uložit do prististav -38? break; case 1: Console.WriteLine("oranzova"); prististav = ZELENA; // zelena Cekej(0.5); break; // atd. 1

Principy a příklady Výčtový typ = seznam konstant, do proměnné nelze uložit jiné enum Semafor cervena, oranzova, zelena Semafor prististav = Semafor.cervena; while (true) switch (prististav) case Semafor.cervena: Console.WriteLine("cervena"); prististav = Semafor.oranzova; Cekej(); break; case Semafor.oranzova: Console.WriteLine("oranzova"); prististav = Semafor.zelena; break; // atd. Metody volání hodnotou a odkazem volání = způsob předávání parametrů metodám Volání hodnotou Min. přednáška: při volání metody jsou hodnoty skutečných parametrů přiřazeny do proměnných formálních parametrů Volání metody: 1) vypočet výrazů představujících skutečné parametry 2) vytvoření lokálních proměnných a proměnných formálních parametrů 3) kopie hodnot skutečných parametrů do proměnných lokálních parametrů 4) běh těla metody 5) konec metody návratová hodnota použita ve výrazu jako výsledek metody volání hodnotou metoda pracuje s hodnotami (kopiemi) skutečných parametrů o ve funkci nelze změnit hodnoty skutečných parametrů Nový uživatelský datový typ 2

Příklad Napište metodu, která zamění obsah (hodnoty) dvou proměnných typu int Nefunkční řešení using System; class Program int cis1 =, cis2 = ; Zamen(cis1, cis2); static void Zamen(int p1, int p2) int pomoc; pomoc = p1; p1 = p2; p2 = pomoc; po skončení metody: cis1 =, cis2 = Main() Zamen(p1, p2) 1 Zamen(cis1, cis2) 5 2 4 3 kopie = volání hodnotou sk. parametry nedotčeny 1 PAMĚŤ cis1 cis2 2 cis1 cis2 PAMĚŤ 3 cis1 cis2 PAMĚŤ 4 cis1 cis2 PAMĚŤ 5 PAMĚŤ cis1 cis2 p1 p2 p1 p2 p1 p2 záměna kopií 3

Volání odkazem metoda pracuje se skutečnými parametry, nikoli s kopiemi using System; class Program int cis1 =, cis2 = ; Zamen(ref cis1, ref cis2); static void Zamen(ref int p1, ref int p2) int pomoc; pomoc = p1; p1 = p2; p2 = pomoc; před voláním ref parametru musí být do proměnné přiřazena hodnota (přiřazením, inicializací v deklaraci) Výstup více hodnot z metod Příklad: Napište metodu, která najednou vypočte obsah i obvod kruhu using System; class Program double polomer = ; double obsah, obvod; ParamKruhu(polomer, out obsah, out obvod); static void ParamKruhu(double R, out double S, out double O) S = Math.PI * R * R; O = 2 * Math.PI * R; o variantní řešení nedělat, nelogické static double ParamKruhu(double R, out double S) S = Math.PI * R * R; return 2 * Math.PI * R; po skončení metody: cis1 =, cis2 = O vracen normálně, S odkazem o před voláním out parametru nemusí být do proměnné přiřazena hodnota 4

Metody a dekompozice problému použití podprogramů = přirozená snaha při řešení problémů postupovat hierarchicky: 1) shora dolů problém rozkládáme na menší celky, které separátně řešíme 2) zdola nahoru dílčí části problému skládáme do větších celků 3) výhodné v týmu každý řeší pouze část úkolu 4) program se lépe ladí větší program = 3 vrstvy: 1) Datová proměnné 2) Aplikační metody, upravují data 3) Prezentační plní a prezentuje datovou vrstvu Příklad program na řešení kvadratické rovnice požadavky: o vstupy: z klávesnice o řešení i v oboru komplexních čísel o výstupy: obrazovka analýza: o data: a, b, c, D, x1, x2 o vstupy, prezentace výsledků: Console dále možnosti řešení: Varianta č. 1 vše v Main() (žádné další metody) o Nikdy!!! o použití jádra řešení KvR v jiných programech obtížné Varianta č. 2 Vstupy v Main(), zbytek metoda (počítá KvR, tiskne výsledky na obrazovku) o metodu nelze použít v programech s jiným uživatelským rozhraním Varianta č. 3 3 vrstvy Prezentační v. TiskVysledku(typReseni, k1, k2) NactiKoef(ktery) Aplikační v. KvadrRovnice(aa, bb, cc, out k1, out k2) Datová v. koren1, koren2 typreseni a, b, c 5

double a, b, c, koren1, koren2; a = NactiKoef("a"); b = NactiKoef("b"); c = NactiKoef("c"); TypKorenu typreseni = KvR(a, b, c, out koren1, out koren2); TiskVysledku(koren1, koren2, typreseni); static TypKorenu KvR (double a, double b, double c, out double k1, out double k2) // z koef. a, b, c spocita k1, k2, dle D vraci typ reseni static double NactiKoef(string ktery) // nacte koef. z klavesnice return koef; static void TiskVysledku(double k1, double k2, TypKorenu typreseni) // dle typreseni vytiskne k1, k2 enum TypKorenu Realne, Nasobne, Komplexni Přetěžování metod (methods overloading) v.net masivně používáno motivace jazyk C, výpočet absolutní hodnoty int abs(int x); long labs(long x); double fabs(double j) jazyk C: jedinečné identifikátory přetížené metody = v jednom programu definice více metod se stejným jménem, ale různým o počtem parametrů o typem parametrů o pořadím parametrů nedělat!!! o kombinace 6

typické příklady o stejná činnost na různých typech parametrů int abs(int x); long abs(long x); double abs(double j) o různý počet parametrů upřesnění činnosti metody static void TiskVyplaty(int koruny) Console.WriteLine("Vyplata je: 0:C0", koruny); static void TiskVyplaty(int koruny, int halere) Console.WriteLine("Vyplata je: 0:C0, 1 haleru", koruny, halere); nelze přetěžovat (pouze) typem návratové hodnoty double f(int a) int f(int a) např.: Console.WriteLine() 19 přetížení Console.WriteLine () Console.WriteLine (Boolean) Console.WriteLine (Char) Console.WriteLine (Char[]) Console.WriteLine (Decimal) Console.WriteLine (Double) Console.WriteLine (Int32) Console.WriteLine (Int64) Console.WriteLine (Object) Console.WriteLine (Single) Console.WriteLine (String) Console.WriteLine (UInt32) Console.WriteLine (UInt64) Console.WriteLine (String, Object) Console.WriteLine (String, Object[]) Console.WriteLine (Char[], Int32, Int32) Console.WriteLine (String, Object, Object) Console.WriteLine (String, Object, Object, Object) překladač vždy zvolí dle parametrů nejlepší přetížení (pozor např. na přetypování!!!) Třída System.Math základní matematické funkce konstanty: Math.PI, Math.E 7

Goniometrické Všechny typu double Funkce(double x) Math.Sin(), Math.Cos(), Math.Tan() Math.Asin(), Math.Acos(), Math.Atan() Příklad: double sinuhlu = 0.5; double uhelvestupnich = 180 * (Math.Asin(sinUhlu)) / Math.PI; // uhelvestupnich = 30 Hyperbolické Všechny typu double Funkce(double x) Math.Sinh(), Math.Cosh(), Math.Tanh() Logaritmy Všechny typu double Funkce(double x) Desítkový: Math.Log() Přirozený: Math.Log() Mocninné funkce druhá odmocnina: double Math.Sqrt(double x) e x : double Math.Exp(double x) x y : double Math.Pow(double x, double y) Příklad: double cislo = 3.245; double vysledek = Math.Pow(cislo, ); Práce se znaménkem Absolutní hodnota: typ Math.Abs(typ) o typ jakýkoli jednoduchý datový typ Test znaménka: int Math.Sign(typ) o Vrací celé číslo dle argumentu: > 0 1 = 0 0 < 0-1 Generování náhodných čísel Princip: generátor pseudonáhodných čísel s rovnoměrným rozložením Třída Random Postup Vytvoření generátoru Random mujgenerator = new Random(); 8

Volání metod náhodná celá čísla int mujgenerator.next() NČ v rozsahu 0; Int32.MaxValue) int mujgenerator.next(int max) 0; max) int mujgenerator.next(int min, int max) min; max) Volání metod náhodná reálná čísla double mujgenerator.nextdouble() 0.0; 1.0) Příklad: Vygenerujte celých čísel v rozsahu 0 0 const int POCET_CISEL = ; const int MAX_NC = 0; Random generator = new Random(); for (int i = 0; i < POCET_CISEL; i++) Console.WriteLine(generator.Next(MAX_NC)); Komentáře pomocný text pro čtenáře ZK s nápovědnými informacemi (co daný úsek kódu dělá, proč, jak ) při překladu jsou ze ZK vypuštěny překladač je nevidí kód se komentuje průběžně při jeho vytváření!!! Blokové komentáře začátek komentáře /* Blokový komentář může být na více řádek lze i řádky vynechat */ konec komentáře /* komentář na jednom řádku */ Řádkové komentáře příkaz; // řádkový komentář končí na konci řádku příkaz; 9

Poznámky jakákoli vychytávka = komentář TODO komentáře = komentář, označující a popisující další postup programování (nedodělky) Část dobře komentovaného kódu //**************************************************************** // eliminacni smycka //**************************************************************** m = 1; // smycka bezi az od druheho radu while // eliminacni smycka spatnereseni = 0; // hledani m-teho maxima naselmax = 0; // pokud najde lok. max. dam si to do 1 // TODO: osetrit mozne preteceni naselmax maxpwrce[m] = 0; for(i=blizka_zona;i<n-1;i++) ijespatne = 0; if (kkk>0) // kkk = 0 -> nemam zatim zadne spatne id for(ii=0;ii<kkk;ii++) // kkk je index pole spatnych id if (i == zakazaneid[ii]) ijespatne = 1; // end of eliminacni smycka