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í: Tokenizace

Cvičení: Tokenizer

Umístění: N/A

Čas: 10 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.000000, 0.000000] : 0 0
std::cout << "zero:" << zero_as_string << " : " << zero.x() << " " << zero.y() << std::endl;
    

Počet desetiný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];
std::cout << "direction" << direction << std::endl;

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/

Č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} };
    

Cvičení: Tokenizace

Umístění: ./labs/03-csv-parser/main.cpp

Čas: ?

Napište parser pro CSV formát. Vytvořte program, který parser použije pro načtení standartního vstupu. Načtené CSV není třeba dále zpracovávat.

Nezapomínejte na uvozovky a escapování!

Změřte si čistý čas strávený úlohou a zapište do ho zdrojového souboru ve formátu:


// time: 30
  

Hodnota je počtem minut, který jste úlohou strávili. Umístění komentáře v souboru nehraje roli, ale ideálně někde viditelně.