Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

Cvičení k 21. lekci OOP v C++

C a C++ C++ Objektově orientované programování Cvičení k 21. lekci OOP v C++

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti objektově orientovaného programování v C++ z minulých lekcí. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulých tutoriálů a pokuste se na to přijít.

Jednoduchý příklad

Vaším úkolem bude napsat funkci, ve které uživatel opakovaně zadává slova. Ovšem ve chvíli, kdy uživatel vypíše "end" nebo "konec", funkce se ukončí výjimkou. Výjimka bude obsahovat poslední zadané slovo (tedy to ukončovací) a také všechna zadaná slova. Musíte si tedy pro výjimku vytvořit vlastní třídu.

Ukázka obrazovky programu:

Konzolová aplikace
Zadejte slovo: Kdo
Zadejte slovo: by
Zadejte slovo: chtel
Zadejte slovo: pouzivat
Zadejte slovo: vyjimky
Zadejte slovo: end
Kdo by chtel pouzivat vyjimky
Ukonceno slovem: end

Středně pokročilý příklad

Vytvořte třídu Fronta, která bude fungovat jako FIFO struktura. To znamená, že první hodnotu, kterou do fronty vložíte, vytáhnete jako první. Jako by prvky v kolekci opravdu stály ve frontě, ty nové se přidávaly na konec fronty a odebíralo se z jejího začátku. Je to opačná struktura k zásobníku, který jsme již v cvičeních implementovali.

Situaci přiblíží následující obrázek:

Ukázka fronty

Frontu samozřejmě vytvořte jako šablonu. Opět můžete použít již implementovanou třídu Pole uvnitř fronty.

Speciální případ nastane, pokud budeme chtít z fronty získat další prvek, ale fronta je již prázdná. V takovém případě fronta vyvolá výjimku.

Kód naplnění a výpisu vaší fronty může vypadat následovně:

int main()
{
    Fronta<int> f;

    for (int i = 0; i < 10; i++)
        f.vloz(i * 3);

    try
    {
        while (true)
            cout << f.odeber() << endl;
    }
    catch (exception ex)
    {
        cout << ex.what() << endl;
    }


    cin.get();
    return 0;
}

Ukázka obrazovky programu:

Konzolová aplikace
0
3
6
9
12
15
18
21
24
27
Fronta je prazdna

Pokročilý příklad

V pokročilém příkladu naimplementujte jednoduchou maticovou kalkulačku. Matice je několik čísel, uspořádaných do obdélníkového tvaru.

Ukázka matice

Sčítání a odčítání matic funguje po jednotlivých prvcích (tj. prvky na stejném indexu se sečtou, resp. odečtou). Násobení matic je o něco komplikovanější a namísto dlouhého vysvětlování se doporučuji podívat na wikipedii.

Pro všechny tyto operace musí být matice ve správném tvaru. To znamená, že nejde sečíst matici 2x2 s maticí 3x3 a podobně. Obdobné podmínky existují i pro násobení. Váš program takové situace detekuje a v případě nevyhovujících matic vyvolá výjimku.

Vytvořte matice:

a = 1 1
    1 0

b = 1 2
    3 4
    5 6

c = 1 2 3
    4 5 6

A následně vypište výsledky těchto operací:

b * c
a + a
a * a * a

Kód pro vytvoření matic a operace by mohl vypadat takto:

double aPole[4] = { 1,1,1,0 };
Matice a(aPole, 2, 2);

double bPole[6] = { 1,2,3,4,5,6 };
double cPole[6] = { 1,2,3,4,5,6 };
Matice b(bPole, 2, 3);
Matice c(cPole, 3, 2);

cout << b * c << endl;
cout << a + a << endl;
cout << a * a * a << endl;

try
{
    cout << a + b << endl;
}
catch (exception e)
{
    cout << e.what() << endl;
}

A ukázka obrazovky programu:

Konzolová aplikace
22 28
49 64

2 2
2 0

3 2
2 1

Spatna velikost matic

 

Stáhnout

Staženo 4x (13.83 kB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

 

Článek pro vás napsal patrik.valkovic
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Miniatura
Předchozí článek
Výjimky v C++
Miniatura
Následující článek
Pokročilá dědičnost v C++
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!