Programování v C++

Cíle cvičení

  • Cvičení: Tokenizer
  • Demonstrace: Základní syntax tříd
  • Cvičení: 2D Position I.
  • Demonstrace: Operátory
  • Cvičení: 2D Position II.
  • Demonstrace: Pokročilé způsoby tvorby instancí
  • Cvičení: 2D Position III.

Cvičení: Tokenizer

Umístění: N/A

Čas: 6 minutes

Program čte stdin, který rozděluje do tokenů. Tokeny jsou oddělené pomocí jednoho, nebo více bílých znaků. Po přečtení celého vstupu program vypíše tokeny na stdout, vždy jeden token na řádek. Pořadí tokenů na výstupu musí odpovídat pořadí tokenů na vstupu.

Pro ukončení STDIN lze použít Ctrl+Z a následně Enter.

Demonstrace: Základní syntax tříd

  • Vytvoření třídy
  • public, protected, private
  • Konstruktory: default-ctor, copy-ctor
  • Destruktory
  • Definice funkcí
  • Vytvoření instance, NEpoužívat new!
  • inline metody
  • const metody

Cvičení: 2D Position I.

Umístění: N/A

Čas: 15 minutes

Implementujte třídu Position reprezentující pozici ve 2D. Implementace musí být použitelná pro následující úsek kódu:


Position up = Position(0.0, 1.0);
double up_length = up.length();

// up_length: 1
std::cout << "up_length: " << up_length << std::endl;

Position zero;
zero.add(up);
zero.add(Position(0.0, -1.0));

const Position& zero_ref = zero;
std::string zero_as_string = zero_ref.as_string();

// zero [0.0, 0.0] : 0 0
std::cout << "zero " << zero_as_string << " : " << zero.x() << " " << zero.y() << std::endl;
    

Počet desetinných míst na výstupu se může lišit. Hodnoty v komentářích jsou očekávaným výstupem.

Demonstrace: Operátory

Podobné "magickým metodám" v Pythonu. Provázání metod se syntaxí jazyka.

Cvičení: 2D Position II.

Umístění: N/A

Čas: 15 minutes

Rozšiřte implementaci z 2D Position I. aby byla použitelná pro následujíc kód.


Position up(0.0, 1.0);
Position right(1.0, 0.0);

Position direction = up + right;
direction += up;
double x = direction[0];

// direction [1, 2]
std::cout << "direction " << direction << std::endl;

// 'right' is longer
if (up < right) {
    std::cout << "'up' is longer" << std::endl;
} else {
    std::cout << "'right' is longer" << std::endl;
}
    

Demonstrace: Pokročilé způsoby tvorby instancí

Cvičení: 2D Position III.

Umístění: ./labs/03-position/position.hpp, ./labs/03-position/position.cpp

Bodovaná úloha: ano

Čas: 10 minutes

Rozšiřte implementaci z 2D Position II. aby byla použitelná pro následujíc kód.


Position up{ 1.0, 0.0 };
up.add({ 0.0, 0.0 });

// Container for positions.
Positions position;
position.add({ 0.0, 0.0 });

// Initialization with multiple positions.
Positions list { {0.0, 0.0}, {1.0, 0.0} };