Základy algoritmizace II

Úlohy

  1. Vytvořte program, který bude zkoušet z vyjmenovaných slov (nebo cizích slovíček).
    • Data budou uložena jako tabulka se dvěma sloupci (zadání a správná odpověď).
    • Počet zkoušených otázek půjde zadat.
    • Zajistěte, aby byla každá otázka položena maximálně jednou.
    • Počítejte počet správných a počet špatných odpovědí.
    • Špatné odpovědi ukládejte do seznamu problémových otázek, které se na konci vypíšou.
  2. Vytvořte hru, kdy si počítač myslí nějaké celé číslo mezi 1 a 100 a hráč ho hádá. Vždy napíše svůj tip a počítač mu řekne, zda je myšlené číslo menší, větší, nebo zda ho uhádl.
    • Vylepšete ovládání. Pokud uživatel kdykoliv zadá 0, program se okamžitě ukončí.
    • Přidejte počítadlo zadaných pokusů. Tato hodnota se při uhádnutí čísla vypíše.
    • Ukládejte do souboru “rekord”. Pokud ho hráč překoná, požádejte ho o zadání jména a soubor s rekordem aktualizujte.
    • Vylepšete předchozí nápad tak, aby se ukládala tabulka např. 10 nejlepších skóre.
  3. Vytvořte program, který bude uživatele zkoušet z malé násobilky. Počet úloh stanovte předem (např. 10), počítejte počet správných a špatných odpovědí, problémové příklady postupně ukládejte a na závěr hromadně vypište.
    • Obdobně vytvořte program, který bude zkoušet z celočíselného dělení čísel.

Ukázka možného řešení úlohy zkoušení vyjmenovaných slov

Soubor s otázkami a odpověďmi byl vyroben v Poznámkovém bloku a uložen s kódováním UTF-8, které ve skutečnosti obsahuje ještě na začátku 3 neviditelné znaky (tzv. BOM), které říkají, že se jedná právě o formát UTF-8. Tomuto formátu se celkově říká UTF-8-BOM.

Jednotlivé sloupce jsou odděleny tabulátorem.

Příklad souboru ke stažení: vyjmenovana_slova.txt

data <- read.table("vyjmenovana_slova.txt",
                   header = TRUE, sep = "\t",
                   fileEncoding = "UTF-8-BOM",
                   stringsAsFactors = FALSE)

nahodnePoradi <- sample(1: nrow(data), nrow(data))
index <- 1

celkovyPocetPrikladu <- 3
pocet <- 0
spravne <- 0
spatne <- 0

seznamSpatnychOdpovedi <- character(0)

repeat {
    radek <- nahodnePoradi[index]
    index <- index + 1
    if (index > nrow(data)) {
        index <- 1
        nahodnePoradi <- sample(1: nrow(data), nrow(data))
    }
    
    cat("Doplňte [y, ý, i, í]:", data$otázka[radek], "\n")
    
    odpoved <- readline("Odpověď: ")
    
    if (odpoved == data$odpověď[radek]) {
        cat("Správně.\n")
        spravne <- spravne + 1
    } else {
        cat("Špatně.\n")
        spatne <- spatne + 1
        seznamSpatnychOdpovedi <- c(seznamSpatnychOdpovedi, data$otázka[radek])
    }
    
    pocet <- pocet + 1
    if (pocet == celkovyPocetPrikladu) {
        cat("Gratuluji.\n")
        cat("Špatných odpovědí:", spatne, "\n")
        cat(seznamSpatnychOdpovedi)
        break
    }
}

© 2. 12. 2015 Tomáš Bořil, borilt@gmail.com