155GIT3 Informatika 3

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání

Anotace

Úvodní kurz programovacího jazyka C++. Základní prvky jazyka, struktura programu, typy dat. Deklarace proměnných a objektů, konstanty, inicializace proměnných a objektů. Výrazy, příkazy, funkce, pointery. Třídy, zapouzdření, dědičnost, polymorfismus. Vybrané algoritmy, programování jednoduchých geodetických úloh. Semestrální práce.

Skripta, příklady, tutoriály

Skripta
Úvod do C++
Příklady
Příklady C++ pro bakaláře
Návody, tutoriály
Maticová C++ knihovna matvec
Tvorba programů v prostředí OS GNU/Linux
GNU Emacs
Dev-C++

Externí odkazy

Program make

  • GNU Emacs jako implicitní volbu pro překlad nabízí program make -k (parametr -k znamená pokračovat i po případných chybách)
  • Typickým způsobem jak přeložit a sestavit program je definovat všechny potřebné kroky a závislosti v souboru Makefile a přenechat ří­zení­ překladu a sestavení na programu make
  • Daný program/programy, resp. projekt, přitom umisťujeme do samostatného adresáře (např. přednášky a cvičení)

Následující jednoúčelový soubor Makefile umožňuje automatický překlad, sestavení a spuštění všech C++ souborů v daném adresáři (předpokládáme, že každý soubor obsahuje jeden kompletní program)

FILES=$(shell ls *.cpp | sed s/\\.cpp$$//g )
all : $(FILES)

% : %.cpp Makefile
      $(CXX) $(CXXFLAGS) -I.. -o $@ $<
      touch  data.txt
      ./$@ < data.txt

Cvičení

Plán cvičení

Základní pojmy

  1. program hello world
  2. vybrané základní datové typy (int, double, bool, void)
  3. základní aritmetické operace +, -, *, / a %
  4. operátor přiřazení a operatury +=, -=, *= ...
  5. standardní vstup a výstup pro základní číselné typy
  6. blok {}, platnost a viditelnost objektů (proměnných)
  7. odvozené typy ukazatel a reference (první zmínka)

Programování cyklů

  1. první seznámení s kontejnerem vector
  2. relační operátory <, >, <=, >=, !=
  3. příkazy for, while, do, continue a break
  4. příklady programování jednoduchých cyklů

Funkce, první seznámení

  1. napište a otestuje jednoduché funkce jako (více viz sbírka příkladů C++ Bc.).

Knihovna matvec

  1. maticová knihovna matvec
  2. součet dvou vektorů, součet dvou matic
  3. součin matice a vektoru
  4. součin dvou matic

Příklad práce s maticemi a vektory

Gaussova eliminace rozšířené soustavy

Řesení soustavy lineárních rovnic Gaussovou eliminací

  1. vstup rozšířená matice soutavy (absolutní členy tvoří N+1 sloupec; na cvičení se omezíme na případ s jedinou pravou stranou)
  2. převod na horní trojuhelníkovou soutavou (pomocí elementárních úprav: výměna dvou řádků, přenásobení řádku nenulovývm koeficientem, přičtení k-násobku jiného řádku)
  3. řešení horní trojúhelníkové soustavy (zpětná substituce)

Zpracování vstupní dávky souřadnic

Napište program, který načte a zpracuje soubor souřadnic v následujícím formátu (viz zadádí C++ Bc. 19):

  • soubor může obsahovat komentáře (#)
  • může obsahovat prázdné řádky
  • na řádku se uvádí číslo bodu a souřadnice xy, z nebo xyz
# jednoduchy seznam souradnic
# ---------------------------

1001 234.53 345.22          # x y
1002 355.24 456.46 555.12   # x y z
1003 423.12                 # z

# ------ konec dat ------

Vstupní/výstupní proudy

Napište funkci std::istream& komentář(std::istream& inp) podle zadání C++ Bc. 18.

Funkce komentář() vrací referenci na vstupní proud a může být proto použita např. v podmínce while(...) pro čtení vstupních dat.

Poznámka: funkce komentář() je po formální stránce manipulátor bez parametrů (více viz skripta).

Ukazatele a dynamická alokace paměti

  • Ukazatel na funkci
    • napište funkci, která metodou půlení hledá řešení soustavy , kde je spojitá funkce, která na zadaném inrevalu nabývá hodnot s různými znaménky (viz též metoda tětiv z příkladu 29).
  • Napište funkce, které realizují jednoduché funkce s maticemi:
    • alokování paměti pro matici
    • načtení matice ze souboru
    • výpis matice
    • uvolněné alokované paměti

Ukazatel na funkci (2)

Napište funkci pro numerický výpočet určitého integrálu Simpsonovou metodou (příklad 30).

Použijte deklaraci typedef pro typ ukazatel na funkci typu double s jedním argumentem typu double.

typedef double (*Funkce)(double);

double simpson(Funkce f, double a, double b, int m);   // deklarace funkce

Poznámka: deklaraci typedef můžeme použít pro zjednodušení práce s libovolným typem, nevytváří nový typ ale pouze náhradní jméno.

Výjimky

  • try blok
  • vyvolání výjimky
  • zpracování výjimek

Kontejnery a iterátory

  • napište program, který po řádcích čte zadaný text a vytváří slovník, ve kterém je pro každé slovo uveden seznam řádků na kterých se dané slovo vyskytuje.

Dědičnost a polymorfismus

Navrhněte jednoduchou soustavu tříd demonstrujících využití polymorfismu. Např. Osoba -> (Student | Učitel) s virtuální metodou info() o dané osobě, demonstrovano na seznamu osob.

Zkouška

Zkouška má dvě části. První společná část začíná v počítačové učebně (B870), každý student dostane dvě vylosovaná zadání ze sbírky příkladů pro bakaláře. Nutnou podmínkou pro hodnocení dobře je vyřešení alespoň jednoho ze dvou zadaných příkladů. První část zkoušky trvá 90 minut, následuje hodnocení všech řešení, po kterém je oznámeno, kteří studenti neuspěli, kteří mají nárok na známku dobře a kteří mají šanci získat lepší známku.

Ve druhé části zkoušky jsou individuálně zkoušeni studenti, kteří byli v první části vyhodnoceni jako potenciální kandidáti na známky velmi dobře a výborně. Zařazení do této kategorie ale neznamená, že jejich hodnocení nemůže nakonec být dobře nebo dokonce nedostatečně.

Každý student si může donést jeden list formátu A4 s poznámkami (nesmí ale obsahovat kód ze sbírky příkladů) a může používat jeden čistý list A4 na poznámky. Nutno předložit ke schválení před zahájením zkoušky.

Při zkoušce nesmí studenti používat žádné další pomůcky, jedinou výjimkou je text skript v elektronické podobě (skripta jsou uložena v kořenovém adresáři /) a veškeré informace z online dokumentace operačního systému.

Studenti jmenovitě nesmí používat externí media, ani kalkulačky, mobily, organizátory a pod. Veškeré tašky a osobní věci musí být uloženy v prostoru u tabule (B870).

Při zkoušce mohou studenti komunikovat pouze s vyučujícími. Komunikace s jinými studenty nebo s kýmkoliv mimo učebnu (jakoukoliv formou) je považována za pokus o podvod.

Pokusy o podvod budou nahlášeny disciplinární komisi fakulty s návrhem na ukončení studia.

Zimní semestr 2006/2007

  • protože má předmět zapsáno 224 studentů, nastavil jsem kapacitu terminů na 21, což je počet počítačů v B870. Obvykle jsem nechával 1-2 mista rezervu pro případ výpadku hardwaru. Letos tedy "jedeme na doraz", doufejme, že technika neselže.
  • první termíny zatím nejsou otevřeny (mají kapacitu 0), kapacita bude nastavena na plný počet dodatečně.
  • jak bude postupovat zkouškové období, budu postupně odebírat atribut "opravný" termín, tak aby se případně mohli hlásit i studenti, kteří ještě na zkoušce nebyli. Záměr je umožnit studentům, kteří neuspěli přihlásit se na některý z opravných termínu (je jich řádově třetina, jak určují fakultní předpisy)