V první polovině zimního semestru 2017/2018 vedu dvě cvičení předmětu Objektově orientované programování [NMIN201]. Cvičení probíhají ve čtvrtek od 17.20 a pátek od 12.20 v učebně K11.
První polovinu semestru přednáší Jakub Gemrot. (viz Stránky přednášky) Druhou polovinu semestru přednáší i cvičí Tomáš Holan.
Tato část stránky se zobrazuje pouze při přístupu z labu.
Následující tabulka zachycuje možnosti vývojových prostředí. Je to samozřejmě jen drobný výběr, existuje celá řada jiných prostředí, které také můžete využít. Pokud byste našli nějaké, které by stálo za zmínku, klidně mi o něm napište.
Vývojové prostředí | Jazyky | Operační systém | Výhody | Nevýhody | Poznámky |
Visual Studio | C, C++, C# | Windows | Stejné prostředí na všechny jazyky, stejné prostředí jako v labu, ve variantě Community je zdarma | Pouze Windows, zabere hodně paměti (jak na disku, tak na RAM po spuštění) | Po nainstalování je potřeba ještě stáhnout rozšíření pro C++. Doporučuji rovnou nainstalovat i rozšíření pro .NET, abyste byli připraveni na druhou část semestru. Nicméně o to víc disku vám to sežere... |
Code::Blocks | C, C++ | Windows, Linux, OS X | Zdarma, opensource, multiplatformní, menší než Visual Studio | Neporadí si (aspoň v základu) s C# | Code::Blocks ve skutečnosti použije překladač Gcc/G++ (viz níže). (Umí ale používat i jiné překladače.) |
MonoDevelop | C# | Windows, Linux, OS X | Zdarma, opensource, multiplatformní, menší než Visual Studio | Neumí toho tolik, jako Visual Studio. Pouze C#, takže jej využijete až ve druhé polovině semestru. | Pro Linuxové uživatele je Mono jediný (rozumný) způsob, jak psát C# aplikace. A MonoDevelop je na to nejpoužitelnější vývojové prostředí (IDE). |
Pouze překladač Gcc/G++ | C, C++ | Windows, Linux, OS X | Zdarma, opensource, multiplatformní, zabere nejméně místa | Je potřeba se nebát příkazové řádky | Pokud byste nechtěli používat žádné speciální vývojové prostředí, existuje i takováto cesta. Píši o ní, protože je to moje nejoblíbenější varianta. Zároveň ale upozorňuji, že většině lidí možná vyhovovat nebude. Pro C# pak existuje překladač mcs. |
Příklad vstupu | 4-3 |
Příklad výstupu | 1 |
Odevzdávací systém zatím nefunguje. Výsledek prvního úkolu mi pošlete e-mailem (had+oop --at-- kam). Další úkoly již (doufejme) budou zadané v ReCodExu.
Zprovozněte si vývojové prostředí a hlavně překladač jazyka C. Dále si zde ze stránek stáhněte zdrojový kód Program spusťte a e-mailem mi pošlete výsledek (tj. co program vypsal do konzole). Máte-li s vývojovým prostředím problém a nevíte si s ním rady, ozvěte si mi také.
Aktualizace: Ve Visual Studiu 2017 se údajně trochu změnil průvodce na vytvoření projektu. Měla by zde být možnost rovnou vybrat "Empty Project" místo "Win32 Console Application", případně "Desktopový průvodce", ve kterém se pak dá vypnout "SDL checks" a "Prcompiled header".
program.exe < vstup.txt
< vstup.txt
>
slouží k přesměrování výstupu.return 0;
v
mainu. Díky tomu si pak můžete přečíst výstup z programu i po jeho ukončení.gdb
. Zde je stručný
přehled základních příkazů.Doděláme příklady z minula:
'a'
místo čísel znaků v ASCII 97
.struct prvek { int hodnota; ... }; struct prvek * vloz_na_zacatek(struct prvek * seznam, int hodnota) { ... } struct prvek * odeber_ze_zacatku(struct prvek * seznam) { ... } int hodnota_prvniho_prvku(struct prvek * seznam) { ... } // příklad volání: struct prvek * seznam = NULL; seznam = vloz_na_zacatek(seznam, 4); int h = hodnota_prvniho_prvku(seznam); seznam = odeber_ze_zacatku(seznam); // varianta pro pokročilé: push(&seznam, 4); int h = pop(&seznam);
Byla jednou jedna vesnice, ve které se lidé měli rádi a o Vánocích se s chutí obdarovávali. Roku 1 každý vesničan vyrobil jeden dárek a o Vánocích ho dal svému oblíbenci. Druhý rok vesničané zjistili, že dárky, které dostali, se jim moc nehodí, takže je poslali dál: o Vánocích každý svému oblíbenci (témuž jako loni) předal všechny dárky, které loni dostal. Kdo loni nedostal žádný dárek, zahořkl a nikoho neobdaroval. Třetí rok si opět všichni dárky předali.
Tak to šlo rok za rokem, až někdo dostal dárek, kterým před časem sám někoho obdaroval. Tehdy se samozřejmě urazil, dárek uložil na půdu a už ho dál nepředával.
Víte-li, kolik má vesnice obyvatel a kdo je čím oblíbencem, spočítejte, po kolika letech skončí všechny dárky na půdách.
Vstupní soubor darky.in obsahuje dva řádky. Na prvním z nich je jediné celé číslo N : počet vesničanů (1 ≤ N ≤ 100000). Na druhém se nachází N čísel oddělených mezerami, i -té z nich říká, kdo je oblíbencem i -tého vesničana. (Vesničany číslujeme od 1 do N.)
Výstupní souubor darky.out nechť obsahuje jediné celé číslo: počet let, po nichž budou všechny dárky uloženy na půdách.
Příklad 1:
**darky.in** 7 3 5 4 2 1 7 6 **darky.out** 5
Příklad 2:
**darky.in** 6 5 3 4 2 3 2 **darky.out** 5
insert(int)
, která vloží na konec pole jeden prvek.print()
, která vypíše obsah pole..new
nové, data se do něj překopírovala a to staré se uvolnilo (pomocí delete[]
).operator[]
tak, abyste mohli přistupovat k jednotlivým prvkům.Napište program implementující „telefonní seznam“. Místo údajů o jednotlivých lidech v něm budeme evidovat pouze čísla (kladná celá). Program se bude ovládat ze standardního vstupu.
Na vstupní řádce vždycky bude kód operace a případně číslo, které bude parametrem operace. Operace budou tyto:
1 – vlož číslo do seznamu 2 – smaž číslo ze seznamu 4 – setřiď seznam (sestupně) 5 – vypiš 6 – konec
Za operacemi 1 a 2 bude nasledovat mezerou oddělené číslo, které se má vložit resp. vymazat.
Tedy například řádek „1 5“ bude znamenat „přidej do seznamu číslo 5“. Řádek „2 4“ znamená „smaž ze seznamu číslo 4“.
Při výpisu uvádějte každé číslo na zvláštní řádek. Pokud chceme mazat ze seznamu číslo, které v něm není, operaci ignorujte. (Ne aby program spadl!)
Příklad vstupu:1 100 1 300 1 200 4 5 6Příklad výstupu:
300 200 100
Můžete předpokládat, že operace 4 (setřiď seznam) je vždy volána před operací 5 (vypiš) všude tam, kde by různé implementace seznamu mohly dávat různé výsledky.
Poznámky:Pokud něčemu nerozumíte a chtěli byste to se mnou probrat, můžeme se potkat. Ideální čas je asi hned po konci cvičení, ovšem můžeme se domluvit i na jindy. Ale pondělí až středa jsem na Malostranském náměstí, takže byste museli za mnou.
V případě potřeby mi můžete napsat e-mail, ideálně na adresu: had+oop [at] kam.mff... (dál si to domyslíte; nápověda: koukněte na adresu této stránky)