Cvičení NPRG031 – Programování 2 (LS 2021/22)

Čtvrtek 10:40, N8

Termín odevzdání zápočtového programu je 31. 8. 2022.

Obsah stránky

Co jsme dělali

17. 2. (1. cvičení)

Základy C#: proměnné, podmínky, cykly – úlohy na procvičení (programy ze cvičení).

24. 2. (2. cvičení)

Základní datové struktury v C# (List, Dictionary, tuple, ...), ReCodEx Readerúlohy na procvičení (programy ze cvičení).

3. 3. (3. cvičení)

Třídy (class) a rozhraní (interface) (programy ze cvičeníZ7\mathbb{Z}_7).

10. 3. (4. cvičení)

Třídy a rozhraní – IEquitable, IComparable (programy ze cvičeníZ7\mathbb{Z}_7).

17. 3. (5. cvičení)

Dědičnost (programy ze cvičení – Strom aritmetických výrazů).

24. 3. (6. cvičení)

Soubory (programy ze cvičení – Synchronizace titulků).

31. 3. (7. cvičení)

Diskrétní simulace (programy ze cvičení – Pošta).

7. 4. (8. cvičení)

Dynamické programování (programy ze cvičení).

14. 4. (9. cvičení)

Generické programování, funkcionální programování, enumerátory – úlohy na procvičení (programy ze cvičení).

21. 4. (10. cvičení)

Testy (programy ze cvičeníList<T>).

28. 4. (11. cvičení) – suploval David Šosvald

5. 5. (12. cvičení)

Ukázková zkoušková úloha Koncerty.

12. 5. (13. cvičení)

19. 5. (14. cvičení)

Zápočtový test.

Přednáška

Cvičení je vypsáno k přednášce Tomáše Holana.

Podmínky na zápočet

Podmínky na zápočet jsou prakticky stejné jako v ZS. Téma zápočtového programu si vyberte do konce výuky v LS (22. 5. 2022). Termín odevzdání zápočtového programu je 31. 8. 2022.

Na zápočet je potřeba

Domácí úkoly

Plánuji zadat domácí úkoly za celkem alespoň 100 bodů. Na zápočet potřebujete aspoň 67 bodů (tedy dvě třetiny z maxima). Na každý úkol budete mít dva týdny na odevzdání a v tomto čase můžete úkol odevzdat i víckrát. Pro odevzdávání budeme používat systém ReCodEx.

Zápočtový test

Test se bude psát nejspíš na posledním cvičení a bude zadán přes ReCodEx (takže ho budete řešit jako domácí úkoly, akorát s časem omezeným délkou cvičení). Další termíny budou vypsány podle potřeby během zkouškového období – celkem máte na test tři pokusy.

Zápočtový program

Zápočtový program je větší kus software, který budete programovat doma během semestru. Do konce výuky v LS (22. 5. 2022) si vyberete téma a zašlete mi ho ke kontrole. Na programu pak budete pracovat, dokud nebude hotový (včetně uživatelské a programátorské dokumentace). Výsledek práce mi zašlete ke kontrole takovým způsobem, abych mohl program spustit a vyzkoušet, ale také abych se mohl podívat na jeho zdrojový kód (pokud je to problematické, můžeme se domluvit na osobním předvedení).

Zápočtový program má výjimku, že nemusí být v C# – použijte jazyk, který umíte nebo který nejlépe sedí na doménu problému. Na druhou stranu, já bych měl být schopný kód vašeho programu přečíst a pochopit, takže pokud chcete použít nějaký jiný jazyk než C#, domluvte se na tom se mnou už ve specifikaci programu.

Zápočtový program odevzdávejte nejpozději do 31. 8. 2022, abych měl dost času se na něj podívat a vy jste případně měli možnost program doplnit nebo opravit podle mých připomínek před koncem akademického roku (30. 9. 2022 – po tomto datu už nejde udělovat zápočty v SISu).

Byl bych rád, kdybyste program vyvíjeli v repozitáři na GitHubu nebo GitLabu (pro ten máme fakultní instanci), případně podobné službě. Ušetří to práci oběma stranám. Pokud s gitem neumíte, pak máte ideální příležitost se ho naučit, budete ho beztak jednou potřebovat (Git ve 100 sekundách, ale nám stačí prvních 60 a potom to samé, ale detailněji).

Spoustu užitečných informací o zápočťácích už sepsali jiní, tak nemá smysl je znovu psát. Tady je pár odkazů: Martin Mareš má na webu svého cvičení hezky sepsané informace o zápočťácích. Navíc poskytuje i seznam témat pro inspiraci, takže doporučuji přečíst. Detailní informace včetně nápadů na témata sepsal taky Jirka Mayer. Nakonec, Rudolf Kryl má na webu návod na psaní dokumentace k zápočťáku, také doporučuji přečíst. Náležitosti tam popsané budu vyžadovat. Doporučuji dokumentaci psát anglicky, ale pokud si nejste jistí, klidně ji napište česky (příp. slovensky).

Užitečné informace

Dotazy a konzultace

Pokud vám něco, co říkám, nebude jasné, ptejte se. Ideálně hned, dokud je to aktuální. Je velmi pravděpodobné, že v učebně sedí několik dalších lidí s úplně stejným dotazem, ale bojí se zeptat. Nebojte se. Cvičení je pro vás. Cílem je, abyste látku pochopili, ne abych ji já jen zbytečně odvykládal.

Pokud se stydíte zeptat, nebo je váš dotaz moc dlouhý či kontroverzní, můžete se zeptat po skončení cvičení. V tomto čase většina ostatních studentů už odejde a zůstanou jen ti, kteří se mnou chtějí něco řešit.

Pokud by někdo chtěl něco dovysvětlit nebo se mu nedařilo a chtěl by probrat cokoliv jiného, napište mi email a domluvíme se na termínu konzultace.

MFF Discord

Kanál pro tohle cvičení: #alg-prg-cv-mtopfer. Není povinné tam být, ale je to další místo, kde se můžete ptát na otázky a bavit se se mnou i se spolužáky.

V čem budeme programovat a jak to nainstaluju

Já budu na cvičení používat Visual Studio, které znáte z přednášek. Také si ukážeme, jak použít Visual Studio Code, které jsme používali v zimním semestru, což se hodí těm, kteří nemají Windows. Taky nesmím zapomenout na prostředí Rider od JetBrains, které můžete jako studenti používat zdarma, nicméně není v labu nainstalované. Pokud už máte nainstalovaný nebo oblíbený jiný editor (Atom, Sublime, ...), problém s tím nemám.

Na počítačích v učebně jsou všechny potřebné nástroje už nainstalované.

API reference C#

V dokumentaci k C# najdete popis tříd a metod ze standardní knihovny, které se vám při programování můžou hodit.

Instalace VS Code

  1. Nainstalujte si Visual Studio Code.
  2. Přidejte si do VS Code rozšíření pro C# (rozšíření se do VS Code přidávají v levém panelu v ikoně Extensions nebo přes odkaz z webového prohlížeče).

Stejné pokyny v angličtině najdete taky v dokumentaci VS Code. Pro vývoj budeme používat .NET Core, postup vytvoření nového projektu si ukážeme na cvičení nebo ho najdete v dokumentaci VS Code.

Vytvoření nového projektu

Ve Visual Studiu je to snadné, stačí kliknout na FileNewProject... a vybrat Console App. Pak už se jen nastaví jméno a umístění projektu a je to. Pro naše projekty doporučuji zaškrtnout Place solution and project in the same directory, protože budeme pracovat vždy jen s jedním projektem současně, takže nepotřebujeme vytvářet pro projekt podsložku.

Ve VS Code ovšem tlačítko pro vytvoření nového projektu není. Pomůžeme si příkazem dotnet na příkazové řádce.

  1. Vytvořte složku, ve které chcete projekt mít a přejděte do ní v terminálu.
  2. Spusťte dotnet new console. To vám vyrobí Program.cs, který můžete editovat a spustit.
    • Pokud máte .NET 6 a novější, vyrobí se program s tzv. top-level statements (tedy bez Main metody), což nebude fungovat v ReCodExu. Projekt bez top-level statements se dá vyrobit pomocí dotnet new console --framework net5.0 (více zde).
    • Ještě jedna poznámka k .NET 6: ve výchozím nastavení používá implicitní importy (takže na začátku programu nemusíte mít napsané using System; a některé další), které v ReCodExu nejsou zapnuté. Může se vám stát, že vám kód lokálně půjde zkompilovat, ale v ReCodExu to neprojde. Řešení je vypnout si implicitní importy i u sebe – z .csproj souboru odstraňte řádek <ImplicitUsings>enable</ImplicitUsings>.
  3. Hodí se mít VS Code otevřený ve složce projektu, to se udělá snadno spuštěním code ..

Když je VS Code otevřený přímo ve složce projektu, umí sám vygenerovat soubory potřebné pro spuštění projektu. Stačí na Run and Debug kartě kliknout na .NET: Generate Assets for Build and Debug. Aby ve VS Code správně fungovalo čtení vstupu, je potřeba ve vygenerovaném souboru .vscode/launch.json změnit řádek console na "console": "integratedTerminal",. Z příkazové řádky se projekt dá spustit pomocí dotnet run.

ReCodEx

Domácí úkoly budou zadávány a odevzdávány pomocí systému ReCodEx.

Jak rozchodit ReCodEx:

Řešil jsem KSPčko

Pokud jste už zdatnější a myslíte si, že by vás cvičení nebavilo, můžete se zapsat na cvičení Martina Mareše pro pokročilé. Můžete také chodit i na obě cvičení současně (v takovém případě si v SISu nechte zapsané moje cvičení).

Chci se procvičovat doma a nevím jak

Středoškolská soutěž Kasiopea má archiv domácích kol, kde se obtížnost úloh stupňuje od velmi lehkých k velmi náročným.

Korespondenční seminář z programování má online k dispozici nejen úlohy, ale i kuchařky vysvětlující nejrůznější oblasti algoritmizace, diskrétní matematiky a spousty dalších užitečných oblastí. Lehčí úlohy najdete v začátečnické kategorii.

Průvodce labyrintem algoritmů je kniha (dostupná online) shrnující látku předmětů Algoritmizace, Algoritmy a datové struktury I a Algoritmy a datové struktury II. Její úvodní kapitoly rozebírají paměťovou a časovou složitost, binární vyhledávání, Euklidův algoritmus, třídění, haldy apod.

Část textu na této stránce jsem opsal od Jirky Mayera. Díky, Jirko!