Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Riešené úlohy k 1.-5. lekciu práce s kolekciami v Kotlin

V predchádzajúcom kvíze, Záverečný test - Kolekcia v Kotlin, sme si overili nadobudnuté skúsenosti z kurzu.

Nasledujúce 3 cvičenia vám pomôžu precvičiť znalosti programovania v Kotline z minulých lekcií. Vo vlastnom záujme sa ich pokúste vyriešiť sami. Pod článkom máte na kontrolu riešenie na stiahnutie. Ale pozor, akonáhle sa naň pozriete bez vyriešenia príkladov, stráca pre vás cvičenie zmysel a nič sa nenaučíte:)

Ak si naozaj nebudete vedieť rady, pozrite sa radšej znova do minulých tutoriálov a pokúste sa na to prísť.

Jednoduchý príklad

Naprogramujte aplikáciu, v ktorej bude niekoľko rovnakých krabíc s položkami rôznych typov. Každá krabica bude obsahovať iba jednu položku, pri vytváraní krabice sa bude musieť definovať, akého typu má vkladaná položka byť. Do krabice pôjde vložiť iba položka implementujúca rozhranie IPolozka s vlastnosťou pre názov položky.

Vytvorte triedy pre tieto 3 položky:

  • Kniha - bude mať iba vlastnosť pre názov z rozhrania IPolozka.
  • Topánky - okrem názvu bude mať aj vlastnosť pre veľkosť.
  • Fľaša – okrem názvu bude mať aj vlastnosť pre objem.
Položku vkladajte do krabice cez konštruktor.

Pre otestovanie aplikácie vytvorte 4 krabice, ktoré budú obsahovať:

  1. Topánky s názvom tenisky s veľkosťou 39
  2. Kniha s názvom Proměna
  3. Fľaša s názvom termoska s objemom 1.5 l
  4. Topánky s názvom zimní boty s veľkosťou 42
V riešení použite genericitu.

Následne vypíšte obsah všetkých krabíc, ako je ukázané na ukážke nižšie. Každú vypisovanú položku získajte z inštancie krabice.

V riešení použite predpripravený kód s dátami, ktorý je k dispozícii v editore nižšie.

Ukážka obrazovky programu:

V první krabici jsou tenisky velikosti 39
Ve druhé krabici je kniha s názvem Proměna
Ve třetí krabici je termoska o objemu 1.5 l
Ve čtvrté krabici jsou zimní boty velikosti 42
fun main(args: Array<String>) {

}
class Kniha(val nazev: String) : IPolozka {

    override fun ziskejNazev(): String {
        return nazev
    }

}
interface IPolozka {

    fun ziskejNazev(): String

}
class Krabice<T>(var polozka: T) {

    fun ziskejPolozku(): T {
        return polozka
    }

}
class Lahev(val nazev: String, val objem: Double) : IPolozka {

    override fun ziskejNazev(): String {
        return nazev
    }

    fun ziskejObjem(): Double {
        return objem
    }

}
class Boty(val nazev: String, val velikost: Int): IPolozka  {

    override fun ziskejNazev(): String {
        return nazev
    }

    fun ziskejVelikost(): Int {
        return velikost
    }
}

Stredne pokročilý príklad

Vytvorte program, ktorý bude predstavovať denník. Záznamy pridá samotný používateľ. Záznamy vkladajte do spojového zoznamu, pretože predpokladáme odstraňovanie náhodných záznamov. Inšpiráciu si môžete vziať z nášho diára, ktorý sme tvorili v kurze OOP.

Denník sa bude ovládať pomocou nasledujúcich príkazov:

  • novy - umožní pridať nový záznam na koniec denníka,
  • zaznamy - zobrazí všetky napísané záznamy,
  • smaz - odstráni záznam,
  • zavri - ukončí program.
Zaistite, aby bol zoznam príkazov zakaždým vytlačený, okrem okamihu, kedy sa užívateľ rozhoduje o odstránení alebo vytvorení záznamu. Informácie o počte záznamov v denníku bude vytlačená ako súčasť menu. Každý záznam bude obsahovať text, ktorý zadá užívateľ a dátum vytvorenia záznamu, ktorý bude vytvorený samotným programom.

Obrazovka programu po spustení aplikácie

----------------   MENU   ----------------
Deník se ovládá následujícími příkazy:
- novy: Vytvoření nového záznamu
- zaznamy: Zobrazí všechny záznamy
- smaz: Odstranění záznamu
- zavri: Zavření deníku a ukončení programu
----------------   MENU   ----------------
------------------------------------------
Počet záznamů: 0
------------------------------------------
Zadejte příkaz:

Nový záznam

Po zadaní príkazu novy vyzve užívateľa na zadanie textu a vytvorenie záznamu potvrdí:

------------------------------------------
Zadejte text k záznamu:
Dnes jsem se naučil pracovat se spojovým seznamem.
Záznam byl vytvořen
------------------------------------------

Obrazovka programu po vytvorení záznamu:

----------------   MENU   ----------------
Deník se ovládá následujícími příkazy:
- novy: Vytvoření nového záznamu
- zaznamy: Zobrazí všechny záznamy
- smaz: Odstranění záznamu
- zavri: Zavření deníku a ukončení programu
----------------   MENU  ----------------
------------------------------------------
Počet záznamů: 1
------------------------------------------
------------------------------------------
Poslední záznam:
Dnes je dobrý den.
Vytvořen: 2022-08-09
------------------------------------------
Zadejte příkaz:

Po vytvorení záznamu sa zobrazí menu s novo vloženým záznamom.

Každý záznam teda bude obsahovať tieto informácie:

  • Dátum - vytvorený programom,
  • Text - vytvorený užívateľom.
V spojovom zozname sa záznam vloží na koniec.

Vytlačenie záznamu

Obrazovka programu po vytvorení záznamu:

----------------   MENU   ----------------
Deník se ovládá následujícími příkazy:
- novy: Vytvoření nového záznamu
- zaznamy: Zobrazí všechny záznamy
- smaz: Odstranění záznamu
- zavri: Zavření deníku a ukončení programu
----------------   MENU   ----------------
------------------------------------------
Počet záznamů: 1
------------------------------------------
------------------------------------------
Poslední záznam:
Dnes jsem se naučil pracovat se spojovém seznamem.
Vytvořen: 2022-08-09
------------------------------------------
Zadejte příkaz:

V prípade viacerých záznamov bude zobrazený vždy posledný vložený záznam.

Zobrazenie všetkých záznamov

Po zadaní príkazu zaznamy program zobrazí všetky záznamy:

------------------------------------------
Počet záznamů: 2
------------------------------------------
------------------------------------------
Záznam [0] vytvořen 2022-08-09:
Dnes jsem se naučil pracovat se spojovým seznamem.

Záznam [1] vytvořen 2022-08-09:
Listy jsou užitečná věc.

------------------------------------------
----------------   MENU   ----------------
Deník se ovládá následujícími příkazy:
- novy: Vytvoření nového záznamu
- zaznamy: Zobrazí všechny záznamy
- smaz: Odstranění záznamu
- zavri: Zavření deníku a ukončení programu
----------------   MENU   ----------------
------------------------------------------
Počet záznamů: 2
------------------------------------------
------------------------------------------
Poslední záznam:
Listy jsou užitečná věc.
Vytvořen: 2022-08-09
------------------------------------------
Zadejte příkaz:

Odstránenie záznamu

Po zadaní príkazu smaz program zobrazí všetky záznamy a vyzve užívateľa, aby zadal číslo záznamu, ktorý chce vymazať. Pri nesprávnom zadaní program vypíše: Zadaná hodnota nezodpovedá indexu žiadneho zo záznámov. a znovu vyzve na zadanie indexu. Po odstránení záznamu sa zobrazí menu s posledným záznamom v liste. Pokiaľ žiadny záznam už v aplikácii nie je, zobrazí sa obrazovka ako po spustení aplikácie (viď. prvá obrazovka pod textom Obrazovka programu po spustení aplikácie).

Obrazovka programu pred odstránením záznamu:

------------------------------------------
Počet záznamů: 1
------------------------------------------
------------------------------------------
Záznam [0] vytvořen 2022-08-09:
Dnes jsem se naučil pracovat se spojovým seznamem.

------------------------------------------
Jaký záznam si přejete vymazat?
- pro vymazání záznamu zadejte index záznamu, například => 1
Záznam k vymazání: 0

Obrazovka programu na odstránenie záznamu:

----------------   MENU   ----------------
Deník se ovládá následujícími příkazy:
- novy: Vytvoření nového záznamu
- zaznamy: Zobrazí všechny záznamy
- smaz: Odstranění záznamu
- zavri: Zavření deníku a ukončení programu
----------------   MENU   ----------------
------------------------------------------
Počet záznamů: 0
------------------------------------------
Zadejte příkaz:

Do riešenia si prekopírujte predpripravený kód s dátami, ktorý je k dispozícii v editore nižšie.

Po zadaní príkazu zavri, denník ešte vypíše: Zatváram denník (bez bodky).

Kód nepíšte priamo do editora, ale nahrajte svoje riešenie.

fun main(args: Array<String>) {

    val denik = Denik()
    denik.Program()
}
import java.time.LocalDate

class Zaznam(val datum: LocalDate, val text: String) {

    fun ziskejText(): String {
        return text
    }

    fun ziksejDatum(): LocalDate {
        return datum
    }
}
import java.time.LocalDate
import java.util.*

class Denik {

    fun Program() {

    }

    fun VytiskniMenu() {
        println("----------------   MENU   ----------------")
        println("Deník se ovládá následujícími příkazy:")
        println("- novy: Vytvoření nového záznamu")
        println("- zaznamy: Zobrazí všechny záznamy")
        println("- smaz: Odstranění záznamu")
        println("- zavri: Zavření deníku a ukončení programu")
        println("----------------   MENU   ----------------")
        VytiskniPocetZaznamu()
    }
}

Pokročilý príklad

Naprogramujte aplikáciu, ktorá simuluje hru piškvorky pre 2 hráčov. Aplikácia vykresľuje hraciu plochu do konzoly a necháva si striedavo od hráčov zadávať súradnice, na ktoré pokladajú svoje kamene. Kontrolu výhry môžete zanedbať, užívateľské vstupy ošetrite.

Na reprezentáciu hracej plochy využite viacrozmerné pole.

Ukážka obrazovky programu:

  123456789
1
2
3  X
4
5     O
6
7
8
9
Na rade je hráč s kolieskami
Zadaj pozíciu X kam chceš ťahať: 10
Zadaj pozíciu Y kam chceš ťahať: 2
Neplatná pozícia, zadaj ju prosím znova.
Zadaj pozíciu X kam chceš ťahať: 3
Zadaj pozíciu Y kam chceš ťahať: 2

Kontrolu správne zadaných súradníc vykonajte až vo chvíli, keď hráč zadá obe súradnice. Je to z toho dôvodu, že okrem zvolenia bodu mimo hracej plochy môže hráč zvoliť aj pole, ktoré je už obsadené, a to môžeme overiť až po zadaní oboch súradníc. V tomto prípade vypíšte " Neplatná pozice, zadej ji prosím znovu. ".

Pokiaľ hráč nezadá číslo, vypíšte " Zadaná hodnota není číslo nebo celé číslo, zadejte prosím celé číslo. " a vyžiadajte od užívateľa nový vstup. Tento test vykonajte pre každú súradnicu zvlášť.

Cvičenie si vyskúšajte vo vašom IDE. Nižšie v bonusovom príklade piškvorky dorobíte a budete mať možnosť celú hru odovzdať.

Bonus: Rozšírenie pokročilého príkladu

Do piškvoriek doimplementujte kontrolu konca hry. Môžu nastať tieto prípady:

  • Výhra - 5 rovnakých symbolov v rade
  • Výhra - 5 rovnakých symbolov v stĺpci
  • Výhra - 5 rovnakých symbolov diagonálne (nezabudnite, že diagonály sú dve:-) )
  • Remíza - Zaplnenie hracej plochy
Diagonálna kontrola je pomerne komplikovaná, ostatné kontroly by vám nemali robiť problémy.

V programe použite nasledujúce texty:

  • Pri výhre: „ Vyhrál hráč s kolečky “, resp. " Vyhrál hráč s křížky "
  • Pri zaplnení hracej plochy: " Remíza. "
Program je možné z dôvodu dynamického počtu vstupov iba odovzdať na ohodnotenie.

Pre úspešné prejdenie testom je nutné dodržať nasledujúce body:

  • Po spustení program vykreslí prázdnu hraciu plochu.
  • Medzi súradnicami riadkov hernej plochy a samotnou hernou plochou je jeden prázdny stĺpec.
  • X je vodorovná súradnica, Y je zvislá súradnica.
  • Symboly kameňov sú "O" a "X" (veľké písmená).
  • Všetky texty musia presne zodpovedať ukážkam a zadaniu (vrátane interpunkcie).
  • Nepoužívať príkaz na vymazanie konzoly (medzi jednotlivými ťahmi).
Ukážka obrazovky programu:
  123456789
1
2  XXXX
3
4
5     O
6      O
7       O
8        O
9         O
Vyhral hráč s kolieskami

fun main(args: Array<String>) {

}

V budúcej lekcii, Použitie triedy Collections v Kotlin - Získavanie a modifikácia , si podrobne rozoberieme pomocnú triedu Collections a jej metódy na získavanie a modifikáciu dát kolekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 9x (13.82 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Kotlin

 

Na absolvovanie tohto cvičenia prosím splň 2 ľubovoľné príklady tým, že ich úspešne odovzdáš na otestovanie.

Predchádzajúci článok
Záverečný test - Kolekcia v Kotlin
Všetky články v sekcii
Kolekcia v Kotlin
Preskočiť článok
(neodporúčame)
Použitie triedy Collections v Kotlin - Získavanie a modifikácia
Článok pre vás napísal Filip Studený
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
.
Aktivity