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

Cvičení k 10. až 12. lekci OOP v C++

C a C++ C++ Objektově orientované programování Cvičení k 10. až 12. 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 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

Běžně pro odřádkování používáme std::endl konstantu. Vaším úkolem bude vytvořit podobnou konstantu, ale pro výpis tabulátoru. Tato konstanta je samozřejmě již ve standardní knihovně implementována, nicméně my si zkusíme, jak by vypadala implementace od píky.

Vytvořte třídu Tab, která bude mít veřejný statický konstantní atribut tab. Při použití tohoto atributu ve výpisu se vypíše sekvence pro tabulátor, tj. "\t".

Ukázka obrazovky programu:

Konzolová aplikace
Zacatek         a konec textu

Ukázka použití této konstanty při výpisu:

cout << "Zacatek" << Tab::tab << Tab::tab << "a konec textu" << endl;

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

Vytvořte třídu Komplexni, která reprezentuje komplexní číslo. To je číslo, které má dvě složky, skládá se tedy z dvou čísel:

  • komplexní složka
  • imaginární složka

Třída bude mít atributy určující reálnou a imaginární složku čísla. Pro reprezentaci složek čísla použijte datový typ double. Třídě implementujte základní operátory jako +, -, *, /, =. Výsledkem operace s komplexními čísly je opět komplexní číslo.

Početní operace s komplexními čísly

Pojďme si definovat, jak početní operace s komplexními čísly fungují:

Sčítání

Sčítání a odčítání komplexních čísel je triviální, stačí sečíst, resp. odečíst jejich reálné a imaginární složky:

  • Reálná složka výsledného komplexního čísla je součet reálných složek obou čísel. (r = a.r + b.r)
  • Imaginární složka výsledného komplexního čísla je součet imaginárních složek obou čísel. (i = a.i + b.i)

Odčítání

  • Reálná složka výsledného komplexního čísla je rozdíl reálných složek obou čísel. (r = a.r - b.r)
  • Imaginární složka výsledného komplexního čísla je rozdíl imaginárních složek obou čísel. (i = a.i - b.i)

Násobení

Násobení je o něco složitější, uveďme si pouze vzorečky:

  • Reálná složka výsledného komplexního čísla (r = a.r * b.r - a.i * b.i)
  • Imaginární složka výsledného komplexního čísla (i = a.r * b.i + a.i * b.r).

Dělení

A dělení je ještě o chlup složitější:

  • Reálná složka výsledného komplexního čísla r = (a.r * b.r + a.i * b.i) / (b.r * b.r + b.i * b.i)
  • Imaginární složka výsledného komplexního čísla r = (a.i * b.r - a.r * b.i) / (b.r * b.r + b.i * b.i)

V případě, že jsou obě složky dělení nulové, vraťte komplexní číslo se složkami [0;0].

Třídě dále implementujte operátor << pro výpis, komplexní číslo se vypíše jako r+ii. Dodejte gettery a settery pro reálnou a imaginární část a příklad demonstrujte na uvedených testovacích datech.

Ukázka obrazovky programu:

Konzolová aplikace
1+1i + -1+3i = 0+4i
1+1i - -1+3i = 2-2i
1+1i * -1+3i = -4+2i
1+1i / -1+3i = 0+0i

Kdo se ještě z komplexním číslem nesetkal, může se pro ještě více informací inspirovat na wiki.

Pokročilý příklad

V pokročilém příkladu vytvořte třídu Pole. Tato třída bude uchovávat pole celých čísel a jeho velikost. Bude se také umět inicializovat z obyčejného pole, předaného konstruktorem spolu s jeho velikostí. Instance třídy rovněž půjde vypsat do konzole.

Třídě implementujte operátor pro sčítání, který spojí dvě takováto pole do jednoho nového.

Dále implementujte metodu pridej(), která přidá nový prvek uvedený v parametru na konec pole. Pokud jste správně implementovali předchozí operaci, toto rozšíření je snadné (použijete již existující funkcionalitu).

Nezapomeňte správně implementovat práci s pamětí (tj. správnou implementaci hluboké kopie).

Data demonstrujte na polích čísel od 1 do 10 ({ 0,1,2,3,4,5,6,7,8,9 }) a prvních 7 čísel Fibonacciho posloupnosti ({ 0,1,1,2,3,5,8 }).

Nejprve vypište instance svých polí. Poté první pole zkopírujte a přidejte do něj číslo 11. Původní pole a jeho kopii vypište. Nakonec spojte původní první pole s druhým polem a výsledek rovněž vypište.

Ukázka obrazovky programu:

Konzolová aplikace
[0,1,2,3,4,5,6,7,8,9]
[0,1,1,2,3,5,8]
[0,1,2,3,4,5,6,7,8,9]
[0,1,2,3,4,5,6,7,8,9,11]
[0,1,2,3,4,5,6,7,8,9,0,1,1,2,3,5,8]

 

Stáhnout

Staženo 5x (14.53 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
Přiřazovací operátor
Miniatura
Následující článek
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í!