Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Úvod do programování 6. hodina

Podobné prezentace


Prezentace na téma: "Úvod do programování 6. hodina"— Transkript prezentace:

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

2 Úvod do programování 6. hodina
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

3 Úvod do programování 6. hodina
Cíle hodiny Syntax Znaky 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 Vlastní implementace řetězcových algoritmů jsou výborné na procvičení schopností práce s polem Jan Lánský Úvod do programování 6. hodina

4 Znaky char - velikost 16 bitů – UTF16 znak
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

5 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

6 Úvod do programování 6. hodina
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

7 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

8 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 []. 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) char uzavírá hodnoty do apostrofů Jan Lánský Úvod do programování 6. hodina

9 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 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í [] Neovlivní s2 Jan Lánský Úvod do programování 6. hodina

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

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

12 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í 'b' od pozice 3 v úseku délky 1 nenalezeno První výskyt řetězce Poslední výskyt První 'u' od pozice 2 je na 3 'b' 'u' 1 2 3 4 5 Poslední 'b' 4 Předposlední řádek: omezení pozice od které hledám Poslední řádek: navíc omezena i délka prohledávaného úseku První "ubu " 1 První 'u' 1 První pozice má index 0 Indexy pole s1 Jan Lánský Úvod do programování 6. hodina

13 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

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

15 Zřetězení 'N' 'o' 'v' 'a' 'k' ' ' 'P' 'e' 'l' 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" 'N' 'o' 'v' 'a' 'k' ' ' 'P' 'e' 'l' " " s1 + " " + s2 Jan Lánský Úvod do programování 6. hodina

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

17 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' 'N' 'o' 'k' 1 2 3 4 5 6 7 8 9 10 11 12 Zelená – posun Červená - vložení Indexy pole s3 První pozice má index 0 s3 "Pavel Novak" Jan Lánský Úvod do programování 6. hodina

18 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. Zadaný index začátku odstraňovaného řetězce Zadaný index začátku a délka odstraňovaného podřetězce Chyba: pokud index + délka > Length Zelená – posun 'P' 'a' ' ' 'N' 'o' 'v' 'k' 'e' 'l' 1 2 3 4 5 6 7 8 9 10 s3.Remove(2, 3) "Pa Novak" s3.Remove(5) "Pavel" První pozice má index 0 s3 "Pavel Novak" Indexy pole s3 Jan Lánský Úvod do programování 6. hodina

19 Nahrazení 'P' 'a' 'w' 'e' 'l' ' ' 'N' 'o' 'k' 't' 'r' 'v'
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("Pavel", "Petr") s3.Replace('v', 'w') 'P' 'a' 'w' 'e' 'l' ' ' 'N' 'o' 'k' 't' 'r' 'v' Zelená – posun Červená - výměna s3 "Pavel Novak" Jan Lánský Úvod do programování 6. hodina

20 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í Využití funkce Substring Konverze na pole znaků a zpět Konverze na StringBuilder a zpět Naše volba Jan Lánský Úvod do programování 6. hodina

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

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

23 Funkce Split string[] string.Split(char[]) Problém
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

24 Úvod do programování 6. hodina
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

25 Ukázkový příklad řešení
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 Až zkončí písmena bude změna velikosti 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

26 Úvod do programování 6. hodina
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

27 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

28 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

29 Úvod do programování 6. hodina
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 Jan Lánský Úvod do programování 6. hodina


Stáhnout ppt "Úvod do programování 6. hodina"

Podobné prezentace


Reklamy Google