1. Úvodní cvičení

Seznámení s programovacím prostředím

Při programování v rámci předmětu lze používat libovolný editor, který umožňuje zvýrazňování syntaxe (gedit, gVim, sublime text, atd), a překládat z příkazové řádky v terminálu. Budeme používat kompilátor g++ nebo některou z jeho variant.

Pro zvýšení komfortu při programování využijeme volně dostupný a multiplatformní produkt Microsoftu Visual Studio Code. Tento program není IDE (Integrated Development Environment), ale pouze editor, do kterého se dá formou pluginů nainstalovat podpora nejrůznějších jazyků. Podporou se má v případě VS Code na mysli zvýrazňování syntaxe, doplňování klíčových slov a nápověda. Kompilátor je třeba mít nainstalovaný v operačním systému a nastavit k němu ve VS Code cestu.

Pro nastavení VS Code využijte návod pro Windows nebo pro Linux.

Verzovací systém GIT

Zdrojové kódy příkladů na cvičení jsou uloženy v GIT repozitáři předmětu. V repozitáři jsou tři různé větve (branch):

  • main - obecné informace
  • templates - šablony příkladů a projektů řešených na cvičení
  • solutions - řešení příkladů

Úkoly

V následujících bodech se řiďte návodem Instalace a nastavení GITu.

  1. Pokud nepracujete na školním počítači, nainstalujte si GIT klienta.
  2. Vytvořte SSH klíč.
  3. Přihlašte se do Gitlabu a vložte veřejný klíč.
  4. Nakonfigurujte globální vlastnosti vašeho GIT klienta

Naklonování repozitáře se vzorovými příklady:

$ git@gitlab.fel.cvut.cz:b2b99ppc/tutorials.git
$ cd tutorials

Lokální kopie repozitáře by měla být přepnuta do větve templates. Pokud tomu tak není, je třeba se do této větve přepnout:

$ git branch
* main
  solutions
  templates

$ git checkout templates
Switched to branch 'templates'

Vyzkoušejte si přepnutí mezi jednotlivými větvemi repozitáře.

Pokud se vám nepodaří zprovoznit přístup k fakultnímu GitLabu (např. zatím nemáte práva pro přístup do repozitáře), můžete si alternativně stáhnout archiv se zdrojovými soubory: ppc-tut01.zip.

Úvod do programování v C++

Interakce s uživatelem je v C++ realizována pomocí tzv. proudů (stream, Basic Input/Output). Standardní výstup je reprezentován objektem std::cout, standardní vstup objektem std::cin. Zápis do standarního výstupu je proveden pomocí proudového operátoru «, ke čtení ze standadního vstupu slouží operátor ». Později si ukážeme, že proudové operátory lze využít i pro práci s textovými řetězci nebo se soubory.

Kromě standardního vstupu a výstupu existují ještě dva další proudy: std::cerr a std::clog. Oba zapisují na standardní chybový výstup, za normálních okolností tedy píší stejně jako std::cout standardní výstup, ale je možné je přesměrovat. std::clog je bufferovaný, takže není zcela jisté, kdy dojde k vypsání (ovšem dojde k němu nejpozději při ukončení programu).

Standardní výstup

#include <iostream>
 
int main() 
{
    std::cout << "Ahoj PPC\n";
}

Úkoly

Argumentem výstupního proudu samozřejmě nemusí být jen textový literál. Vyzkoušejte:

  1. vypsat hodnotu proměnné libovolného datového typu
  2. vypsat výsledek aritmetické operace (např. součet dvou proměnných stejného datového typu)
  3. zřetězení operátoru výstupu

Formátování

Výstupní proudy mají v C++ bohaté možnosti formátování. Pro naše potřeby si vystačíme s nastavením přesnosti pomocí std::seprecision a nastavením šířky výpisu std::setw.

#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision
 
int main () {
  double f = 3.14159;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n';
  std::cout << std::setprecision(9) << f << '\n';
  return 0;
}

Standardní vstup

Práce se standardním vstupem je velmi podobná. Pokud je to možné, je provedena implicitně konverze datového typu.

#include <iostream>
 
int main()
{
    int num;
 
    std::cout << "Napis cele cislo\n";
    std::cin >> num;
    std::cout << "Zadal jsi " << num << '\n';
}

Vstupy je možné podobně jako u standardního výstupu řetězit.

int a, b;
std::cin >> a >> b;

je analogická zápisu

int a, b;
std::cin >> a;
std::cin >> b;

Co se stane, když na vstup v příkladu zadáte textový řetězec?

Ošetření vstupu

if (std::cin.good())
{
    std::cout << "Zadal jsi " << num << '\n';
}
else
{
    std::cout << "Daval jsi pozor na PRPA?\n";
}

Tento kód zajistí, že program korektně ošetří případ neexistující konverze na požadovaný datový typ. Pokud bychom se nyní chtěli znova pokusit o načtení čísla, dojde automaticky k vyhodnocení chyby a to hned ze dvou důvodů:

  • eos::failbit zůstal nastaven
  • ve vstupním bufferu zůstal text

Řešením je vynulování stavových bitů a vyčištění vstupního bufferu:

std::cout.clear();
std::ignore(MAX_INT); // argument říká, kolik znaků je zahozeno

Čtení textového řetězce

Pro práci s textovými řetězci se nejlépe v C++ hodí datový typ std::string, který je součástí standardní knihovny. Pro čtení řetězce ze standarního vstupu platí podobná omezení jako při použití funkce scanf v jazyce C.

#include <iostream>
#include <string>
 
int main() {
    std::cout << "Napis sve jmeno:\n";
    std::string jmeno;
    std::cin >> jmeno;
    std::cout << "Ahoj " << jmeno << '\n';
}

Úkoly

  1. Vyzkoušejte nejprve zadání svého křestního jména a pak celého jména včetně příjmení. V čem je rozdíl?
  2. Podobně jako v C jsou i v C++ k dispozici funkce, které jsou určeny k načtení delších úseků textu. V našem případě bychom mohli využít funkci std::getline, která načítá text ze standardního vstupu až do výskytu znaku konce řádku. Nahraďte řádek s proudovým operátorem vstupu následujícím kódem:

std::getline(std::cin, jmeno);

courses/b2b99ppc/tutorials/01.txt · Last modified: 2024/02/20 07:50 by viteks