C C++

Přednášky a průběh cvičení - Základy programování

zápočtová písemka 31.1.2012

poslední termín proběhne 31. 1. 2012 od 14.00 místnosti E320 - nahlašte se na termím v Moodle, nejpozději do 31. 1. 2012. Náhradní termín je určen všem, kdo neabsolvovali termín řádný, v řádném termínu neuspěli a/nebo si chtějí zlepšit bodové hodnocení (původní hodnocení písemky se účastí na náhradním termínu anuluje). Studenti prezenční formy ze cvičení doc. Šalouna mají po registraci v moodle možnost prezentovat svůj semestrální projekt, pokud tak ještě neučinili.

zápočtová písemka 13. 1.

náhradní termín proběhne 13. 1. 2012 ve 12.30 a 13.45 v místnostech C3 a B5 - nahlašte se na termím v Moodle, nejpozději do 12. 1. 2012. Náhradní termín je určen všem, kdo neabsolvovali termín řádný, v řádném termínu neuspěli a/nebo si chtějí zlepšit bodové hodnocení (původní hodnocení písemky se účastí na náhradním termínu anuluje).

zápočtová písemka 12. 12.

12. 12. 2011 proběhla zápočtová písemka a případně náhradní průběžná písemka v čase přednášky. Účast je povinná pro studenty prezenční formy studia (DS). Studenti kombinované formy studia (KS) se mohou zúčastnit -- svůj zájem o tento termím musíte vyjádřit v Moodle. Podle plánu tutoriálů je termín zápočtové písemky pro KS stanoven na sobotu 10. 12. 2011 posluchárna C3 čas 7.15.
Pro vaši informaci: náhradní termín zápočtové písemky je naplánován na pátek 13. 1. 2012 - týká se studentů obou forem studia.

průběžná písemka 31. 10.

Byl stanoven termín průběžné písemky pro denní formu studia -- cvičení v týdnu od 31. 10. do 4. 11. 2011.
Studenti formy kombinované mají v harmonogramu stanoven termín na 3. tutoriál.

1. týden

Přehled služeb, informačních systémů, dostupnosti MSDN AA a prostředí VŠB-TU Ostrava pro studenty FEI je obsažen v první části úvodní přednášky ZP-pr-1.pdf, úvod do Základů programování pak v části druhé 01-zaciname.pdf, proslovené 12. 9. 2011.

Náplní cvičení bylo zvládnutí prostředí Visual Studio 2010, krokování programu, nastavení breakpointů, step over, trace into, watch list obsahu proměnných a možnost jejich zobraení i změny hodnoty během ladění. Využijte přípravy dr. Davendry pro vytvoření nového konzolového projektu pro prostředí Win32 C++, uvedeno jako první tutoriál.
Použité zdrojové texty byly hello.cpp respektive simpleio.cpp s odpovídajícími výstupy hello.txt respektive simpleio.txt, doplnění kódu o funkci getchat(); před závěrečné return 0; je věcí cvičení.

2. týden

V pondělí 19. 9. jsem přednášel Výrazy, jsou označeny jako přednášky výrazy další výrazy s tím, že zbytek druhé části dokončím na následující přednášce.
Náplní cvičení jsou tedy právě výrazy, využijte hotové zdrojáky, zmiňované na přednášce, jsou umístěné na stránce www.cs.vsb.cz/saloun/educ/C_CPP/src dostupné z domácí stránky předmětu ZP. Konkrétní zdrojáky: INT-SIZE.CPP, int-size.txt, KOMENTAR.CPP, KONSTANT.CPP, konstant.txt.
Operátorům se ještě věnují soubory OP-ADDR.CPP op-addr.txt OP-BIT01.CPP op-bit01.txt OP-COND.CPP op-cond.txt OP-INT-F.CPP op-int-f.txt OP-INT01.CPP op-int01.txt op-lst.txt OP-MASSO.CPP OP-ODKAZ.CPP OP-SEFF.CPP OP-SQRT.CPP OPF-UN.CPP Takže na cvičení je vcelku docela co cvičit a ještě zbude na cvičení další. Než se do souborů (samostatně) pustíte abecedně, tak se na ně podívejte. Je lepší začít jednoduše, vyzkoušejte si nejdříve celočíselné dělaní a zbytek po něm, i celočíselné přetečení (ve 32bitovém, případně podle možností 64bitovém prostředí). U bitových operací nezapomínejte, že typ unsigned "je základ".

3. týden

V pondělí 26. 9. jsem dokončil výrazy a začal řízení chodu programu, které dokončíme na přednášce následující.
Náplní cvičení budou stále výrazy, zejména smíšené (double, int) a přetypování výrazů, rozhodně si vyzkoušejte i typické Cčkovské přiřazení s operací typu += a dále inkrementaci či dekrementaci celočíselné proměnné použité ve výrazu. Využijte hotové zdrojáky z obou částí přednášky o výrazech. Konkrétní zdrojáky (co jste nestihli minule nebo samostatně): OP-COND.CPP op-cond.txt OP-INT-F.CPP op-int-f.txt op-lst.txt OP-MASSO.CPP OP-ODKAZ.CPP OP-SEFF.CPP OP-SQRT.CPP OPF-UN.CPP.
A zdrojáky začínající s řízením chodu programu: if-else1.cpp, if-else1.txt, switch-1.cpp, switch-1.txt, while-1.cpp, while-1.txt, for-1.cpp, for-1.txt.

4. týden 3. 10. jsem dokončil řízení chodu programu, a přednesl i obsah věnovaný funkcím. Zde prosím nemusíte podrobě zkoumat některé objektové konstrukce, které jdou nad rámec procedurálního programování. Naopak věnujte pozornost zveřejnění termínu pro průběžnou písemku v záhlaví této stránky.
Náplní cvičení bylo shrnutí zadání projektů. Důraz je kladen na rozložení úlohy na definici datové struktury a postupné přidávání funkcionality napřílad s použitím konstantních hodnot pro generování HTML výstupu, pak přechod k načtení hodnot ze souboru (CSV nebo binární data z MP3 tagů, EXIF informací (hledejte na Wikipedii). Projekt musí pracovat se vstupními i výstupními soubory, alokovat paměť a pracovat s výstupem do HTML nebo používat GUI. Zadání projektu vložte do Moodle, kde jsou i pookyny, do nadcházejícího cvičení.

5. týden 10. 10. Obsah věnovaný funkcím jasně popisuje rozdíl mezi definicí funkce a deklarací funkce. Ukazuje použití konstrukce pro práci s proměnným počtem argumentů funkce (va_start, va_arg). Začínáme přehledem knihovních funkcí jazyka C, řada z nich má pro nás zásadní význam, například funkce z knihoven stdio.h, nebo některé matematické funkce z math.h.
Náplní cvičení bylo ladění detailů v zadání některých semestrálních projektů. Zde se fakticky opakuje obsah předchozího cvičení. Zdůrazňuje, že vstup textového zadání v Moodle máte dovolen do 1. 11. 2011, a můžete jen vkládat opakovaně - tedy máte možnost opravit formulace. Nezapomeňte se v zadání identifikovat a také uvést, do kterého cvičení chodíte, nebo že jste v kombinované formě studia.<-br> V řízené části cvičení jsme procvičovali funkce. Pro ladění projektů v první fázi (než probereme práci se soubory) může být užitečné jednoduché přesměrování vstupu a výstupu z konzoly (cmd), tedy < a >, čímž se přesměruje stdin, respektive stdout. Případný chybový proud stderr přesměrovat nelze. Pro zpracování CSV (viz minulé cvičení) potřebujete načíst textový řádek (neznámé délky), prostředkem v C++ je getline(), v C pak funkce fgets(), načtený CSV obsah doporučuji naparsovat (rozložit) pomocí knihovní funkce strtok(), příklad na stránce http://www.cplusplus.com/reference/clibrary/cstring/strtok/.

6. týden 17. 10. Přednášel doc. Kozubek na téma použití matematického softwéru (Mathcalc).
Cvičení - práce se znakovým vstupem a s jednoduchým formátovaným vstupem pomocí funkcí getchar(), printf(). scanf(), ale i odpovídající transformace v paměti - funkce sprintf() a sscanf(). Konkrétně soubory: cpy.c, prntf.c, scanwhil.c, spfssf.c s tím, že matematická knihovna se v C a C++ připojuje jinak, a c C++ musí mít konstanty definovaný typ, nestačí jen const. Takže budete muset upravit část kódu.
Do adresáře se zdrojovými texty C++ byl přidán adresář se zdrojovými texty z C, jmenuje se C-src, obsahuje i zaZIPované archiv pro jednodušší stažení.

7. týden 24. 10. Byl náplné přednášky znakový a formátovaný vstup i výstup do/z datových proudů v C - tedy stdin, stdout. Obsahově odpovídala přednáška kapitole 7 v elektronickém textu a základní přístup k binárním souborům/proudům -- v pojetí jazyka C datové proudy se strukturou typu FILE *, což obsahově odpovídá kapitole 10 v elektronickém textu.
Cvičení - práce se soubory.

8. týden 31. 10. Byly náplní přednášky Ukazatele, pole a řetězce, viz kapitola 9 v elektronickém textu. Byl zdůrazněn rozdíl mezi kopírováním pole a kopírováním řetězců, tedy znakovoého pole s délkou určenou znakem \0 na konci řetězců. Ukázány byly příklady kopírování v stylu odpovídajícím jazyku C ve srovnání se stylem odpovídajícím jazyku Pascal. Závěr byla ukázka klasického kódu K&R pro výpočet čísla dne v roce: yearday.c.
Cvičení - úvodní průběžná písemka na cca 30 minut. Následovalo psojení obsahu dvou předchozích přednášek - práce se soubory a pole. Konkrétně ukázka souboru mat-init.c a doplnění o uživatelské zadání prvků matice, formátovaný prompt pro uživatele s přehledem, který prvek (řádek, sloupec) aktuálně zadává. Zápis prvků zadané matice do binárního soubor -- první úspěšný student ze cvičení získal +2 bonus body. A sekvenční řtení obsahu binárního souboru. Vysvětlen způsob ukládání prvků jednorozměrných polí v paměti tak, aby šlo o matici. Dobrý programátorský styl - používání konstant namísto magických hodnot, pojmenování identifikátorů konstant. A problémy s funkcí scanf("%f") která ponechá \n za posledním prvkem, což činilo problémy s následným gets() při zadávání jména uživatele.

9. týden 7. 11. Proběhlo dokončení ukazatelů, konkrétně ukazatelů na ukazatele, funkce a parametry příkazového řádku alokace dynamické paměti v C.
Cvičení - použití knihovní funkce qsort() spolu s ukazatelem na vlastní funkci pro porovnání ukazuje fn-qsrt.c. Použití menu je vhodným příkladem motivujícím pro semestrální projekt, viz ptr_fn01.c, parametry příkazového řádku pomůže osvětlit cmd_ln06.c. A konečně program strof-HTML-tab.cpp je v prostředí C++, ale jasně ukazuje práci s výstupem do HTML, což je požadavek v rámci semestrálního projektu, přepis do neobjektových struktur datových proudů v jazyce C je individuální náplní na zbytek cvičení. Dále se cvičení věnuje individuálním konzultacím k projektům.

10. týden 14. 11. - téma Struktury a uživatelské typy dat, odpovídající elektronickému textu v kapitole 11 v elektronickém textu.
Cvičení - připadá na státní svátek 17. 11.

11. týden 21. 11. Tématem přednášky byla doporučení pro zápis zdrojového kódu, komentování, formátování, zvyklosti pro tvorbu identifikátorů i nástroje pro vývoj softvéru, podporu týmové práce a tvorbu dokumentace, v navazující části byl prezentován úvod do systému Unix, který bude dokončen na příští přednášce.
Cvičení budou věnována zejména dokumetnaci zdrojového textu pomocí nástoje DOXYGEN a individuálním konzultacím k semestrálnímu projektu.

12. týden 28. 11. Tématem přednášky bylo dokončení přehledové přednášky úvod do systému Unix, a informace o správě projektů v jazyce C, tedy aplikací, vytvořených z více zdrojových textů.
Doporučuji uživatelské seznámení s operačním systémem Unix a překlad vzorového projektu prj-demo.zip Doporučuji vám podrobný přehled unixu od Libora Forsta. Komentovaný příklad použití nástroje make najdete v odkazu příklad make. Vynikající je anglicky psaný přehled/turiál C.

13. týden 5. 12. Přehled programovacích paradigmat a vývoj programovacích jazyků byly prezentovány v první části přednášky programovací jazyky, z části druhé, věnované elektronickému publikování a standardům, byla prezentována jen část.
Dokončení seznámení se základy práce v OS Unix a překlad vzorového projektu prj-demo.zip. Individuální konzultace a "formální přebírání" dokončených semestrálních projektů -- projekty se odevzdávaní v předepsané podobě výhradně do systému Moodle.

14. týden 12. 12. V čase přednášky proběhne zápočtová písemka. Účast povinná pro studenty prezenční formy studia. Studenti kombinované formy se mohou zúčastnit - svůj zájem o tento termím musíte vyjádřit v moodle.
Individuální konzultace a "formální přebírání" dokončených semestrálních projektů -- projekty se odevzdávaní v předepsané podobě výhradně do systému Moodle.


Příklady témat projektů

Detaily hodnocení projektů ukazují náležitosti, které musí projekt obsahovat a popisují jejich bodování. Následující přehled témat není podrobně rozpracován ohledně vstupů, výstupů, dokumentace, to konzultujte s cvičícím. V každém případě připravte (případná rozsáhlá) testovací data tak, ať se dají zadat například přesměrováním vstupu, nebo načíst ze souboru a uživatel se tak nedopustí chyby a výsledek bude odpovídat vašim výsledkům v dokumetnaci (HTML).
Témata berte jako náměty, budou doplňována průběžně. Nejpozději na 4. cvičení musíte cvičícímu nahlásit vybrané téma. Příklad semestrálního projektu ve dostupný z prostředí Moodle po přihlášení, taméž najdete příklad prezentace k projektu.

Často kladené otázky


Poslední změna: 19. 12. 2011

doc. RNDr. Petr Šaloun Ph.D., katedra informatiky, Fakulta elektrotechniky a informatiky, VŠB-TU Ostrava.