1. Úvodní informace. BI-EP1 Efektivní programování Martin Kačer

Podobné dokumenty
1. Úvod do předmětu. BI-EP2 Efektivní programování Martin Kačer

BI-EP1 Efektivní programování 1

KTE / ZPE Informační technologie

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

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

3 KTE / ZPE Informační technologie

5. Dynamické programování

BI-EP2 Efektivní programování 2

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Textové soubory. alg9 1

KTE / ZPE Informační technologie

Central European Programming Contest 2009 příprava na soutěž. Jan Stoklasa stoklja5 at fel.cvut.cz. 1 z 40

Algoritmizace a programování

Programování v jazyce JavaScript

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

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

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

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

6. Základy výpočetní geometrie

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

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

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

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

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

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

Řetězce a řídicí struktury

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

Část 1 Soubory a vytvoření projektu. Řetězce a řídicí struktury. Část 2 Připomínka (NSD) Část 3 Textové řetězce, operátory a načítání vstupu

Soubor jako posloupnost bytů

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

Algoritmizace a programování

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Organizace předmětu, podmínky pro získání klasifikovaného zápočtu

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

Úvod do programování 6. hodina

Řetězce a řídicí struktury

6. Tahy / Kostry / Nejkratší cesty

Základy algoritmizace a programování

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

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

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

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

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

Programování v jazyce JavaScript

MATLAB Úvod. Úvod do Matlabu. Miloslav Čapek

Objektově orientované programování

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

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

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Abstraktní datové typy: zásobník

Programování v Javě I. Leden 2008

Matematická indukce a správnost programů. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 13

1. Téma 03 - Rozhodování

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

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

Programování v Pythonu

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

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

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

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

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

Informatika a výpočetní technika 1. Ing. Ladislav Nagy Technická univerzita v Liberci FT / KOD / 2011

Úvod do programovacích jazyků (Java)

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Regulární výrazy. Vzory

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

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

PROGRAMOVÁNÍ V C++ CVIČENÍ

Jazyk C# a platforma.net

Funkce, intuitivní chápání složitosti

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

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

Programování I. Martin Pergel,

Úvod do softwarového inženýrství a týmového vývoje

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

Algoritmizace a programování

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Základy programování Zdrojový kód, dokumentace, týmová práce

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

Úvod do programovacích jazyků (Java)

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

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

Diskrétní matematika. DiM /01, zimní semestr 2017/2018

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

Programování. Debugging a testování. Martin Urza

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

Práce se soubory v Javě

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

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

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

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Základy algoritmizace a programování

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

Transkript:

1. Úvodní informace BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

O předmětu

Účel Praktické procvičení algoritmů aneb jak psát programy Rychle Přehledně Efektivně Bez chyb (pokud možno ) a stále tak trochu experiment Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 3

Naše cíle Naučit se programovat odstraňovat chyby (ještě lépe: nedělat) přemýšlet!!! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 4

ACM Contest International Collegiate Programming Contest (ICPC) Prestižní soutěž v programování Statisíce studentů 2000 univerzit 82 zemí ze 6 kontinentů Týmová Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 5

ACM ICPC x BI-EP1 Příklady ze soutěže Formát použitý v soutěži (ale nikoli v týmech) Cílem rozhodně není jen ICPC Algoritmy jsou obecné Soutěž nepovinná (ale doporučená ) Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 6

Forma Především řešení konkrétních úloh Rozsah 1+2 Jednou za 14 dnů přednáška Téměř každý týden cvičení (konzultace) Řešení úloh doma (to především!) Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 7

Náplň přednášek Přednáška Řešení problémů z minulého týdne Diskuze nad variantami Obecné postupy a algoritmy Zadání na další týden Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 8

Náplň cvičení Cvičení Pokračování přednášky Zhodnocení Zkoušení řešení u počítače Konzultace v případě potřeby Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 9

Hodnocení Pouze zápočet Řešení úloh Co nejvíc Samostatně Volitelný předmět!!! FÉROVOST!!! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 10

Hrajte fér! Samostatně V podstatě jediná podmínka zápočtu Poctivě Internet pro obecné hledání ANO Internet pro konkrétní řešení NE! Internet pro zjištění vstupů NE! Porušení pravidel = okamžitý konec! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 11

Vyhodnocovací systém

PCSS odevzdání řešení Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 13

PCSS zjištění výsledku Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 14

PCSS možné odezvy Jen pro poslední pokus! compile error program nejde přeložit runtime error chyba za běhu time limit exceeded pomalé/cyklí se wrong answer špatná odpověď presentation error asi chyba formátu accepted úspěšně odevzdáno Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 15

PCSS výsledky ostatních Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 16

O řešení úloh

Jaké chceme řešení Správné Vždycky správné! Stabilní Efektivní Rychle hotové!!! V JEDNODUCHOSTI JE SÍLA!!! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 18

Jednoduché = dobré Rychle napsané Přehledné Méně chyb Často efektivnější ale samozřejmě ne vždy => Preferujeme jednoduché Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 19

V čem spočívá jednoduchost Zbytečně nepsat Zbytečně nepočítat Co nejméně speciálních případů Ale na žádný nezapomenout! Přehlednost Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 20

Přemýšlejme! První nápad nemusí být nejlepší První nápad nemusí být ani správný Proč to děláme zrovna tak? Kdy to (ne)bude fungovat? Výhoda automatického hodnocení Neřekne nám, proč je to špatně Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 21

Správnost algoritmu NELZE stoprocentně otestovat Nechceme zkoušet a DOUFAT Chceme VĚDĚT!!! Dokážete zdůvodnit volbu řešení? Umíte dokázat správnost? Bude to fungovat opravdu VŽDY? Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 22

Typické postupy

Povaha úloh Textové zadání Přesně popsaný vstup a výstup Nutno dodržovat Automatické vyhodnocování Úkolem je program, který správně řeší jakoukoli instanci problému! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 24

Vícenásobné zadání Vstup s jediným příkladem V našich úlohách asi nebude Na začátku zadán počet příkladů Ukončení vstupu Konec souboru Speciální hodnota Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 25

Zpracování při známém počtu N Příklad 1 Příklad 2 Příklad N int n = readnumber(); for (int i = 0; i < n; ++i) { readoneproblem(); solveoneproblem(); printoneproblem(); } Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 26

Zpracování s detekcí konce A1 B1 A2 B2 0 0 for (;;) { int a = readnumber(), b = readnumber(); if (a == 0 && b == 0) break; solveoneproblem(a, b); printoneproblem(); } Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 27

Typické čtení v C/C++ Hodnoty oddělené mezerami - scanf Čísla Znaky Řetězce scanf( %d, &num); scanf( %d%d%d, &num1, &num2, &num3); scanf( %c%c, &char1, &char2); scanf( %s, string); /* proč tam není &string? */ /* proč se v normálních programech nepoužívá? */ Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 28

Čtení v C možné potíže Jaký je rozdíl v těchto zápisech? scanf( %d%d, &num1, &num2); scanf( %d %d, &num1, &num2); scanf( %d%d\n, &num1, &num2); scanf( %d%d, &num1, &num2); scanf( %c%c, &ch1, &ch2); scanf( %d%d, &num1, &num2); scanf( %i%i, &num1, &num2); Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 29

Čtení v C whitespace Přeskakování mezer Je-li zadána mezera Většina konverzí (kromě %c!!) 2 5 ABCDE FGHIJ 2 5 ABCDE FGHIJ scanf( %d%d, &num1, &num2); scanf( %c%c, &ch1, &ch2); ch1 ch2 newline! A scanf( %d%d\n, &num1, &num2); scanf( %c%c, &ch1, &ch2); ch1 ch2 A B Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 30

Čtení v C whitespace Přeskakování mezer Je-li zadána mezera Většina konverzí (kromě %c!!) 2 5 *** * * * 2 5 *** * * * scanf( %d%d, &num1, &num2); scanf( %c%c, &ch1, &ch2); ch1 ch2 newline mezera scanf( %d%d\n, &num1, &num2); scanf( %c%c, &ch1, &ch2); ch1 * ch2 * Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 31

Čtení v C whitespace Přeskakování mezer Je-li zadána mezera Většina konverzí (kromě %c!!) 3 7 scanf( %d%d, &num1, &num2); num1 3 num2 7 3 7 scanf( %c%c, &ch1, &ch2); ch1 3 ch2 mezera! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 32

Čtení v C formát čísel V desítkové soustavě vždy %d!! i když je to obvykle jedno 12:05 08:45 scanf( %d:%d, &num1, &num2); scanf( %d:%d, &num3, &num4); num1 12 num2 5 num3 8 num4 45 08:45 scanf( %i:%i, &num3, &num4); num3 0 num4 nedefinováno! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 33

Typické čtení Java O něco málo složitější StringTokenizer st = new StringTokenizer(""); BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); String nexttoken() throws Exception { while (!st.hasmoretokens()) st = new StringTokenizer(input.readLine()); return st.nexttoken(); } int nextint() throws Exception { return Integer.parseInt(nextToken()); } Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 34

Typické čtení Java (jinak) Třída Scanner ALE POZOR NA RYCHLOST! import java.util.scanner Scanner sc = new Scanner(System.in); int i = sc.nextint(); double d = sc.nextdouble(); String s = sc.next(); Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 35

Čtení po řádcích C/C++ gets / fgets / getchar Uloží i newline!! Pozor na kombinaci se scanf! 2 ABCDE FGHIJ 2 ABCDE FGHIJ scanf( %d\n, &num); fgets(string, length, stdin); num 2 string ABCDE scanf( %d, &num); fgets(string, length, stdin); num 2 string prázdný! Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 36

Čtení po řádcích Java Pro změnu asi o něco jednodušší BufferedReader BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); String nextline() throws Exception { return input.readline(); } Martin Kačer, BI-EP1, ZS 2011 1. Úvodní informace 37