Programování v C++

Cíle cvičení

  • Organizace
  • Demonstrace: Visual Studio
  • Cvičení: Hello world
  • Demonstrace: Argumenty z příkazové řádky
  • Cvičení: Suma
  • Cvičení: Subsets

Organizace

Předpokládá se aktivní účast na cvičení.

Pro vše co vytvoříte na cvičení, nebo následně jinde, je třeba používat GitLab!

Aktivní účast na cvičení vyžaduje znalost předchozí látky!

V případě nečekaných událostí neprodleně kontaktujte cvičícího!

Zaměření cvičení

Znalost jazyka (efektivita, pokročilé konstrukce, ...), knihovny, ladění, profesionalita.

GitLab

Průběžná práce na cvičeních a na zápočtovém programu je v MFF GitLabu. Všechny dokončené a odladěné příklady a úkoly ze cvičení musí být v GitLabu, bez ohledu na absence, nebo průběh cvičení!

Do gitu patří veškeré zdrojové, konfigurační, projektové a datové soubory. Do gitu rozhodně NEpatří vygenerované nebo dočasné soubory. Řešením je využít vhodný .gitignore. Inspiraci můžeme vzít třeba z Visual Studio.

Go GitLabu je třeba se přihlásit MFF účtem. Následně by měl mít každý repozitář "teaching/nprg041/{akademicky-rok}/skoda/{your-name}". Tvorba a udržování účtů není automatická!

Využití SSH klíče už popsal někdo jiný. Alternativní řešení na dalším slajdu.

Vyzkoušejte si klienta a práci s Git: login, push, pull, commit. Je to zcela základní věc, kterou budete potřebovat. Na internetu je spousta návodů, od Atlassian, Education, FreeCodeCamp.

Git bez SSH klíče

git clone https://...
# Set information only for your repository.
git config user.email "petr.skoda@matfyz.cuni.cz"
git config user.name "Petr Škoda"
  

NEpoužívejte "credentials manager", na Windows je sdílený účet. Tedy volba <no helper>

Možná budete chtít po sobě to repository smazat. Jak nastavení, tak smazání může provádět skript.

Git

Základní příkazy pro tonoucí, pokud je potřebujete, přečtěte si některý z dříve uvedených odkazů.

# Clone repository to local file system.
git clone ...

# Pull updates from remote repository.
git pull

# Add files to staging.
git add .

# List status and changes.
git status

# Commit changes.
git commit -m "Message"

# Push changes to remote.
git push
  

ReCodex

Připojte se ke skupině!

Vypracování domácích úkolů zadaných skrze ReCodex. Úkoly jsou volitelné, ale silně doporučené.

Doporučuji maximální osobní zapojení bez dalších zdrojů.

Odměnou je zpětná vazba a příprava na zápočet a zkoušku.

Zápočtový program

Více na oficiální stránce. Zde pouze vybrané informace. Rozhodné dny budou uvedeny na stránce cvičení.

  • Výběr a schválení tématu do data uvedeného na stránkách cvičení.
  • Průběžné používání Gitlabu po dobu celého vývoje zápočtového programu.
    Nahrání výsledných zdrojových kódů před odevzdáním je nepřípustné.
  • Technické demo do data uvedeného na stránkách cvičení.
  • První pokus o odevzdání kompletně hotového a odladěného zápočtového programu nejpozději do data uvedeného na stránkách cvičení. Po odevzdání může být program vrácen k opravám či doplnění. Finální odevzdání musí být do data uvedeného na stránkách cvičení.

Zápočtový test

Jde o rozšíření posledního domácího úkolu z ReCodexu. Zápočtový test proběhne na posledním cvičení, s možným opravným. Bez jeho složení není možné získat zápočet!

Jedná se o samostatnou práci!

Test proběhne ve školním labu, na školních počítačích.

Více na oficiální stránce.

Mattermost

Link na nástěnce předmětu v SIS. Každé cvičení má vlastní kanál.

Co už 🤞umíte


Počítačové systémy

C a trochu C++, dekompozice, syntaxe jazyka, třídy, ukazatele a správa paměti ...


Programování 1 & 2

Algoritmizace, ovládání Visual Studia

Demonstrace: Visual Studio

Visual Studio (Desktop development with C++)
vs
Visual Studio Code + Toolchain
vs
Text Editor + Toolchain


  • Jak to pustit (a vypnout)
  • Základy, vytvoření C++ projektu (console application).
  • Vytvoření souborů (.cpp/.hpp).
  • Debug mode, krokování, ...
  • Nastavení argumentů, verze C++.
  • Čtení chyb a "Output" window.

Cvičení: Hello world

Umístění: N/A

Čas: 5 minut

Vypište "Hello world" na standardní výstup.

Demonstrace: Argumenty z příkazové řádky

  • Nastavení argumentů ve Visual Studio.
  • Načtení argumentů, definice main.
  • Práce s argumenty.
  • Předávání referencí, použití const reference.
  • Základní dekompozice.

Cvičení: Suma

Umístění: ./labs/01-cli-sum/main.cpp

Čas: 15 minut

Načtěte argumenty z příkazové řádky a vypište jejich součet.

V základní verzi je možné argumenty načítat jako čísla.

Jakmile budete základní verzi mít, přidejte podporu možnosti zadat rozsah pomocí argumentu: --range {from} {to}.

Provedení

Na toto je třeba myslet při psaní libovolného programu.

  • Vhodná dekompozice
  • Pojmenování
  • Code & style
  • Efektivní předání parametrů
  • NEpoužívat globální stav

Později se k některým oblastem ještě vrátíme.

Příklady vstupů a výstupů

Základní verze:

> command-line-sum.exe 2 4 12 8 3 1
30
    

Využití --range:

> command-line-sum.exe 2 --range 2 4 3 --range 0 2
17
    

Mohlo by se hodit

std::stoi

Čísla na vstupu budou nezáporná a vejdou se do datového typu int.

Prozatím je možné ignorovat exceptions.

Cvičení: Subsets

Umístění: ./labs/01-subsets/

Čas: 15 minut

Vstupem programu jsou argumenty z příkazové řádky, tokeny oddělené mezerou. Na vstupu se žádný token neopakuje. Na výstup program vypíše všechny podmnožiny tokenů bez opakování a se zachováním pořadí tokenů. Na pořadí výstupu nezáleží.

Příklady vstupů a výstupů

> subsets.exe 1 2 b 4
4
b
b 4
2
2 4
2 b
2 b 4
1
1 4
1 b
1 b 4
1 2
1 2 4
1 2 b
1 2 b 4
    

Mohlo by se hodit

std::span

Shrnutí

  • Organizace
  • Demonstrace: Visual Studio
  • Cvičení: Hello world
  • Demonstrace: Argumenty z příkazové řádky
  • Cvičení: Suma
  • Cvičení: Subsets