Pohl Laci nehezebb feladatai
Mátrix
Készíts mátrix osztályt! Legyenek értelmezettek a következő műveletek: mátrixok összeadása, kivonása, szorzása, mátrix számmal szorzása, mátrix invertálása. Használj operátor átdefiniálást, ahol annak értelme van! Tedd az osztályt iostream kompatibilissé a << és >> operátorok megfelelő átdefiniálásával! További mátrixműveleteket is megvalósíthatsz.
Opcionális: megvalósíthatsz valós vagy komplex elemű mátrixot, illetve osztálysablonként is elkészítheted, így létrehozáskor dőlhet el a tárolt elemek típusa. Megvalósíthatod a kétdimenziós tömbök kezeléséhez hasonló indexelést (pl. m[i][j]) is: ehhez érdemes egy segédosztályt definiálni a mátrix osztályon belül.
Korlátlan valós
Készíts osztályt valós számok nagypontosságú tárolására! A C++ nyelvben használt double típus kb 15 értékes (tizedes)jegy tárolására alkalmas. Előfordulhat azonban, hogy ez nem elég. Az általad készített osztály esetén létrehozáskor lehessen megmondani, hogy mekkora pontossággal tárolja a számot az objektum. Két megközelítés közül választhatsz:
- Fixpontos számábrázolás: megadható, hogy a szám egész része ill. törtrésze hány számjegyből állhasson, és az osztály ennek megfelelően tárol (ízlés szerint akár két külön dinamikus tömbben).
- Lebegőpontos: az osztály mantisszát és karakterisztikát tárol. Ebből csak a mantissza esetén kötelező lehetővé tenni a tetszőleges pontosságot, azaz a mantissza dinamikus tárolását, a karakterisztika lehet egy int érték.
Mindkét esetben a dinamikus tömbök egész számokat tárolnak. Az osztálynak legyen megfelelő konstruktora/konverziós operátora a double típusra való oda-vissza konverzióra.
Kalandjáték
Szöveges kalandjáték. A tárgyak egy ősosztály, ennek leszármazottja a fegyverek. Minden tárgynak van súlya, a játékos teherbírása véges: ha a nála lévő tárgyak súlya túl nagy, nem vehet fel újabbat. Ha a játékos megsérül, a teherbírása is csökken. A fegyvereknek van ereje és gyorsasága, esetleg más tulajdonsága. Az egyik ellenfélnek az egyik, a másiknak a másik fegyver árt többet. Az ellenfél is egy osztály, mindegyik tudja a saját nevét, meg a harci paramétereit, esetleg azt, hogy követi-e a játékost, vagy az elmenekülhet előle. Az eddig leírtak csak ötletek, lehet bármit másképpen csinálni.
Sakk
Sakk. A figura ősosztályból származnak az egyes figurafajták. Minden figurának van léphet-e tagfüggvénye, amely egy új koordinátapárt kap a sakktáblán mint célpontot. Ha a figura léphet az adott pontra (szabályos a lépés), akkor logikai igazzal tér vissza. Természetesen csak akkor léphet egy mezőre a figura, ha ott nem áll saját színű figura. A feladat megvalósítható úgy, hogy két ember játszik egymás ellen, de úgy is, hogy az ember ellenfele a gép.
Töltés
Töltött részecskék dobozban. Készíts töltött részecske és doboz osztályt! A doboz töltött részecskéket tárol. Kezdetben véletlenszerűen elhelyezel valamennyi töltött részecskét a dobozban, mindnek 0 a sebessége. Minden részecskének van egy számol és egy frissít tagfüggvénye. A számol függvény a többi részecske helyzete és töltése alapján meghatározza a részecske új sebességvektorát. A frissít függvény egy delta t időt kap paraméterként, és kiszámítja a részecske új pozícióját az előzőleg számított sebességvektor alapján. A részecskék a konstruktoruk paramétereként kapják az őket tároló dobozt is, így férhetnek hozzá egymás adataihoz. Kezeld azt is valamilyen módon, ha egy részecske egy doboz oldalának ütközik.
QT
Grafikus felhasználói felülettel rendelkező program.
Egyszerűbben megtanulható, kényelmesebben kezelhető egy program, ha grafikus felhasználói felülettel rendelkezik. A Programozás tantárgyakban tanultak felhasználásával önállóan megtanulható ilyen programok készítése. Számos C vagy C++ nyelven készült ingyenes grafikus környezet elérhető. Az egyik legnépszerűbb ilyen környezet a Qt, amely a http://qt-project.org/ oldalról érhető el. A Qt C++-ban készült, és Windows mellett számos platformra elérhető, pl. Linux, Mac, de mobil platformokra is. A Qt-hoz saját fejlesztőkörnyezet is tartozik (Qt Creator), ebben egyszerűen összeállítható egy-egy ablak tartalma (menü, gombok, feliratok, szerkesztőmezők, stb.). Az interneten rengeteg anyag hozzáférhető a Qt megtanulásához: a fejlesztőkörnyezet oldalán minden komponens részletes, példákkal illusztrált leírása ott van; a YouTube-on számos videóban láthatjuk, hogyan lehet egy programot a nulláról elindulva megtervezni, stb.
A Qt nincs telepítve a HSzK gépeire, ezért célszerű saját notebookon bemutatni az ezzel készült programot. Aki mégis a HSzK gépén szeretné bemutatni, az a bemutatás előtt próbálja ki, hogy megy-e ott a program. Ahhoz, hogy az exe a Qt Creatoron kívül elinduljon, általában szükség van arra, hogy a Qt-hoz tartozó számos .dll fájlt is átmásoljunk.
Házi feladatnak megfelel, ha valaki készít egy egyablakos felhasználói felületet, melyen valamilyen egyszerűbb probléma megoldását mutatja be:
- Egy fizikai számítás: szerkesztőmezőkben adhatók meg a számítás paraméterei, pl. kezdősebesség, tömeg, töltés, stb. Check Boxszal vagy rádiógombokkal kiválaszthatók a számítás paraméterei. Bizonyos paraméterek (pl. szög) csúszkával (Slider) vagy forgógombbal (Dial) is megadhatók. Stb. A számítás gombnyomásra történik, az eredmény az ablak megfelelő helyén látszik.
- Szöveges kalandjáték: látszik a játékos aktuális állapota (pl. erő, sérülés, gyorsaság, stb.), a nála lévő tárgyak, fegyverek. Gombbal választhatunk, hogy melyik irányba menjen tovább. Ha valamelyik irányba nem mehet, az a gomb le van tiltva.
- Szimuláció grafikus megjelenítéssel: ez már túlmutat egy nagyházitól elvárható munkamennyiségen. Pl. egy golyó elindul a felhasználó által megadott irányba és sebességgel, és nekiütközhet egy másik golyónak. Rugalmasan ütköznek, és a golyók attól függően indulnak el különböző irányokba, hogy mely pontjuk ütközött. Az animáció megvalósítása több utánajárást igényel.