Náhodná čísla, soubory, datum a čas

PVA


Bc. Matěj Cajthaml — SSPŠ

©

Náhodnost

Co je náhodné?

Pseudonáhodnost

  • není zcela náhodné
  • vypočítává se různými funkcemi s parametry

Co můžou být tyto parametry?

Potom jsou nám tyto náhodné čísla k ničemu, ne?

Objekt Random

Objekt Random

  • vytvoříme objekt, který dle aktuálního času bude generovat čísla
  • můžeme generovat celá čísla, čísla v rozsahu nebo desetinná čísla

Vytvoření

Next()

  • kladné celé číslo v rozsahu int

Next(max)

  • celé číslo v rozsahu 0 — maximum int

Next(min, max)

  • celé číslo v rozsahu minimum — maximum int

NextDouble()

  • desetinné číslo v rozsahu 0.0 — 1.0

Jak získáme desetinné číslo např. v rozsahu 0 — 100?

Více Random objektů

Větší-menší

Společná práce

Vytvořte program reprezentující hru větší-menší. Program vygeneruje náhodné číslo, které se snaží uživatel uhodnout pomocí tipů.

Soubory

Soubory

  • programy často potřebují číst / psát do souborů
  • konfigurace, stav — saves, úkoly, ...
  • dva způsoby práce

Teorie souborů

Soubor má příponu, ta však neurčuje co je obsahem.

Změnou přípony se data netransformují.

Data se na disku ukládají binárně a při převodu do textových hodnot nemusí dávat smysl.

\n vs. \r\n

Každý soubor může mít různé přístupové práva.

Vlastník vs. skupina vs. ostatní

Třída File

Třída File

  • předpřipravené metody ke čtení a zápisu souborů
  • musíme importovat knihovnu System.IO

File.ReadAllText(cesta)

  • přečte všechen text jako jeden string
  • pokud soubor neexistuje — vyhodí výjimku FileNotFoundException

File.ReadAllLines(cesta)

  • přečte všechen text po řádcích
  • vrací pole stringů
  • pokud soubor neexistuje — vyhodí výjimku FileNotFoundException

File.Exists(cesta)

  • zkontroluje zda soubor existuje
  • vrací boolean hodnotu

File.Delete(cesta)

  • smaže soubor
  • neexistuje-li, nic se nestane

File.WriteAllText(cesta, obsah)

  • zapíše obsah do souboru
  • všechen obsah se přepíše

File.WriteAllLines(cesta, radky)

  • zapíše jednotlivé řádky do souboru
  • všechen obsah se přepíše

File.AppendAllText(cesta, obsah)

  • přidá obsah na konec souboru

File.AppendAllLines(cesta, řádky)

  • přidá jednotlivé řádky na konec souboru

Další metody

  • File.Copy(src, dst)
  • File.Move(src, dst)
  • File.Replace(src, dst, dstBackup)
  • File.GetLastAccessTime(file)
  • File.GetLastWriteTime(file)

Kde soubor?

Práce

Založte nový projekt a vytvořte soubor pomocí:

File.WriteAllText("27_files_1.txt", ":)")

Nalezněte místo jeho vytvoření. Kde se tento soubor nachází?

V jiné složce.

Práce

Zjistěte jak a vytvořte soubor v nadřazené složce té aktuální.

Na ploše.

Práce

Vytvořte soubor na Vaší ploše.

Šibenice

Práce

Dle videa vytvořte hru šibenice. Slova budou náhodně zvolena ze seznamu ze souboru words.txt.

Postupný zápis

Práce

Vytvořte program, který bude do souboru postupně připisovat věci tak, jak je bude uživatel zadávat.

Validace

Práce

Vytvořte program, který přečte obsah souborů a odstraní řádky, které nejsou správně napsaná desetinná čísla.

Složky

Složky

  • stejně jako soubory můžeme v programu upravovat složky
  • vytváření, mazání, přejmenování, ...
  • používáme třídu Directory z knihovny System.IO

Metody

  • Directory.CreateDirectory(path)
  • Directory.Exists(path)
  • Directory.Delete(path)
  • Directory.Move(src, dest)
  • Directory.GetFiles(path)
  • Directory.GetDirectories(path)

Jaký je problém tříd File a Directory?

Proto máme způsob jak načítat data postupně.

Stream Reader

Stream Reader

  • způsob čtení dat
  • data můžeme číst postupně a tím nezabírat paměť
  • používáme StreamReader z knihovny System.IO

Ukázka

Ukázka s using

Co se stane se souborem, když ho pomocí Streamu otevřeme?

Metody

  • stream.Read()
  • stream.ReadLine()
  • stream.ReadToEnd()
  • stream.ReadBlock(buffer, index, count)

Stream Writer

Stream Writer

  • velmi podobný Stream Readeru
  • data můžeme zapisovat postupně
  • používáme ze stejných důvodů jako reader

Ukázka s using

Write / WriteLine

Validace

Práce

Vytvořte program, který přečte obsah souborů a odstraní řádky, které nejsou správně napsaná desetinná čísla. Použijte streamy.

Datum a čas

Jak se v počítačí ukládá čas (datum)?

Ukládání

  • pomocí milisekund — např. 63776293428232
  • pomocí stringu — např. ISO8601: 20011221T08:30:52Z
  • další obdoby výše uvedených

Proč vůbec potřebujeme čas ukládat?

Třída DateTime

Třída DateTime

  • slouží k práci a ukládání data a času
  • není potřeba importovat knihovnu

Vytvoření instance

Aktuální datum a čas

Vlastnosti datumu a času

Vlastnosti datumu a času

Modifikace datumu a času

Základní formátování

Pokročilé formátování

https://docs.microsoft.com/cs-cz/dotnet/standard/base-types/custom-date-and-time-format-strings

Jak odečteme 35 dní od data?

Co je datový typ vlastnosti DayOfWeek?

Problémy práce s časem

Program se může spouštět v různém čase na různě nastavených počítačích.


Času počítače se tedy nedá věřit.

Práce s časovými pásmy, různými přesuny a předchodnými roky.


Používané knihovny pracují správně bez nutného zásahu programátora.

Metoda Console.ReadKey()

  • slouží k přečtení jednoho znaku z klavesnice
  • datový typ ConsoleKeyInfo
  • z něho lze zjistit zmáčknutou klávesu a modifikátory (CONTROL, ALT, SHIFT, ...)

Ukázka

Přestupný rok

Práce

Přečtěte od uživatele jedno číslo ze které zjistíte, zda je zadaný rok přestupný.

Počet dní v měsící

Práce

Přečtěte od uživatele dvě čísla: rok a měsíc. Z těchto údajů vypište jedno číslo, které bude reprezentovat počet dní v daném měsíci v daném roce.

Děkuji za pozornost!

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