.[ ČeskéHry.cz ].
Cvičení v C++
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
adragon



Založen: 23. 08. 2007
Příspěvky: 72
Bydliště: Praha

PříspěvekZaslal: 25. duben 2009, 21:36:01    Předmět: Cvičení v C++ Odpovědět s citátem

Přihodilo se mi, že vedu vysokoškolské cvičení z programovaní v C++. Jaké příklady si myslíte, že je vhodné demonstrovat. Poznamenávám, že se jedná o studenty z nichž někteří předtím měli jen Pascal a žádný jiný jazyk neznají.

Prozatím jsem předváděl vstupně výstupní proudy na zjednodušené verzi unixového příkazu tail. Pak jsem implementoval dynamický seznam spolu s iterátorem ve stylu STL. Nyní se snažím implementovat hashovou tabulku. A v budoucnu uvažují o třídě pro počítání s velmi velkými přirozenými čísly.

Pokud máte nápad na nějaké příklady, které nejsou čistě umělé a ilustrují použití některých zákoutí C++, tak se prosím podělte Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 25. duben 2009, 22:07:14    Předmět: Odpovědět s citátem

Pokud nemaji zaklady z C, tak bych doporucoval procvicit ukazatelovou aritmetiku a dalsi pametove perverznosti. Celkove cviceni na spravu pameti (+ treba naznaky, jak tomu pomoct v C++ pocitanim referenci) by jim taky mohlo prospet.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
adragon



Založen: 23. 08. 2007
Příspěvky: 72
Bydliště: Praha

PříspěvekZaslal: 25. duben 2009, 22:26:13    Předmět: Odpovědět s citátem

ondrasej:
meli predtim zaklady C, to jsem zapomnel napsat.

pod pocitanim referenci myslis ukazat automaticke ukazatele?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 25. duben 2009, 22:33:03    Předmět: Odpovědět s citátem

Jo, presne to.

Dalsi veci, co by se daly delat... trida na zlomky/komplexni cisla co se chova jako cislo. Urcite neco na dedicnost + vicenasobnou dedicnost.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 25. duben 2009, 22:53:50    Předmět: Odpovědět s citátem

Možná by nebylo na škodu zkusit implementovat vyjádření reálného čísla pomocí mantisy a exponentu se základem 10. (a*10^b) V nekritických výpočtech se tak dají docela dobře obejít některé nevýhody floatů. Práci s šablonama bych taky nepodceňoval. Zahrnul bych taky virtuální dědičnost (: virtual public třída).

Co tě přimělo cvičit C++? Mně bylo to samé nabízeno na FI MUNI, odmítl jsem. Wink
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
adragon



Založen: 23. 08. 2007
Příspěvky: 72
Bydliště: Praha

PříspěvekZaslal: 26. duben 2009, 01:53:25    Předmět: Odpovědět s citátem

Eosie napsal:

Co tě přimělo cvičit C++? Mně bylo to samé nabízeno na FI MUNI, odmítl jsem. Wink


Jako doktorand to mám povinné. Taky bych si raděj vybral jazyk, jehož specifikace se dá alespoň udržet v hlavě Smile. Nemůžu přijít na rozumný případ na dědičnost, jediné co mě napadá je hierarchie výjimek. Natož najít příklad, kde by se využila několikanásobná dědičnost (podle mě je to zlo Smile)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 26. duben 2009, 07:14:16    Předmět: Odpovědět s citátem

Tu vicenasobnou dedicnost... treba ukazat, jak ji pouzit na tvorbu interface, pripadne na pridedovani funkcnosti do objektu. Dalsi co me napada, je inteligentni trida pro retezce (ktera by umela treba i copy on write).
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 26. duben 2009, 11:03:08    Předmět: Odpovědět s citátem

Zase pozor, abys to neprekombinoval. Treba inteligentni tridou pro retezce se da zaplacnout klidne celej semestr Wink

Kdybys chtel, muzu ti poslat jeden priklad (zdrojaky), ktery jsme delali na skoleni. Tehdy mi to prislo zajimavy, ted uz presne nevim, co vse jsme v tom kodu vytvorili. Je tam class factory, pak jakysi framework inspirovany MFC - aplikace, do ktere se pridavali prvky, ktere komunikovaly pomoci udalosti. Pak je tam jeste klasicky priklad na polymorfismus. Tak treba by sis z toho neco nasel.
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Peta



Založen: 28. 07. 2007
Příspěvky: 154
Bydliště: V prvnim patre hned vedle koupelny.

PříspěvekZaslal: 26. duben 2009, 11:42:04    Předmět: Odpovědět s citátem

Zajímavé by mohlo být nějak šikovně implementovat třeba A* (nebo jiný prohledávací algoritmus)... modifikovatelná heuristika, genericita z hlediska uzlů a podobně. Tam bys určitě byl schopný naskládat spoustu OOP legrace Wink
_________________
Když je Ti smutno, otoč se tváří ke slunci a všechny stíny padnou za Tebe.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 26. duben 2009, 11:44:20    Předmět: Odpovědět s citátem

OndraSej napsal:
Dalsi co me napada, je inteligentni trida pro retezce (ktera by umela treba i copy on write).

Copy-on-write bych nedoporučoval, protože při více vláknech je to spíš nevýhoda a STL objekty (ani std::string) to nepoužívají ze stejného důvodu. Problémy s kopírováním a předáváním dobře řeší move semantics v C++0x (VC++ 2010).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 26. duben 2009, 11:47:53    Předmět: Odpovědět s citátem

Eosie> Cilem neni naimplementovat dokonalou tridu na retezce, ale aby si zkusili, ze to jde i jinak a uvedomili si, na co vsechno musi myslet.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
adragon



Založen: 23. 08. 2007
Příspěvky: 72
Bydliště: Praha

PříspěvekZaslal: 26. duben 2009, 12:11:09    Předmět: Odpovědět s citátem

OndraSej napsal:
Tu vicenasobnou dedicnost... treba ukazat, jak ji pouzit na tvorbu interface, pripadne na pridedovani funkcnosti do objektu. Dalsi co me napada, je inteligentni trida pro retezce (ktera by umela treba i copy on write).


Nejak moc nerozumim tomu vyuziti vicenasobne dedicnosti u interface. muzes to prosim vice rozvest? Na vetsinu komplikovanejsich komponent staci skladani. Dovedu si predstavit abstraktni tridy pro deklaraci rozhrani pro zpracovani udalosti, atd... Take si predstavit dedeni od vice rozhranich, ale nevidim duvod pro virtualni dedeni. (ve smyslu class B: public virtual A {}; )
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 26. duben 2009, 13:53:00    Předmět: Odpovědět s citátem

Nehledej v tom nic sloziteho Smile Myslel jsem ukazat souvislost ciste abstraktnich trid a interface v Jave a ze interface muzes pridedit bez toho, aby se stalo neco oskliveho (a na druhou stranu, ze jsou tu urcite odlisnosti v tom, co kdy muzes dedit).

Jinak vicenasobnou + virtualni dedicnost ma smysl pouzit treba kdyz pomoci dedicnosti spojujes dva objekty se spolecnym predkem ktery obsahuje napriklad citac referenci a u ktereho rozhodne chces, aby se ve vysledne tride vyskytoval jenom jednou.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 26. duben 2009, 15:02:17    Předmět: Odpovědět s citátem

adragon> Zkus si v C++ implementovat tuto hierarchickou strukturu:



Nahoře předek, dole potomek.
Trida: {Metody}

Object: AddRef(), Release()
Input: Read(buffer, size)
Output: Write(buffer, size)
UnknownStream: IsOpen(), Close()

(nápověda: bez virtuální dědičnosti to nejde)

Virtuální dědičnost se hodí třeba v tomto případě, tj. rozdělení tříd na úzce specializované třídy a jejich sjednocování (aniž by se nějaká třída v některém potomkovi vyskytla 2x).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
adragon



Založen: 23. 08. 2007
Příspěvky: 72
Bydliště: Praha

PříspěvekZaslal: 26. duben 2009, 16:11:18    Předmět: Odpovědět s citátem

EOSIE:
Ja technicky rozumim k cemu je to dobre, ale ani tenhle priklad me nepresvedcuje o tom, ze je vhodne to pouzivat. Chtel bych ilustrovat mechanismy C++ na realnych prikladech (uznavam tenhle diamond se velmi podoba napr. implementaci standardnich proudu), ale uz neni videt, proc byla zvolena takova forma abstrakce.

Napr. pokud vyhodim UnknownStream, velmi se mi to zjednodusi Smile stejne tak pocitani referenci bych nenechal na objektu, ale na objektu automatickeho ukazatele. Me se jevi takhle komplikovany design proste spatny, pokud neexistuji velmi vazne duvody pro jeho prosazovani.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna