Pole, výjimky a listy

PVA


Bc. Matěj Cajthaml — SSPŠ

©

Práce

Vícedimenzionální pole

Vícedimenzionální pole

  • již známe jednodimenzionální pole
  • můžeme vytvářet neomezené dimenze
  • většinou se nám hodí dvoj-dimenzionální

Typy vícedimenzionálních polí

  • s přesnou velikostí — přesný počet prvků na každé z os
  • zubaté — pole polí

S přesnou velikostí

Zubaté

Více dimenzí!

K čemu se nám vícedimenzionální pole mohou hodit?

Získání velikosti

Velikost pole s přesnou velikostí

Velikost zubatého pole

Práce

Výjimky

Výjimky

  • způsob práce s mimořádnými situacemi
  • uchovávají informace o zavolání
  • vyvolání výjimky

Zachycení

  • při vyvolání se program zastaví
  • program se snaží najít nejbližší blok catch(...)
  • nenalezne-li ho: program se ukončí a vyhodí chybovou hlášku
  • nalezne-li ho: zkontroluje co se má udělat a popř. pokračuje mimo catch blok nebo hledá další catch

Typy výjimek

  • všechny výjimky využívají Exception
  • můžeme si definovat vlastní výjimky
  • předpřipravené: DivideByZeroException, IndexOutOfRangeException, ...

Speciální výjimka

Zachycení všech

Výjimka jako objekt

Výjimka jako objekt

  • ze zachycené výjimky
  • např. e.Message
  • později ve školním roce vlastní výjimky s daty

Zachycení více výjimek

Vyvolání výjimky

Blok finally

  • část kódu, která se volá po zavolání bloku try a catch
  • musí být na konci
  • volá se i když výjimku nepřijmeme a program by se měl ukončit

Co se stane když v bloku catch vyvoláme výjimku?

Napadá Vás nějaká nevýhody výjimek?

Nevýhody výjimek

  • jsou pomalé
  • nepřehledné
  • zbytečná práce na více

Konverze pomocí TryParse

  • podobná Parse metodě na datových typech
  • nevyvolá výjimku v případě chyby
  • vrací boolean hodnotu
  • přijímá danou textovou hodnotu a referenci na proměnou
  • klíčové slovo out

Rychlé opakování pole

Pole je způsob uložení dat v paměti.

Místo několika proměnných můžeme mít pouze jednou.

Pole má vždy nastavený datový typ, velikost a jméno pole.

V poli máme uchovány informace pod indexy: od 0 po n — 1 kde n je velikost pole.

Při přístupu mimo pole (špatný index) se vyvolá výjimka.

Pole definujeme:

Pole může být vícedimenzionální. Tedy, může ukládat hodnoty pod více indexy.

Máme dva typy vícedimenzionálních polí: zubaté a s přesnou velikostí.

Zubaté pole jsou pole v polích. Tedy každý řádek může mít různou velikost.

Pole s přesnou velikostí má všechny velikosti dimenzí již z inicializace předem definované.

Jednořádkový zápis podmínky

  • v C# můžeme zapisovat podmínky jednořádkově
  • zpřehlednění kódu

Vynechávání složených závorek

  • v některých případech můžeme v C# vynechávat složené závorky — bloky
  • v daném bloku musí být však pouze jeden další příkaz (nebo další blok)

Vyřešme problém pomocí pole:

  • představte si, že děláme program pro nákupní seznam
  • na nakupní seznam se nám přidávají položky
  • položky přidávají různě po sobě členové domácnosti
  • položky ukládáme jako řádky textu

V jakém datovém typu budeme ukládat položky?

Co když se rodina dohodne, že koupí maximálně n položek, ale nakonec bude potřeba více položek?

Řešení 1

Omezíme počet a nic na více nekoupíme.

Řešení 2

Budeme zvětšovat počet — pole.

Práce

Zvětšování pole

Vytvoříme program, který bude umět zvětší pole o jedna dle potřeb programu či uživatele.

Vidíte v tomto postupu nějaký problém?

Listy

Listy

  • způsob uložení dat programu
  • velmi podobné poli
  • list je nafukovací pole
  • list se zvětšuje dle potřeb programu
  • používají se indexy, prvky lze mazat

Přidávání do listu

  • vnitřně má list omezenou velikost
  • když přidáváme prvek a není v listu místo, místo se vytvoří
  • list se zvětšuje dle speciálního výrazu a je velmi rychlé

Vytvoření listu

Přidání hodnoty

Čtení jedné hodnoty

Vložení hodnoty

Odstranění hodnot

Získání velikosti listu

Kontrola zda list obsahuje hodnotu

Převedení na pole

Vyčištění listu

Index prvku

Seřazení

Jaké vidíte výhody listů?

Kde byste použili pole a kde listy?

Práce

Nákupní seznam

Zkusíme vypracovat program pro nákupní seznam, se kterým jsme pracovali na začátku hodiny.

Přepínače

Přepínače

  • řídící struktura — stejně jako cyklus, podmínky, ...
  • chytřejší podmínka
  • hodí se na menší počet podmínky
  • podobné hodnoty
  • klíčová slova: switch, case, break, default

Ukázka

Spojení možností

Bez použití default

Vyřešme problém:

Upravujeme domácí úkol s evidencí studentů. Místo jména potřebujeme začít ukládat další informace a to například třídu.

Jak na to?

Vyřešme problém:

Co kdybychom potřebovali uložit další informace a to například:

  • jméno, třída, věk
  • e-mail, rok nástupu, kontakt na rodiče

Jak na to?

Struktury

Struktury

  • způsob uložení více dat (vlastností) do jednoho celku
  • daný celek můžeme vytvořit a přiřadit mu hodnoty

Vytvoření struktury

  • nové klíčové slova: struct, public
  • tvoříme v třídě Program (nebo před příkazy)

Vytvoření instance

  • instance = objekt = soubor dat daného typu (struktury)

Použití

  • struktury můžeme používat všude
  • např. pole, listy, struktury v strukturách,...
  • hodnoty můžeme v postupu programu měnit

Spojení s listy

Struktury fungují podobně jako datové typy a jejich hodnotu lze změnit pouze přiřazením.

Pro pokročilé: nejedná se o referenční typ

Práce

Lepší evidence studentů

Vytvoříme program na evidenci údajů o studentech. Budeme moci studenty přidávat popř. i zobrazovat či mazat.

Dva typy zalomení řádku

Dva typy zalomení řádku

  • již známe \n
  • \n — UNIXové systémy (tj. Linux, MacOS)
  • \r\n — Windows
  • soubor může mít určené vlastní zalomení
  • vidíme i ve VS

Rozlišení v programu

  • hodnota Environment.NewLine.ToString()
    • váže se na systém, ne na soubor / konzoli
  • čteme-li ze souboru (nebo v kódu), zkontrolujeme ukončení řádků tam
  • čteme-li z konzole tak se musíme přesvědčit co se do programu odesílá

Proč je to vůbec problém?

Rozdělení řádků v programu

Jak se správně čtou hodnoty z textové hodnoty?

Práce se znaky z textového řetězce

Co je vlastně textový řetězec?

Textový řetězec je pole znaků.

ToCharArray

Přístup ke znakům pomocí indexu

Děkuji za pozornost!

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