Úvod do programování 6. hodina

Podobné dokumenty
Úvod do programování 7. hodina

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

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 <->

Standardní algoritmy vyhledávací.

Algoritmizace a programování

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

Algoritmizace a programování

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

Programovací jazyk Pascal

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Úvod do programování 10. hodina

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Pole a kolekce. v C#, Javě a C++

Úvod do programování. Lekce 1

Úvod do programování 8. hodina

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

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

Zápis programu v jazyce C#

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

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

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

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

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

LabView jako programovací jazyk II

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

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

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

7. Datové typy v Javě

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

Jazyk C# a platforma.net

Algoritmizace a programování

Programy na PODMÍNĚNÝ příkaz IF a CASE

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

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Lekce 2. Řetězce a práce s nimi. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2016

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

Programování v jazyce JavaScript

Výčtový typ strana 67

Cvičné příklady Hodina 8 Cvičný 1

Kolekce, cyklus foreach

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

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

Poslední nenulová číslice faktoriálu

Základy PERLu snadno a rychle

Algoritmizace prostorových úloh

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

Algoritmizace prostorových úloh

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

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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

Základy programování (IZP)

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

VISUAL BASIC. Práce se soubory

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

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

Regulární výrazy. Vzory

Sada 1 - Základy programování

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

Sada 1 - PHP. 03. Proměnné, konstanty

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

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

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

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

Základy algoritmizace. Pattern matching

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující

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

Základy programování (IZP)

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

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

Lineární spojový seznam (úvod do dynamických datových struktur)

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

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

Třídění a vyhledávání Searching and sorting

ALGORITMIZACE A PROGRAMOVÁNÍ

VŠFS B_UPg Úvod do programování: Sbírka příkladů na cvičení RNDr. Jan Lánský, Ph.D.

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

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

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

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

Elegantní algoritmus pro konstrukci sufixových polí

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

63. ročník Matematické olympiády 2013/2014

Programování v Pythonu

Základy algoritmizace a programování

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

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

Transkript:

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

Umíme z minulé hodiny Algoritmy Třídění pole: Selection sort, Insertion sort, Bubble sort Třídění pole omezených hodnot: Counting sort Binární vyhledávání v setříděném poli Syntax Globální proměnné Měření počtu operací Měření doby běhu programu Jan Lánský Úvod do programování 6. hodina 2

Cíle hodiny Syntax Znaky Vlastní implementace řetězcových algoritmů jsou výborné na procvičení schopností práce s polem Textové řetězce Algoritmy Lexikografické uspořádání Zřetězení, podřetězec Hledání indexu výskytu znaku, řetězce Vymazání, vložení a nahrazení znaku, řetězce Změna hodnoty znaku na pozici dané indexem Naše vlastní řetězce Jan Lánský Úvod do programování 6. hodina 3

Znaky V některých programovacích jazycích bývá char 8 bitů ASCII char - velikost 16 bitů UTF16 znak Znakové konstanty uzavřeny v apostrofech Př.: char c1 = 'a'; Každé znakové konstantě odpovídá celočíselná hodnota Př.: int i = c1; Ale nedělat char c2 = (char) 40; Uspořádané podposloupnosti: číslice, malá písmena, velká písmena Jan Lánský Úvod do programování 6. hodina 4

Znaky Každá znaková konstanta má celočíselnou hodnotu Kolikáté písmeno abecedy nebo kolikáté číslo? Převod písmen na velká písmena a na malá písmena. Nevyvolá chybu. Jan Lánský Úvod do programování 6. hodina 5

Typy znaků Některé znaky jsou zároveň řídící a oddělovače slov (například znaky pro odřádkování char.isletterordigit písmeno nebo číslo char.isletter písmeno char.islower malá písmena (a, b, c, ) char.isupper velká písmena (A, B, C, ) char.isdigit číslice (0, 1, 2, ) char.iscontrol řídící znaky ( ) char.ispunctuation interpunkce (? :, ) char.iswhitespace oddělovače slov (mezera, ) char.issymbol symboly (< = + ) Jan Lánský Úvod do programování 6. hodina 6

Typy Znaků Tabulka prvních 256 znaků včetně typu znaku. Prvních 128 znaků společné i 8-bitovým znakovým sadám Výpis abecedy malých písmen v cyklu Analogicky: velká písmena, čísla Jan Lánský Úvod do programování 6. hodina 7

Textové řetězce string pole znaků s konstantní hodnotou Hodnoty uzavřeny v uvozovkách Př.: string a = "ahoj"; a[0] až a[3] Př.: prázdný řetězec string s = "" Př.: string s =Console.ReadLine() Nelze přímo modifikovat prvky přes []. char uzavírá hodnoty do apostrofů Pomocí funkcí vytváříme nové řetězce (s použitím již existujících řetězců StringBuilder pole znaků s nekonstantní hodnotou (nebudeme probírat) Jan Lánský Úvod do programování 6. hodina 8

Textové řetězce Inicializace řetězce Načtení řetězce z klávesnice Převod řetězce na pole znaků Převod pole znaků na řetězec Délka řetězce Získání hodnoty znaku s daným indexem Neovlivní s2 Pole konstantních hodnot. Mohu přiřadit celé nové pole, ale ne modifikovat hodnoty prvků pole Přístup ke konkrétnímu znaku je jen pro čtení, hodnota znak nejde modifikovat pomocí [] Jan Lánský Úvod do programování 6. hodina 9

Funkce vracející bool Test, zda obsahuje zadaný řetězec Test rovnosti řetězců Test nerovnosti řetězců s2.contains("ova"); true 'o' 'v' 'a' 'N' 'o' 'v' 'a' 'k' "Novak"!= "novak"; true 'n' 'o' 'v' 'a' 'k' 'N' 'o' 'v' 'a' 'k' Jan Lánský Úvod do programování 6. hodina 10

Lexikografické uspořádání string.compare Nalezne nejnižší index, na kterém se hodnoty znaků liší. Menší znak určil menší řetězec. 0 řetězce se rovnají -1 první řetězec je menší 1 první řetězec je větší Pokud je jeden řetězec Compare("doga", s1); -1 prodloužením druhého řetězce, pak 'd' 'r' 'u' 'h' delší řetězec je větší 'd' 'o' 'g' 'a' Lexikografické = podobné abecedě. Ale liší se (malá, velká písmena) Compare("druhy", s1); 1 'd' 'r' 'u' 'h' 'd' 'r' 'u' 'h' 'y' Jan Lánský Úvod do programování 6. hodina 11

Indexy Index prvního (posledního) výskytu řetězce (znaku) v řetězci. Možno omezit pozice od které hledám a délku prohledávaného úseku První výskyt znaku První výskyt řetězce Poslední výskyt První 'b' od pozice 3 v úseku délky 1 nenalezeno Předposlední řádek: omezení pozice od které hledám Poslední řádek: navíc omezena i délka prohledávaného úseku První 'u' od pozice 2 je na 3 Poslední 'b' 4 První "ubu " 1 První 'u' 1 První pozice má index 0 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 'b' 'u' 0 1 2 3 4 5 Indexy pole s1 Jan Lánský Úvod do programování 6. hodina 12

Počet výskytů Taková funkce není, vytvoříme si jí Index posledního výskytu Hledáme od posledního výskytu doprava Šlo by testovat přímo poslední v hlavičce cyklu Končíme, nenalezli jsme další výskyt Jan Lánský Úvod do programování 6. hodina 13

Převod na malá a velká písmena ToUpper - velká písmena Převod = konverze ToLower - malá písmena Nevyvolá chybu, co nejde převést nechá být Lze volat i řetězcové hodnotě Aplikováno na s4, ale výsledek stejný jako by bylo aplikováno na s1 Volání funkcí: řetězec tečka funkce 'p' 'a' 'v' 'e' 'l' 'P' 'A' 'V' 'E' 'L' 'P' 'a' 'v' 'e' 'l' s4 "pavel" s4 "PAVEL" s1 "Pavel" Jan Lánský Úvod do programování 6. hodina 14

Zřetězení Zřetězení = konkatenace: Nový řetězec obsahuje první zadaný řetězec následovaný druhým zadaným řetězcem + operátor zřetězení Zřetězit lze i řetězec se znakem s2 "Novak" s1 "Pavel" ' ' 'P' 'a' 'v' 'e' 'l' 'N' 'o' 'v' 'a' 'k' 'P' 'a' 'v' 'e' 'l' ' ' 'N' 'o' 'v' 'a' 'k' " " s1 + " " + s2 Jan Lánský Úvod do programování 6. hodina 15

Podřetězec souvislá část řetězce Podřetězec Podřetězec začínající na pozici zadané indexem a končící na konci řetězce s3.substring(6,3) "Nov" s3.substring(6) "Novak" 'N' 'o' 'v' 'N' 'o' 'v' 'a' 'k' 'P' 'a' 'v' 'e' 'l' ' ' 'N' 'o' 'v' 'a' 'k' 0 1 2 3 4 5 6 7 8 9 10 První pozice má index 0 Indexy pole s3 Podřetězec začínající na pozici zadané indexem a mající zadanou délku Chyba: pokud index + délka > Length s3 "Pavel Novak" Jan Lánský Úvod do programování 6. hodina 16

Vložení Vložení: na pozici zadanou indexem vloží zadaný řetězec. Znaky původního řetězce posune. Vložení doprostřed řetězce Vložení nakonec řetězce s3.insert(6, "je") "Pavel je Novak" 'P' 'a' 'v' 'e' 'l' ' ' 'j' 'e' ' ' 'N' 'o' 'v' 'a' 'k' 'P' 'a' 'v' 'e' 'l' ' ' 'N' 'o' 'v' 'a' 'k' 0 1 2 3 4 5 6 7 8 9 10 11 12 První pozice má index 0 Indexy pole s3 Zelená posun Červená - vložení s3 "Pavel Novak" Jan Lánský Úvod do programování 6. hodina 17

Odstranění Odstranění: V řetězci nalezne podřetězec určený svým začátkem (a délkou). Nalezený řetězec odstraní. Zbylé znaky posune. 'P' 'a' ' ' 'N' 'o' 'v' 'a' 'k' 'P' 'a' 'v' 'e' 'l' 'P' 'a' 'v' 'e' 'l' ' ' 'N' 'o' 'v' 'a' 'k' 0 1 2 3 4 5 6 7 8 9 10 První pozice má index 0 Zelená posun Indexy pole s3 Zadaný index začátku odstraňovaného řetězce s3.remove(5) "Pavel" Zadaný index začátku a délka odstraňovaného podřetězce Chyba: pokud index + délka > Length s3.remove(2, 3) "Pa Novak" s3 "Pavel Novak" Jan Lánský Úvod do programování 6. hodina 18

Nula nahrazení není chyba Nahrazení Vymazání: Replace("retezec", "") Nahrazení: V řetězci nalezne podřetězec určený hodnotou, ten odstraní a na místo jeho bývalého začátku vloží jiný podřetězec. Opakuje pro všechny výskyty. První podřetězec je nahrazen druhým Stejné jako předchozí řádek Místo řetězců můžou být jen znaky s3.replace('v', 'w') s3.replace("pavel", "Petr") 'P' 'a' 'w' 'e' 'l' ' ' 'N' 'o' 'w' 'a' 'k' 'P' 'e' 't' 'r' ' ' 'N' 'o' 'v' 'a' 'k' 'P' 'a' 'v' 'e' 'l' ' ' 'N' 'o' 'v' 'a' 'k' s3 "Pavel Novak" Zelená posun Červená - výměna Jan Lánský Úvod do programování 6. hodina 19

Změna hodnoty znaku v řetězci String je pole znaků s konstantní hodnotou Nelze použít zápis s[0] = 'a' Přesto chceme hodnoty znaků někdy měnit Tři možná řešení Naše volba Využití funkce Substring Konverze na pole znaků a zpět Konverze na StringBuilder a zpět Jan Lánský Úvod do programování 6. hodina 20

Změna hodnoty znaku Podřetězec, který začíná na začátku řetězce a končí před zadaným indexem Vše spojíme Podřetězec, který začíná na za zadaným indexem a končí na konci řetězce 'a' s1 'v' hodnota 's' ' s2 ' 'o' 'a' 'v' 'e' 's' ' ' 'o' 'a' 'v' 'e' 's' ' ' 'o' 0-1 index +1 Len Jan Lánský Úvod do programování 6. hodina 21

Změna hodnoty znaku - Ukázka Novak Horal index = 2 hodnota 'r' s1 Od pozice 0 počet prvků 2 'H' 'o' 'r' 'a' 'k' 'H' 'o' 'v' 'a' 'k' 0 1 2 3 4 s2 Od pozice 3 do konce řetězce Jan Lánský Úvod do programování 6. hodina 22

Funkce Split Nyní nebudeme ještě používat, až později string[] string.split(char[]) Rozdělí řetězec na disjunktní podřetězce podle oddělovačů zadaných v poli Vrací pole řetězců Problém Při dělení na slova, čísla nejde vyjmenovat všechny myslitelné oddělovače. Znak, se kterým jsme nepočítali. Tj. pole polí. Na nás zatím moc složité Jan Lánský Úvod do programování 6. hodina 23

Ukázkový příklad spíše antipříklad V zadaném řetězci převeďte každé liché slovo na velká písmena a každé sudé slovo na malá písmena. Řešení na následujícím slajdu Není řešeno obecně, ale pro konkrétní řetězec (s hlavičkou by se nevešlo na slajd) Časová složitost může být vysoká (dle přesné implementace stringu) Iterativní přidávání znaků na konec Jan Lánský Úvod do programování 6. hodina 24

Ukázkový příklad řešení Až zkončí písmena bude změna velikosti velke zda je nyní slovo z velkých písmen prvni zda čekáme na první písmeno řetězce zmena zda při příštím nepísmenu máme změnit proměnnou velke Při prvním nepísmenu změna velikosti, Vytváříme nový řetězec přidáváním znaků nakonec Jan Lánský Úvod do programování 6. hodina 25

Naše řetězce char[] Pole znaků char[] může odsimulovat string Se znalostí minulých hodin snadno vytvoříme jednotlivé funkce, co má string Ukážeme si několik funkcí, zbytek bude na cvičení Jan Lánský Úvod do programování 6. hodina 26

Naše řetězce char[] Výpis na obrazovku znak po znaku Převod řetězce string na náš řetězec char[] Zřetězení, bude další slide Jan Lánský Úvod do programování 6. hodina 27

Naše řetězce char[] Vytvořit pole potřebné délky Do nového řetězce nakopírujeme první řetězec Druhý řetězec kopírujeme s posunem o délku prvního pole Jan Lánský Úvod do programování 6. hodina 28

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 http://goo.gl/forms/wxkzqbszls Jan Lánský Úvod do programování 6. hodina 29