Opakování
1. ročníku

PVA


Bc. Matěj Cajthaml — SSPŠ

©

Algoritmus

Algoritmus

  • schématický postup
  • řešení určitého problému
  • vždy má jeden začátek a minimálně jeden konec
  • vstupy a výstupy
  • musí splňovat: konečnost, obecnost, determinovanost, jednoznačnost a efektivnost

Konečnost

  • = konečný počet kroků
  • výjimku tvoří reaktivní procesy

Obecnost

  • = řešit obecný problém
  • 1 + 1 vs. a + b

Determinovanost

  • = pro stejné vstupy vyřeší problém se stejnými výstupy
  • výjimku tvoří náhodné algoritmy

Jednoznačný

  • = musí být jasné, co každý krok provede
  • důvod existence programovacích jazyků

Efektivnost

  • = musí šetřit zdroje počítače
  • některé problémy nejsou na aktuálních PC řešitelné v relativně rychlém čase
  • skoro všechny problémy lze zrychlovat

Reprezentace

Reprezentace

  • různé způsoby
  • různé standardy
  • mělo by být zřejmé k čemu slouží
  • jasně definované kroky

Textově

  • slovní popis
  • nepřesné, náchylné na chyby
  • některé věci nelze přesně popsat
  • zbytečné informace navíc

Strukturogramy

  • zápis do tabulek
  • velké a nepřehledné značení
  • nelze používat na větší algoritmy

Vývojové diagramy

  • předdefinované tvary s jasným účelem
  • velmi jednoduché
  • nejpoužívanější typ obecného zápisu

Začátek

Konec

Vstup a výstup

  • vypsání údajů uživatelovi
  • získání údajů od uživatele

Příkazy

  • vykonání určitých příkazů

Podmínka

  • porovná, zda tvrzení je platné
  • dvě odnože — musí se pojmenovat
  • pravda/nepravda nebo obdobně

Cyklus

  • provede uvedené bloky pro určité data — cyklus dat

Tunel

  • propojení dvou částí diagramu
  • používané pro přehlednost

Ukázky

Vývojové diagramy

PRÁCE

Vytvořte vývojové diagramy na papír nebo v programu Visio (popř. na stránce draw.io).

  • sečtení čísel od 1 do zadaného čísla
  • výpočet obvodu a obsahu kruhu o zadaném poloměru
  • přechod se semaforem
  • největší číslo ze tří zadaných

Algoritmizace

  • řešení určitého problému za pomoci algoritmů
  • postup: formulace, analýza, vytvoření
  • nutná praxe
  • programování

Programovací jazyk

Programovací jazyk

  • sekvence příkazů k řešení problému
  • používají se algoritmy
  • implementace algoritmu je konkrétní
  • např. C#, Java, C++, ...

Strojový kód

  • = binární soubor s instrukcemi
  • nemusí fungovat na různých počítačích
  • např. .exe
  • v podstatě v něm nelze programovat
  • Assembler

Kompilace

  • = převedení programu v programovacím jazyce do strojového kódu
  • logická struktura
  • samotný program se může zkompilovat i pro jiné počítače

Kompilované jazyky

  • programy jsou nejdříve kompilovány a potom jsou spouštěny
  • rychlejší, lepší bezpečnost
  • většina jazyků

Interpretované jazyky

  • programy jsou kompilovány až při spuštění
  • vždy musí být nainstalován určitý software

C#

C#

[sí šárp]

  • programovací jazyk
  • velmi známý
  • dobrý pro začátečníky
  • .NET Core = pro všechny OS / .NET Framework
  • konzolové aplikace, později formuláře

Projekt

Vytvoření projektu

  • zapnutí Visual Studia
  • založení konzolové aplikace
  • .NET Framework vs. .NET Core

Spuštění programu

Proměnné

Proměnná

  • uložení dat v programu
  • data se ukládají v operační paměti (RAM)
  • musí mít určené jméno a datový typ
  • její hodnotu lze měnit
  • deklarace

Jméno

  • používáme na více místech v kódu
  • mělo by být výstižné a krátké
  • používáme zejména anglické názvy
  • jména mohou v jednom bloku existovat pouze jednou

A co je to vlastně ten blok?

Nesprávně:

Správně:

Datový typ

  • určení co daná proměnná obsahuje
  • píše se vždy před jméno proměnné
  • ukládáme jako binární hodnotu

Datové typy

Celé číslo

  • short/int/long
  • short: -32 768 až +32 767
  • int: -2 147 483 648 až +2 147 483 647
  • long:
    -9 223 372 036 854 778 až +9 223 372 036 854 775

Celé číslo

Na co bychom v programu potřebovali celá čísla?

Kladné celé číslo

  • ushort/uint/ulong
  • větší kladný rozsah, nemá znaménko
  • ushort: 0 až +65 535
  • uint: 0 až +4 294 967 295
  • ulong: 0 až +18 446 744 073 709 551 615

Kladné celé číslo

Znak

  • char
  • lze uložit jen jeden znak

Znak

Text

  • string
  • řetězec znaků

Text

Pravdivostní hodnota

  • boolean
  • pouze dvě hodnoty: true a false

Pravdivostní hodnota

Číslo s desetinnou čárkou

  • float/double/decimal
  • float: přesnost cca 6 číslic
  • double: přesnost cca 15 číslic
  • decimal: přesnost cca 28 číslic

Číslo s desetinnou čárkou

Klíčová slova

  • názvy, které nelze používat pro proměnné

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

Přepisování hodnoty

  • u proměnných lze přepisovat hodnotu

Přepisování hodnoty

Komentáře

  • označení textu, který se nezkompiluje
  • používáme na poznámky či dokumentaci

Konstanty

  • hodnota musí být definována již při deklaraci
  • hodnotu nelze změnit
  • speciální proměnná
  • šetří výpočetní nároky

Konstanty

Konzole

Konzole

  • třída Console — konzole
  • komunikace mezi programem a uživatelem
  • zapisování a čtení

Třída

  • seskupení vlastností a metod
  • vlastnost — speciální proměnná
  • metoda — rozdělení příkazů
  • přístup pomocí .

Metody a funkce

  • část kódu, kterou lze zavolat
  • přijímá parametry
  • vrací návratovou hodnotu a nebo nic

Vypisování

  • hodnoty, které lze převést na text, můžeme vypsat
  • Console.Write() vs. Console.WriteLine()

Vypisování

Čtení textu

  • přečte zadaný text uživatelem až do stisknutí enteru
  • zadaný text můžeme uložit do proměnné

Čtení textu

Nadpis konzole

  • pomocí vlastnosti Title
  • textová hodnota

Nadpis konzole

Barvy

  • ConsoleColor — předpřipravená třída
  • všechny barvy, které podporuje konzole
  • přístup pomocí . a jména barvy

Barva pozadí

  • vlastnost na třídě Console
  • BackgroundColor
  • jakákoliv hodnota z ConsoleColor
  • všechen text zapsán potom bude mít pozadí dané barvy

Barva pozadí

Barva pozadí — skládání

Barva popředí

  • vlastnost na třídě Console
  • ForegroundColor
  • jakákoliv hodnota z ConsoleColor
  • všechen text zapsán potom bude mít barvu dané barvy

Barva popředí

Resetování barvy

  • metoda ResetColor() ve třídě Console
  • nastaví základní barevné hodnoty konzole
						

Viditelnost kurzoru

  • skryje/zobrazí blikající čárku kurzoru
  • vlastnost CursorVisible ve třídě Console
  • boolean hodnota

Viditelnost kurzoru

K čemu nám může sloužit skrytí kurzoru?

Vymazání konzole

  • vymaže obsah konzole
  • psaní začne na pozici 0, 0
  • metoda Clear ve třídě Console

Vymazání konzole

Výrazy

  • určeno k úpravě proměnných
  • výsledek výrazu můžeme znovu uložit do proměnné
  • např. matematické operace

Matematické operace čísel

  • každý jazyk obsahuje základní matematické operace
  • sčítání, odečítání, násobení, dělení

Matematické operace čísel

Spojení řetězců

  • řetězce můžeme spojovat s jinými proměnnými
  • proměnné musí být možné přepsat do textové podoby
  • speciální operátor +

Spojení řetězců

Konverze

Konverze

  • = převádění
  • často potřebujeme převést hodnoty mezi sebou
  • textový řetězec → celé číslo

Řetězec

  • převedení hodnot na textovou hodnotu
  • hodnoty můžeme dále upravovat

Implicitní převody

  • stejné datové typy
  • převáděný datový typ se do jiného datového typu vejde
  • vždy zůstane zachována hodnota

Explicitní převody

  • převáděný datový typ se do jiného datového typu nemusí vejít
  • přenost či nějaká data — hodnoty se mohou ztratit

Konverze pomocí datových typů

  • u většiny datových typů
  • předpřipravená metoda Parse

Konverze pomocí Convert

  • předpřipravená třída Convert
  • různé převádění hodnot mezi datovými typy

Jaký je problém těchto konverzí?

Neplatné hodnoty

  • když zadáme špatnou hodnotu, program vyvolá výjimku a spadne
  • více o výjimkách si řekneme později

Limity Parse

  • nepovoluje null hodnoty

Limity Convert

  • povoluje null hodnoty

Co vypíše následující kód?

Složené přiřazení

  • zrychlený zápis operací v C#
  • skoro na všechny operátory

Ukázky

Složitější matematické operace

Třída Math

  • předpřipravená třída pro složitější operace
  • např. mocniny, odmocniny, absolutní hodnota, zaokrouhlování, ...
  • konstanty: π, ε

Zaokrouhlování

Trigonometrické

Různé operace

Konstanty

Textové funkce

Textové funkce

  • slouží k úpravě či čtení údajů z textu
  • např. zjištění délky textu, smazání bílých znaků, nahrazení
  • např. změna velikosti písmen, zjištění zda text obsahuje zadané slovo, ...

Podmínky

Podmínka

  • způsob větvení programů
  • podmiňujeme volání dalších příkazů
  • zjištujeme, zda je nějaké tvrzení platné
  • booleanova hodnota

Základní podmínka

Neplatné tvrzení

Porovnání rovnosti hodnot

  • operátor ==
  • vrací booleanovu hodnotu
  • exaktní porovnávání hodnot
  • stejné datové typy

Nerovnost

Operátor !

  • opačná hodnota booleanovy hodnoty
  • true → false
  • false → true

Větší jak

  • číselné datové typy
  • >

>=

Menší jak

  • číselné datové typy
  • < či <=

Kombinování booleanových hodnot

Kombinování hodnot

  • dvě podmínky zároveň
  • neplatí ani jedna z nich
  • platí alespoň jedna z nich

Zároveň — &&

  • and
  • všechny části musí být platné — hodnoty true

Nebo — ||

  • or
  • alespoň jedna část musí být platná — hodnoty true
  • jakmile narazíme na pravdivou hodnotu, další se již neověřují

Pokročilé kombinace

Další větvení

Další větvení

  • podmínky můžeme vkládat do sebe
  • můžeme přidat blok, který se zavolá, pokud podmínka není splněna

Jinak — else

Jinak a pokud — else if

.Contains()

Iterace

Iterace

  • = cyklus, opakování, procházení
  • opakování daných přikazu po nějakou dobu

Příkaz while

  • příkazy se volají do té doby, když je hlavní podmínka platná — hodnoty true
Kolikrát se tento cyklus zavolá?

Příkaz for

  • speciální cyklus, ve kterém se automaticky používají proměnné
  • není potřeba psát zdlouhavé while bloky

Části for

Lze pomocí for vytvořit nekonečný cyklus?

Aritmetické operátory

Známé operátory

Zbytek po dělení

  • číselné datové typy
  • určení, jaké číslo zůstane po dělení jiným číslem
  • nejčastější využití: zda je čislo liché/sudé
  • značíme %

Zbytek po dělení

Můžeme získat zbytek po dělení nulou? Tj.: x % 0

Inkrementace / Dekrementace

Co si představíte pod inkrementací?


Co si představíte pod dekrementací?

(In/De)krementace

  • slouží k zvětšení a zmenšení číselných hodnot
  • vždy o jedna
  • zjednodušení zápisů
  • dva typy: postfix a prefix

Zkrácení zápisu

Postfix / prefix

  • postfix — k modifikaci dojde až po získání hodnoty
  • prefix — k modifikaci dojde před získáním hodnoty

Postfix / prefix

Kurzor v konzoli

Kurzor v konzoli

  • můžeme určit kde se nachází kurzor
  • na daném místě můžeme z kódu zapisovat či může zapisovat uživatel
  • komplexnější vypisování

Kurzor v konzoli

  • vlastnost CursorTop a CursorLeft

Velikost konzole

  • šířka a výška konzole
  • čtení i nastavení

Maximální velikost konzole

  • hodnota nelze měnit

Řetězce

Interpolace řetězců

  • zrychlený zápis složitých textů

Escape znak

  • speciální sekvence s určeným významem
  • nebo zruší význam následujícího znaku
  • např. uvozovky v textu

Formátování

https://docs.microsoft.com/cs-cz/dotnet/csharp/programming-guide/strings/#string-escape-sequences

Pole

Pole

  • způsob uložení dat
  • stejný datový typ
  • vždy nastavujeme velikost pole

  • data se postupně za sebe ukládají a můžeme je číst a měnit

Vytvoření

Reprezentace v paměti

Index

  • číselné označení položky v sekvenci
  • začínáme od nuly — setříme si velikost

Přístup k záznamům

  • přistupujeme pomocí indexu
  • můžeme přistupovat do jakékoliv hodnoty v poli
  • rozmezí: 0n-1, kde n je velikost pole

Čtení záznamů

Zapisování záznamů

  • k čemu by pole byli bez možnosti zapisovat...
  • můžeme zapisovat do jakéhokoliv záznamu
  • rozmezí: 0n-1, kde n je velikost pole

Čtení záznamů

Co se stane když přistoupíme ke špatnému indexu?


Co je to špatný index?

Špatný přístup

  • při přístupu do špatného indexu se vyvolá výjimka
  • System.IndexOutOfRangeException:
    Index je mimo hranice pole

Velikost pole

  • vlastnost Length

Motivace

Proč se používají

  • umí spravovat spoustu dat najednou
  • přidávají přehlednost kódu
  • jsou logicky poskládané

Co nahrazují

Proč musíme uvádět velikost pole?

Procházení pole

Šlo by vypsat pole pomocí již známých cyklů?

Pomocí cyklu while

Pomocí cyklu for

Cyklus typu foreach

  • velmi podobný for
  • neurčujeme pořadí ani styl čtení
  • přečte vše

Možnosti iterace

Ukočení iterace

  • všechny typy cyklů, které jsme si ukázali, podporují ukončení
  • při zavolání příkazu se aktuální cyklus ukončí a příkazy pokračují za ním
  • klíčové slovo break

Ukázka

Zanechání aktuálního průchodu

  • všechny typy cyklů, které jsme si ukázali, podporují zanechání
  • při zavolání přikazu se aktuální průchod ukončí
  • může-li cyklus pokračovat, pokračuje a nebo se volají příkazy po cyklu
  • klíčové slovo continue

Ukázka

Rychlá inicializace

  • pole můžeme inicializovat ihned při vytvoření
  • tedy nastavíme hodnoty pole
  • neurčujeme velikost pole

Proč neurčujeme velikost?

Třída Array

Třída Array

  • pomocná třída pro podporu práce s poli
  • např. seřazení, zda obsahuje položku, ...

Seřazení

  • metoda Sort

Přehození pořadí

  • metoda Reverse

Index prvku

  • metoda IndexOf

Rozdělení textových řetězců

Rozdělení textových řetězců

  • textová funkce Split
  • vrací pole textových hodnot rozdělených parametrem
  • parametrem je znak určující separaci

Ukázka

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/