155IN3G Informatika 3

Z GeoWikiCZ

Anotace

Úvodní kurz programování v jazyce C++ seznamuje studenty se základními prvky jazyka, strukturou programu a typy dat. Předmět postupuje od elementárních pojmů jako jsou deklarace proměnných, konstanty, inicializace proměnných, výrazy, příkazy, funkce a ukazatele. Výuka probíhá v prostředí operačního systému GNU/Linux.

Důraz je kladen na objektové vlastnosti jazyka a používání vybraných nástrojů standardní C++ knihovny, jako jsou například kontejnery vector a map, a jejich využití při dynamické alokaci paměti, které je nezbytné např. pro programování jednoduchých geodetických úloh a řešení úloh vyrovnávacího počtu.

Třídy, jako nástroj pro definování uživatelských typů, jsou nejprve demonstrovány na jednoduchých příkladech, ve kterých je organizace paměti zajištěna např. standardními kontejnery. Po úvodním výkladu pojmů dědičnost a polymorfismus následuje seznámení s mechanismem výjimek a jejich ošetření. Ke třídám, dědičnosti a polymorfismu se studenti znovu vrací při výkladu dynamické alokace paměti.

Tento úvodní kurz si neklade za cíl vyčerpávajícím způsobem probrat v plné šíři všechny rysy jazyka C++ (např. problematika šablon je pouze naznačena), jeho cílem je ale seznámit studenty dostatečně podrobně s C++, tak aby mohli aktivně programovat a byli připraveni pro následné studium objektového programování.

Doporučená literatura
  1. Čepek, A.: Úvod do C++, Vydavatelství ČVUT v Praze, 2004

Přednášky

Přednášející: prof. Ing. Aleš Čepek, CSc.

  1. První seznámení s platformou Qt Creator, základní pojmy C++
  2. Programování cyklů
  3. Funkce, první seznámení
  4. Knihovna matvec
  5. Gaussova eliminace rozšířené soustavy
  6. Zpracování vstupní dávky souřadnic
  7. Vstupní/výstupní proudy
  8. Ukazatele a dynamická alokace paměti
  9. Ukazatel na funkci (2)
  10. Výjimky
  11. Kontejnery a iterátory
  12. Dědičnost a polymorfismus


Přednášky ve formátu PDF (http://josef.fsv.cvut.cz/~gin/c++bc/).

Cvičení

Cvičení navazují na látku probíranou na přednáškách.

Základní pojmy

  1. program hello world, seznámení s prostředím Qt Creator (konzolové aplikace)
  2. vybrané základní datové typy (int, double, bool, void)
  3. základní aritmetické operace +, -, *, / a %
  4. operátor přiřazení a operátory +=, -=, *= ...
  5. blok {}, platnost a viditelnost objektů (proměnných)
  6. standardní vstup a výstup pro základní číselné typy
  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.

Rozpis cvičení

Skripta, příklady, tutoriály

Skripta
Úvod do C++, nakladatelství ČVUT
Příklady
Příklady C++ pro bakaláře
Návody, tutoriály
Qt Creator
Maticová C++ knihovna matvec
Tvorba programů v prostředí OS GNU/Linux
GNU Emacs
Code::Blocks
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

Zkouška

  • Zkouška má obecně tři části, první a druhá část vždy v počítačové učebně. V první části (45 minut) je zadána jedna úloha a podle výsledku zkouška pokračuje (pokud má student zájem o případné zlepšení známky). Od akademického roku 2009-2010 nejsou zadávány úlohy ze sbírky.
  • Do druhé části postupují kandidáti na známky D nebo lepší, není garantováno. Druhá část zkoušky trvá opět 45 minut. Zadání je individuální, obvykle ale společné pro celou skupinu.
  • U zkoušky mohou studenti používat skripta, jeden list formátu A4 s poznámkami a jeden list formátu A4 na pracovní poznámky během zkoušky.
  • třetí část zkoušky probíhá individuálně a rozřazuje přihlašené studenty do kategorií B a A.

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 jsou text skripta (nesmí pochopitelně obsahovat vepsané či vložené kódy příkladů ze sbírky) a veškeré informace z online dokumentace operačního systému. Skripta musí zůstat u počítače ke kontrole před vyhodnocením daného kola.

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). Během 45 minut v jednotlivých fázích zkoušky nesmí studenti opouštět učebnu.

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 2009/2010

Zápočty udělené na přednášce

  • Jan Opat
  • Tereza Fiedlerová

Zimní semestr 2008/2009

Přednášky:

Protože mě již unavovalo neustále hlídat některé studenty, aby neopisovali řešené příklady ze sbírky (odmítám připustit, aby vysokoškolská výuka degenerovala na úroveň střední školy; mám na mysli mizerné střední školy), začal jsem pro každou zkoušku dávat individuální zadání, která nebyla použita a která se nebudou v budoucnu opakovat. AČ

Zimní semestr 2007/2008

Na září (16.9.) jsem vypsal termín, na který se mohou přihlásit studenti, kteří nemají zkoušku, ale byl jim explicitně udělen zápočet (všichni ostatní mají v KOSu uvedeno N, tj. zápočet neudělen). Implicitně byly zápočty udělovány studentům, kteří úspěšně složili zkoušku.

Možnost zápisu na zářijový termín je omezena pouze pro studenty, kteří sice neuspěli, ale jejich znalosti byly takříkajíc na hraně a kterým jsem chtěl poskytnout ještě jeden pokus. Především jde o studenty druhého ročníku, kteří snad napoprve zkoušku podcenili. Termín proto byl stanoven tak, aby nekolidoval s letním výcvikovým kurze, který se koná od 31.8 do 7.9.

Pokud se nemůžete na zkoušku přes KOS přihlásit, znamená to, že vám nebyl udělen zápočet a zářijový opravný termín se vás již netýka.

Zimní semestr je uzavřen.

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)