Warning
This page is located in archive.

Ukázková zkouška 1

Ze zkoušky je možné získat maximálně 40 bodů, 20 bodů z obsáhlejších otázek na této stránce a 20 bodů z krátkých otázek.

  1. Napište deklaraci šablonové třídy queue (fronta) pro libovolný datový typ (parametr šablony). Třída queue bude poskytovat následující operace: [3b]
    • front() – vrátí první prvek
    • push(element) – přidá do fronty další prvek
    • pop() – zahodí první prvek
    • size() – vrátí velikost fronty (množství prvků ve frontě)
    • empty() – vrátí 'true' pokud je fronta prázdná, jinak false

      Nezapomeňte na to, že vaše třída může potřebovat konstruktory.
      řešení
  2. Co vypíše následující program na standardní výstup? [1B]
    class B {};
    class D : public B {};
     
    void f(B& throwable) { throw throwable; }
     
    int main() {
        D status;
        try {
            f(status);
        }
        catch (D& e) {
            std::cout << "Chytil jsem D!\n";
        }
        catch (...) {
            std::cout << "To je divny...\n";
        }
    }
    řešení
  3. Které z následujících deklarací pole, (ia) až (id), jsou špatně a proč? Předpokládejte, že funkce get_size() vrací int. [2b]
    const unsigned buf_size = 1024;
    • int ia[buf_size + 3];
    • int ib[get_size()];
    • int ic[9 * 6 - 55];
    • char id[4] = “cpp”;
      řešení
  4. Co vypíše následující program na standardní výstup? [3b]
    struct A {
        A() { std::cout << "A "; }
        ~A() { std::cout << "~A "; }
        void say() { std::cout << "A says "; }
        void say() const { std::cout << "A says const "; }
    };
     
    struct B : A {
        B() { std::cout << "B "; }
        ~B() { std::cout << "~B "; }
        void say() { std::cout << "B says "; }
        void say() const { std::cout << "B says const "; }
    };
     
    int main() {
        A a;
        const B b;
        a.say();
        b.say();
        const A& aref = b;
        aref.say();
    }
    řešení
  5. Jaká chyba je v této funkci? Jak ji můžete opravit? [3b]
    bool transfer_item(account& account1, account& account2, const item& item) {
        // Nejdriv zamkneme oba ucty
        std::lock_guard<std::mutex> lg1(account1.mutex);
        std::lock_guard<std::mutex> lg2(account2.mutex);
     
        // A pak se pokusime prevest item z jednoho do druheho.
        // Ucet uz ho nemusi vlastnit, takze je potreba to zkontrolovat
        // znovu
        if (account1.contains(item)) {
            account1.remove(item);
            account2.add(item);
            return true;
        }
     
        return false;
    }
    řešení
  6. Naimplementujte funkci, která seřadí std::vector<osoba> dle příjmení, jména a věku osoby. [3b]
    #include <vector>
    #include <string>
    #include <algorithm>
     
    struct osoba {
        std::string prijmeni, jmeno;
        int vek;
    };
    Nezapomeňte, že std::sort není stabilní.
    řešení
  7. Naimplementujte funkci, která referencí přebírá dva objekty typu std::vector. Parametr in je konstantní a s prvky typu double, a parametr out je s prvky typu int. Funkce má za úkol vyprázdnit out a převést do něj všechny prvky z in. Pokud prvek z vektoru in není celočíselný, a došlo by ke ztrátě dat, funkce vyhodí výjimku. Implementujte funkci tak, aby poskytla silnou záruku. [5b]
    řešení
courses/a7b36pjc/testy/ukazkova_zkouska_1.txt · Last modified: 2017/01/09 10:44 by horenmar