Předvánoční Black Friday Předvánoční Black Friday
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

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

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

ONEbit hosting Unicorn College 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 programování v C++ z minulé lekce. 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ého tutoriálu a pokuste se na to přijít.

Jednoduchý příklad

Naprogramujte aplikaci pro převod mezi stupni a radiány. Jelikož vše, co jste se učili ve škole, bylo ve stupních a vše, co se budete učit v programování, bude v radiánech, bude se vám znalost převodu hodit i do budoucna. Pokud vzorec neznáte, vyhledejte si jej :) V aplikaci pro převody použijte statickou třídu.

Ukázka obrazovky programu:

Konzolová aplikace
6.28 radianu je 359.817 stupnu
90 stupnu je 1.5708 radianu

#include <iostream>
#include "Prevodnik.h"
using namespace std;

int main()
{
}
#ifndef __PREVODNIK_H_
#define __PREVODNIK_H_
class Prevodnik
{
};
#endif
#include "Prevodnik.h"
#include <cstdlib>

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

Naprogramujte aplikaci, která vyrábí cukroví. Každé cukroví má nějakou barvu, tvar a váhu. Existuje např. cukroví banánové, jahodové, čokoládové a další. Jednotlivé druhy cukroví se odlišují pouze hodnotami v atributech. Jelikož by bylo zbytečné tvořit pro každý druh cukroví třídu a zároveň je pracné zadávat konkrétní atributy znovu a znovu tam, kde potřebujeme konkrétní instanci cukroví, použijeme zjednodušenou podobu návrhového vzoru Factory.

Factory (továrna) se používá zejména v případě, kdy potřebujete velké množství různě nastavených instancí. Jedná se o třídu se statickými metodami, které vytvoří instanci, nastaví ji určité parametry a takto nastavenou instanci vrátí. Vytvořte takovouto továrnu a implementujte v ní metody pro výrobu banánového, jahodového a čokoládového cukroví. Následně v aplikaci touto továrnou vytvořte několik kusů cukroví od každého druhu a ty vypište.

Ukázka obrazovky programu:

Konzolová aplikace
Cukrovi barvy zlute tvaru kulate o hmotnosti 20g.
Cukrovi barvy zlute tvaru kulate o hmotnosti 20g.
Cukrovi barvy zlute tvaru kulate o hmotnosti 20g.
Cukrovi barvy cervene tvaru kulate o hmotnosti 10g.
Cukrovi barvy cervene tvaru kulate o hmotnosti 10g.
Cukrovi barvy cervene tvaru kulate o hmotnosti 10g.
Cukrovi barvy hnede tvaru hranate o hmotnosti 40g.
Cukrovi barvy hnede tvaru hranate o hmotnosti 40g.
Cukrovi barvy hnede tvaru hranate o hmotnosti 40g.

#include <iostream>
#include "Tovarna.h"
using namespace std;
int main()
{
}
#ifndef __CUKROVI_H_
#define __CUKROVI_H_
#include <string>
using namespace std;

class Cukrovi
{

};
#endif
#include "Cukrovi.h"
#ifndef __TOVARNA_H_
#define __TOVARNA_H_
#include "Cukrovi.h"
class Tovarna
{
};

#endif
#include "Tovarna.h"

Pokročilý příklad

Vytvořte hrací kostku, která obsahuje metodu hod(). Je to ta samá kostka, jakou jsme tvořili na začátku seriálu. hod() vrací náhodné číslo od 1 do 6. Vytvořte 2 instance těchto kostek a nechte je v cyklu 5x hodit.

Konzolová aplikace
Hod a: 4
Hod a: 4
Hod a: 1
Hod a: 5
Hod a: 2
Hod b: 4
Hod b: 4
Hod b: 1
Hod b: 5
Hod b: 2

#include <iostream>
#include "Kostka.h"
using namespace std;

int main()
{
}
#ifndef __KOSTKA_H_
#define __KOSTKA_H_
class Kostka
{
};
#endif
#include "Kostka.h"
#include <cstdlib>
#include <ctime>

Co to, na obou kostkách padají stejná čísla?! Jak je to možné?

Třída Kostka v konstruktoru nastavuje náhodný generátor. Jakmile se vytvoří kostka, inicializuje se i generátor náhodných čísel. Obě kostky vytváříme téměř ve stejný čas, takže i generátor je inicializován dvakrát v jednu chvíli. Toto je onen kámen úrazu. Jelikož vygenerovat opravdové náhodné číslo je v domácích podmínkách jen těžko realizovatelné, používají se tzv. čísla pseudonáhodná. Funkce rand() používá tzv. seed (semeno), tím je čas, ve který se instance kostky vytvořila. Od tohoto seedu se potom odvíjejí čísla, která padají. V našem případě mají obě instance stejný seed, s čímž v C++ nelze nic moc dělat.

Pokuste se problém vyřešit s použitím statiky a své řešení odůvodněte. Jako bonus se zamyslete i nad tím, jak by to šlo bez ní.

Hod a: 2
Hod a: 3
Hod a: 6
Hod a: 6
Hod a: 1
Hod b: 6
Hod b: 5
Hod b: 1
Hod b: 2
Hod b: 3

 

Stáhnout

Staženo 4x (18.52 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
Statika v C++
Miniatura
Následující článek
Přetěžování operátorů v C++
Aktivity (6)

 

 

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í!