1. seminář - Úvod do Jazyka Swift

TEACHINGTMAI

Materiály k semináři

Úkoly

Vyřešené úkoly budou zkontrolovány na semináří.

Vytvoř datový model a jednoduché operace nad „knihovnou filmů“.

Požadavky

  1. Vytvoř enum Genre (např. action, drama, comedy, sciFi, horror).
  2. Vytvoř struct Movie s poli:
    • id: UUID
    • title: String
    • year: Int
    • rating: Double (0.0–10.0)
    • genre: Genre
  3. Vytvoř pole var movies: [Movie] a naplň ho alespoň 8 filmy.
  4. Napiš funkce (bez map/filter, klidně for-in):
    • func movies(in genre: Genre, from movies: [Movie]) -> [Movie]
    • func topRatedMovie(from movies: [Movie]) -> Movie?
    • func averageRating(for genre: Genre, in movies: [Movie]) -> Double?
    • func moviesReleased(from year: Int, to year: Int, in movies: [Movie]) -> [Movie]

Bonus

  • Funkce func groupByGenre(_ movies: [Movie]) -> [Genre: [Movie]] (použij Dictionary).
  • Ošetři neplatná data (rating mimo rozsah, rok < 1888, apod.).

Poznámka: Nejsou povoleny funkce map, filter, reduce. Použij for-in a podmínky.

Naprogramuj jednoduchý systém skladu se skladovými položkami a operacemi příjmu/výdeje.

Požadavky

  1. Vytvoř enum StockOperationType:
    • inbound (příjem)
    • outbound (výdej)
  2. Vytvoř struct StockItem:
    • sku: String (unikátní kód, např. „A123“)
    • name: String
    • quantity: Int
  3. Vytvoř struct StockOperation:
    • type: StockOperationType
    • sku: String
    • amount: Int
    • date: Date
  4. Vytvoř class Warehouse s vlastnostmi:
    • var items: [StockItem]
    • var history: [StockOperation]
    a metodami:
    • func addNewItem(_ item: StockItem) (nesmí vložit duplicitní sku)
    • func apply(_ operation: StockOperation) -> Bool (vrací true, pokud proběhla; false pokud nešla provést)
  5. Pravidla pro apply:
    • amount musí být > 0
    • inbound:
      • když položka existuje, zvýší quantity
      • když neexistuje, vytvoří novou položku (quantity = amount)
    • outbound:
      • položka musí existovat
      • nesmí jít pod nulu (když by šla, operace se neprovede)
  6. Napiš funkce:
    • func item(with sku: String) -> StockItem?
    • func totalQuantity() -> Int
    • func lowStockItems(threshold: Int) -> [StockItem] (např. <= 3)

Bonus

  • func mostMovedItem() -> StockItem? (podle součtu pohybů v historii)
  • func printReport() (hezký výpis do konzole)

Poznámka: Nejsou povoleny funkce map, filter, reduce. Použij for-in a podmínky.