Úvod do programování 2. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.

Slides:



Advertisements
Podobné prezentace
Programování 4. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Advertisements

Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
:-) Asymptotická složitost algoritmů Autor: Antonín DANĚK Semestrální projekt 1 – Y14TED.
Název školy: ZŠ A MŠ ÚDOLÍ DESNÉ, DRUŽSTEVNÍ 125, RAPOTÍN Název projektu: Ve svazkové škole aktivně - interaktivně Číslo projektu: CZ.1.07/1.4.00/
Tercie Rovnice Rovnice – lineární rovnice postup na konkrétním příkladu.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Úvod do programování 5. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Úvod do programování 9. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Petr Kielar Seminář o stavebním spoření Část VI: Podmínka rovnováhy a SKLV.
2.3 ROZKLAD VÝRAZŮ NA SOUČIN Mgr. Petra Toboříková.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Úvod do programování 7. hodina
VÝRAZY Matematické zápisy obsahující čísla (konstanty), písmena (proměnné) a početní operace ČÍSELNÉ S PROMĚNNOU √25 2.(4-7.8) 3x+7 4a3- 2a.
Mocniny, odmocniny, úpravy algebraických výrazů
Algoritmizace a programování
Rozhodování 1.
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Výukový materiál zpracován v rámci projektu
Dělení mnohočlenů mnohočlenem
Programování v jazyce C++
Financováno z ESF a státního rozpočtu ČR.
Název projektu: Moderní výuka s využitím ICT
Digitální učební materiál zpracovaný v rámci projektu
MATEMATIKA Dělitel a násobek přirozeného čísla.
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Výukový materiál zpracován v rámci projektu
  Název školy: Základní škola a Mateřská škola Sepekov Autor:
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Maďarská metoda Kirill Šustov Michal Bednář Stanislav Běloch
Datové typy v jazyce C Datové typy void skalární aritmetické
C# konzole – Součet dvou čísel
Zlomky Složené zlomky..
METODICKÝ LIST PRO ZŠ Pro zpracování vzdělávacích materiálů (VM)v rámci projektu EU peníze školám Operační program Vzdělávání pro konkurenceschopnost   
Lexikální atomy jazyka C
Poměr v základním tvaru.
METODICKÝ LIST PRO ZŠ Pro zpracování vzdělávacích materiálů (VM)v rámci projektu EU peníze školám Operační program Vzdělávání pro konkurenceschopnost   
DIGITÁLNÍ UČEBNÍ MATERIÁL
4.1 – 4.3 Lineární nerovnice i jednoduchý podílový tvar
Výukový materiál zpracován v rámci projektu
* Zlomky a smíšená čísla Matematika – 7. ročník *
Obchodní akademie, Střední odborná škola a Jazyková škola s právem státní jazykové zkoušky, Hradec Králové Autor: Mgr. Vladimíra Houšková Název materiálu:
ZAL – 8. cvičení 2016.
Číslo projektu CZ.1.07/1.5.00/ Číslo materiálu
Výukový materiál zpracován v rámci projektu
Kvadratické nerovnice
Výukový materiál zpracován v rámci projektu
Stavební fakulta ČVUT, B407
CYKLUS S PODMÍNKOU NA KONCI (s výstupní podmínkou)
BIBS Informatika pro ekonomy přednáška 2
Výukový materiál zpracován v rámci projektu
Rovnice základní pojmy.
NÁZEV: VY_32_INOVACE_03_09_M8_Hanak TÉMA: Lineární rovnice
Optimální pořadí násobení matic
Základy algoritmizace 3/13 příkaz cyklus, proměnná typu pole
3. přednáška Laplaceova transformace
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Algoritmizace a datové struktury (14ASD)
Datové typy v jazyce C Datové typy void skalární aritmetické
Poměr v základním tvaru.
Rovnice s neznámou ve jmenovateli
Matematika + opakování a upevňování učiva
Dělitelnost přirozených čísel
Seminář o stavebním spoření
Algoritmizace a datové struktury (14ASD)
Dělitelnost přirozených čísel
Hromadné dokumenty opakující se pro kolekci osob
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Úvod do programování 2. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Jan LánskýÚvod do programování 2. hodina2 Umíme z minulé hodiny Obecné informace o předmětu Ukázka: postup řešení problému v přirozeném jazyce a jeho převod do C# Instalace C#, vytvoření projektu, spuštění programu Syntax C# Proměnné Přiřazení, aritmetické operátory (zbytek po celočíselném dělení), výpis na obrazovku Porovnací operátory, podmíněný příkaz (se zápornou větví, vnořený)

Jan LánskýÚvod do programování 2. hodina3 Cíle hodiny Syntax Složený příkaz Logické operátory Čtení vstupu z klávesnice Cykly while a for (continue, break), vnořené cykly Algoritmy Prohození hodnot dvou proměnných Ciferný součet, Euklidův algoritmus Prvočíselný rozklad, test prvočíselnosti Základy časové složitosti algoritmů V C# existuje cyklus foreach, ten nebudeme probírat. Mnoho jiných jazyků nemá ekvivalent

Jan LánskýÚvod do programování 2. hodina4 Prohození hodnot dvou proměnných V x bude hodnota, která byla původně v y. V y bude hodnota, která byla původně v x. Nejde prohodit atomicky Pomocná proměnná tmp, která uchovává hodnotu x x = 5 y = 3 tmp =3

Jan LánskýÚvod do programování 2. hodina5 Podmíněné prohození hodnot dvou proměnných Chceme, aby y>=x Je-li x < y, prohodíme hodnoty x a y Je-li y>=x nebudeme nic prohazovat Prohození (minulý slajd) 3 příkazy Nutný opakovaný test x<y resp. tmp <y x = 5 y = 3 tmp =3 Nejde x<y, protože x má novou hodnotu Musí se vykonat vždy kvůli tmp <y Náročné, jde snadněji ?

Jan LánskýÚvod do programování 2. hodina6 Složený příkaz Blok po sobě následujících příkazů, který je považován za jeden příkaz Příkazy uzavřeny ve složených závorkách { (alt + 123), } (alt + 125) Využití V podmíněném příkazu (nebo v cyklu) Ve vnořeném podmíněném příkazu Místo jednoho příkazu se vykoná složený příkaz obsahující několik příkazů

Jan LánskýÚvod do programování 2. hodina7 Podmíněné prohození hodnot pomocí složeného příkazu Chceme, aby x >= y Je-li x < y, prohodíme hodnoty x a y Je-li x >= y nebudeme nic prohazovat Jedna podmínka x < y následovaná složeným příkazem provádějícím prohození x = 5 y = 3 tmp =3 začátek konec

Jan LánskýÚvod do programování 2. hodina8 Dvojitě zanořený podmíněný příkaz – vynechání else větve Chyba: else patří k vnitřnímu if Správně: složeným příkazem jsme určili, že vnitřní if nemá else

Jan LánskýÚvod do programování 2. hodina9 Logické operátory operandy typu bool nejčastěji výsledek porovnávacích operátorů. && Logické AND (alt + 38) || logické OR (alt + 124) Infixní binární operátory Levý operand [logický operátor] pravý operand ! Logická negace Unární prefixní operátor (! operand) Využítí V podmíněném příkazu (a v cyklu)

Jan LánskýÚvod do programování 2. hodina10 Interval Syntaktická chyba První porovnání: 0 < a vrací bool Druhé porovnání: nekompatibilní operandy Porovnávací operátory se vykonají dříve než logické operátory, závorky nejsou nutné, ale nevadí pokud je chceme psát

Jan LánskýÚvod do programování 2. hodina11 Logické operátory

Jan LánskýÚvod do programování 2. hodina12 XOR na 3 způsoby funkce XOR = eXclusive OR true pro 01 nebo 10 (různé) false pro 00 a 11 (shodné) Jde to i jednodušeji Závorky navíc nevadí Pokud si nejsme jisti

Jan LánskýÚvod do programování 2. hodina13 Zkrácené vyhodnocování Je-li o výsledku logického výrazu rozhodnuto po vyhodnocení jeho části, zbytek výrazu se nevyhodnocuje Je-li nesplněn levý operand && nevyhodnocuje se pravý Př.: (a != 0) && (x / a > y) Je-li splněn levý operand || nevyhodnocuje se pravý Nedojde k dělení nulou

Jan LánskýÚvod do programování 2. hodina14 Vstup z klávesnice Pro uživatele programu příjemnější vstup z klávesnice než změna hodnota ve zdrojovém kódu a kompilace Pokud by to uživatelé vůbec zvládli … Při ladění programu vstup z klávesnice nahradit pevnými hodnotami Ruční zadávání hodnot je ztráta času

Jan LánskýÚvod do programování 2. hodina15 Vstup z klávesnice s = Console.Readline() Návratová hodnota řetězec string s x = Convert.ToInt32(s) Vstupní řetězec string převede na celé číslo int x x = Convert.ToInt32(Console.Readline()) Lze volat i vnořeně Není třeba pomocná proměnná

Jan LánskýÚvod do programování 2. hodina16 Vstup z klávesnice Uživateli oznámíme, co chceme zadat Načtení řetězce a převod na celé číslo V jednom příkazu Výsledky uložit do x a y

Jan LánskýÚvod do programování 2. hodina17 Cyklus while Syntax: while (podmínka) příkaz; Dokud je splněna podmínka opakuj vykonávání (složeného) příkazu Podmínka musí být v závorce a její hodnota musí být datového typu bool Srovnej: podmíněný příkaz opakuj max 1x Dopředu nevíme počet opakování Neprovede se ani jednou – Př.: while (false) Nekonečno opakování – Př.: while (true) Nekonečný cyklus  program nikdy neskončí  musíme program zabít Hlavička cyklu Tělo cyklu Existuje varianta do příkaz while () Nebudeme probírat 1. krok – Podmínka: true (krok 2), false (konec) 2. krok – Příkaz 3. krok – Přejít na krok 1

Jan LánskýÚvod do programování 2. hodina18 Ciferný součet Pracuje s y, kopii x, aby x se zachovalo Do cif přičteme poslední cifru čísla y Odstraníme poslední cifru čísla y

Jan LánskýÚvod do programování 2. hodina19 Euklidův algoritmus - princip Spočte největšího společného dělitele d dvou čísel m a n. NSD(m,n) = d d dělí m (značení d | m) pokud  k 1  Z: m = k 1 * d NSD(m,n) = Max d { d | m a zároveň d | n } Př.: NSD(490, 75) = 5 Odvození algoritmu: Pokud d | m a zároveň d | n poté d | (m – k * n), kde k  Z m = k 1 * d; n = k 2 * d; m – k * n = (k 1 * d) – k * (k 2 * d) = (k 1 – k * k 2 ) * d NSD(m,n) = NSD(m-k*n,n), kde k je celé NSD(m,n) = n, pokud n | m d | n n % d = 0 Nejstarší algoritmus na světě (300 př. n. l.) Konečnost algoritmu

Jan LánskýÚvod do programování 2. hodina20 Euklidův algoritmus - příklad 1. krok NSD(490, 75) 490 = 6* % 75 = krok NSD (75, 40) 75 = 1* % 40 = krok NSD(40, 35) 40 = 1* % 35 = 5 4. krok NSD (35, 5) 35 = 7* % 5 = 0 STOP: n | m

Jan LánskýÚvod do programování 2. hodina21 Euklidův algoritmus – I. část Načtení hodnot x a y z klávesnice

Jan LánskýÚvod do programování 2. hodina22 Euklidův algoritmus – II. část Dokud menší z čísel y není nula Počítáme zbytek po dělení většího x čísla menším y. Původní menší číslo x se stane větším a zbytek po dělení se stane menším číslem Po první iteraci cyklu platí: x > y Příklad: x = 6; y = 15; zbytek = 6 % 15 // zbytek = 6 x = y = // x = 15 y = zbytek // y = 6; Dokončíme výpis řádku s výsledkem V průběhu výpočtu se změní x a y, musíme vypsat nyní

Jan LánskýÚvod do programování 2. hodina23 Cyklus for for (inicializace;podmínka; inkrement) příkaz; 1. krok – Inicializace 2. krok – Podmínka true – krok 3, false konec 3. krok – Příkaz 4. krok – Inkrement 5. krok – Přejdeme na krok 2 i = 0 i < 10 Console.Write(i) i ++ Inicializace; While(Podmínka) { Příkaz; Inkrement; }

Jan LánskýÚvod do programování 2. hodina24 Cyklus for Syntax: for (inicializace;podmínka; inkrement) příkaz; Inicializace se provede pouze jednou na začátku cyklu Podmínka (hodnota typu bool) se testuje na začátku každé iterace cyklu. Je-li podmínka splněna iterace cyklu proběhne, je-li podmínka nesplněna cyklus končí. Inkrement se provádí na konci iterace cyklu Iterace cyklu: test podmínky, (složený) příkaz, inkrement Řídící proměnná cyklu – obvykle i, j, k, … Incializace obvykle i=0 Podmínka obvykle i < hodnota Inkrement obvykle i++ NEDĚLAT Změna řídící proměnné cyklu v těle cyklu Hlavička cyklu Tělo cyklu

Jan LánskýÚvod do programování 2. hodina25 Výpis čísel 0 až 9 Řídící proměnná cyklu i začne na hodnotě 0. Je-li i < 10 je splněna podmínka a vykoná se tělo cyklu V každé iteraci cyklu se hodnota i vypíše. Na konci každé iterace cyklu se hodnota i zvýší o 1 Po zvýšení hodnoty i na 10 bude podmínka nesplněna a cyklus končí. Tělo cyklu - (složený) příkaz Hlavička cyklu

Jan LánskýÚvod do programování 2. hodina26 break a continue break Ukončí (nejvíce zanořený) cyklus Pokračujeme zdrojovým kódem za cyklem continue Ukončí aktuální iteraci (nejvíce zanořeného) cyklu. Provede se inkrement (for cyklus) Pokračuje se další iterací cyklu

Jan LánskýÚvod do programování 2. hodina27 Součet pěti čísel - break Ukončení cyklu Zadané číslo nebylo kladné Lidé číslují pořadí od 1, programátoři od 0

Jan LánskýÚvod do programování 2. hodina28 Minimum z pěti čísel - continue Kompilátor hlásí chybu (předposlední řádek), pokud není min inicializované. Ale zbytečně. Nekonečný cyklus, pokud budu zadávat samá nekladná čísla Ukončení iterace cyklu Musel být while cyklus, ve for cyklu by se provádělo i++ vždy V první iteraci nové min vždy

Jan LánskýÚvod do programování 2. hodina29 Dva vnořené cykly – pyramida Přepisujeme max na jednom místě místo tří Vnější cyklus Vnitřní cyklus Ořezání pravé strany i <= max – j - 1 Ořezání levé strany i <= j Odřádkovat

Jan LánskýÚvod do programování 2. hodina30 Test prvočíselnosti Stačí zkoušet dělitele do odmocniny Našli jsme dělitele není prvočíslo Číslo je prvočíslem dokud neprokážeme opak Číslo menší než 2 nejsou prvočísla Prvočíslo má právě dva dělitele 1 a sebe sama. Proto 1 není prvočíslo

Jan LánskýÚvod do programování 2. hodina31 Rozklad na prvočísla Nalezen dělitel Jednotlivé dělitele oddělujeme *, ale ne prvního dělitele Musí být else, dělitele mohou být násobné Write(i) nepotřebuji formátovací řetězec

Jan LánskýÚvod do programování 2. hodina32 Základy časové složitosti algoritmů V současné době je čas běhu programu důležitější než spotřebovaná paměť. Časová složitost algoritmů se měří v počtu operací nutných ke zpracování vstupu dané délky n Asymptotická složitost algoritmů O(n), O(n log(n)), O(n 2 ), O(n 3 ). O(2 n )

Jan LánskýÚvod do programování 2. hodina33 Časová složitost Konstantní - O(1) zvýšení hodnoty čísla o jedna Logaritmická - O(log n) najití prvku v setříděné posloupnosti Lineární - O(n) najití prvku v nesetříděné posloupnosti Lineárnělogaritmická - O(n log(n)) setřídění posloupnosti chytře Kvadratická - O(n 2 ) setřídění posloupnosti hloupě Kubická - O(n 3 ) násobení matic (n řád matice) Exponenciální - O(2 n ) obchodní cestující

Jan LánskýÚvod do programování 2. hodina34 Časová složitost a cykly Cyklus procházející vstupní data  O(n) Dva vnořené cykly. V každém z cyklů projdeme celá vstupní data  O(n 2 ) Někdy cyklus proběhne výrazně méněkrát než n vydělené konstantou  složitost algoritmu nutno matematicky spočítat Obvykle to bývá log(n)

Jan LánskýÚvod do programování 2. hodina35 Časová složitost - přijatelná Rozdíl mezi O(n 2 ) a O(n log(n)) n = (roky vs sekundy) Kvadratické algoritmy jsou problematická pro velká data. Rozdíl mezi O(n 4 ) a O(2 n ) n = 70 (milisekundy vs tisíce let) Exponenciální algoritmy jsou použitelná jen pro malá data

Jan LánskýÚvod do programování 2. hodina36 Zpětná vazba Objevili jste ve slajdech chyby? Včetně pravopisných Nechápete nějaký slajd? Je příliš obtížný, nesrozumitelný? Máte nějaký nápad na vylepšení? Anonymní formulář Odeslání za pár vteřin