5 bites pakolt tömbök A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven az alább megadott témakörökre! Az elkészí¬tendő adatszerkezet osztálysablonként kerüljön megvalósí¬tásra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Egész számok alkalmazásával készítsen 5 bites pakolt egész tömböt! A megoldáshoz hozza létre az öt biten ábrázolt egész értékeket (0-31) tároló tömb osztályt. Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni mindenáron az operátorok átdefiniálásához! Amennyiben lehetséges használjon iterátort! A kialakítás során a tömb dinamikusan foglaljon memóriát nyújtózkodáshoz, illetve használat után szabadítsa fel a lefoglalt területeket. Tudjunk elemet hozzáadni és elvenni, bármely elemét ki tudjuk olvasni, át tudjuk írni. Valósítson meg néhány olyan tömbök közti műveletet, mint pl. másolás (=), résztömb kiolvasása [2:3] … C, Megvalósítás A funkciók egy részét operátor overload-dal lehet megvalósítani, másik részükhöz viszont célszerű egy iterátor osztály létrehozása. Lehetőség szerint ez egy Random Access iterátor legyen. Az iterátort lehessen előre hátra léptetni, egy vagy több lépéssel. Indirekcióval adja vissza a mutatott elem értékét. A tesztprogramban legyen tömb és iterátor létrehozása, tömb elemekkel való feltöltése, különböző hibalehetőségek lekezelése, és pl. egy egyszerű rendezés, mely az indexelés – kiolvasás – felülírást nagyon jól demonstrálja D,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat külön állományból olvassa be.
GF(p) mátrix osztály - alap mátrix osztály egy kis bonyolítással A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Készíts egy mátrix osztályt, melynek elemei GF(p) testbeli elemek (p egy prímszám, a műveletek mod p végezzük). •
p értéke legyen template paraméter.
•
Valósítsd meg a másoló konstruktort, az értékadást, és az egyenlőség vizsgálatot!
•
Valósítsd meg az összeadás, kivonás, szorzás műveleteket!
• Valósítsd meg a Gauss eliminációt az osztályodra! Ügyelj az "osztás" megvalósítására! Az osztás a multiplikatív inverz való szorzás. x multiplikatív inverze ynak, ha x * y = 1 mod p. Pl.: p = 7 esetén 5 multiplikatív inverze 3, mert 5 * 3 = 1 mod 7. Tehát ha 5 szeretnénk osztani egy elemet, akkor 3-mal kell megszorozni egyszerűen, majd venni a maradékát. • (Vállalkozó kedvűeknek) A multiplikatív inverz számításhoz használd a kiterjesztett Euklidészi algoritumust! •
Írj alkalmazást, amely bemutatja az osztály használatát!
Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
Elektronikus OHV A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Készítse el az Oktatók hallgatói véleményezését kezelő elektronikus rendszert. A rendszer többféle kérdőívet is tudjon kezelni, egy kérdőíven tetszőleges számú kérdés szerepelhet, a kérdésekhez pedig tetszőleges számú válasz tartozhat. Továbbá szükség esetén szöveges megjegyzést is lehessen fűzni az adatlaphoz. A rendszer az elkészített adatlapból a kitöltött válaszokhoz tartozó pontszámokat automatikusan összegzi és átlagolja. A szöveges megjegyzéseket változatlan formában tárolja. Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
File tömörítő program II. A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Készíts C++ programot, amely a feladat.be file tartalmát tömörítve átírja a feladat.ki fileba, mégpedig a következőképpen: Keresd meg az öt leggyakoribb legalább 3 betűs szót a file-ban, és ezek helyére csak egy rövid kódot rakj. A kód két karakteres szó, a leggyakoribb szó kódja !1 , a második leggyakoribbé !2 ,... míg az ötödik leggyakoribbé pedig !5 . A többi szót hagyd meg, ahogy volt. A kódolt file elején fel kell sorolni a kódok jelentését. A programnak dekódolnia is kell tudni. Így ha a file a ! karakterrel kezdődik, akkor be kell olvasni a kódokat és a hozzájuk tartozó szavakat, majd a szöveget visszaállítani az eredeti állapotába. A normál szövegben nem szerepel a ! karakter. Mindig van leglább 5 fajta minimum hárombetűs szó a szövegben, így más esetre nem kell felkészülni. A szavak maximum 22 karakteresek, és csak az angol ábécé kisbetűit tartalmazzák. A szöveg maximum 2000 szavas. A dekódolós teszteseteknél egyáltalán nem biztos, hogy a gyakorisági sorrend stimmel, de ez lényegtelen, mert dekódolásnál nem kell gyakoriságokat számolni. Bemenet A feladat.be file maximum 2000 db szót tartalmaz csupa szóközzel elválasztva egymástól, és az utolsó szó után nincs space, csak egy újsor karakter. Egyik szóban sem szerepel a ! karakter. Figyelem lehet, hogy a feladat.be file formája nem az előbb leírtaknak megfelelő, hanem éppen a Kimenet-nél leírt formájú. Ekkor nyilván a feladat.ki formája felel meg a Bemenet-nek. Kimenet A kimenet.be file első öt sora tartalmazza a kódolási információkat. Mindegyikben az első szó a kód ( pl.: !1 ), a második pedig az eredeti szó amit helyettesít. Közöttük egy space van és a második szó után újsor karakter. Ezután pedig jön a kódolt szöveg,
melyben nem kódolt szavak és kódok vegyesen követik egymást space-szel elválasztva, az utolsó szó után nincs space, csak egy újsor. Figyelem lehet, hogy a feladat.ki file formája nem a most leírtaknak megfelelő, hanem éppen a Bemenet-nél leírt formájú. Ekkor nyilván a feladat.be formája felel meg a Kimenet-nek.
Példa1 bemenet d acppva d pbsekhn pbsekhn lnm aqigu d lnm pbsekhn acppva pbsekhn fbsc acppva acppva ilbnjc fbsc ilbnjc lnm acppva
kimenet !1 acppva !2 pbsekhn !3 lnm !4 fbsc !5 ilbnjc d !1 d !2 !2 !3 aqigu d !3 !2 !1 !2 !4 !1 !1 !5 !4 !5 !3 !1
Példa2 bemenet !1 lsuagac !2 aphqk !3 fqojh !4 hpqsl !5 lbs f !4 !1 f bocdm !1 !3 !5 !1 !4 !5 f bocdm !1 bocdm !4 !2 !2 bocdm !5 kimenet f hpqsl lsuagac f bocdm lsuagac fqojh lbs lsuagac hpqsl lbs f bocdm lsuagac bocdm hpqsl aphqk aphqk bocdm lbs Példa3 bemenet ntersc ulctndktlmusjiorq erevsmtpcatpi ntersc ibqpcsmvdhbnovpopk ulctndktlmusjiorq
ii
ulctndktlmusjiorq
dbvd
ulctndktlmusjiorq
ntersc
ibqpcsmvdhbnovpopk
qgpbtmstnftnsgrs seqmdclsdkkuhvkkp qgpbtmstnftnsgrs seqmdclsdkkuhvkkp ulctndktlmusjiorq ajjjvjvevuodq ntersc qgpbtmstnftnsgrs vdtlrtsugmkbs dbvd dbvd hn erevsmtpcatpi ajjjvjvevuodq teilolf ulctndktlmusjiorq ii ii ulctndktlmusjiorq ulctndktlmusjiorq ntersc ibqpcsmvdhbnovpopk teilolf ajjjvjvevuodq ibqpcsmvdhbnovpopk dbvd ii ajjjvjvevuodq ntersc dbvd dhbgfkmbpa ibqpcsmvdhbnovpopk ulctndktlmusjiorq dbvd ajjjvjvevuodq ii seqmdclsdkkuhvkkp ntersc qgpbtmstnftnsgrs teilolf dbvd ibqpcsmvdhbnovpopk erevsmtpcatpi seqmdclsdkkuhvkkp dhbgfkmbpa ibqpcsmvdhbnovpopk ulctndktlmusjiorq teilolf teilolf hn dhbgfkmbpa teilolf erevsmtpcatpi ulctndktlmusjiorq vdtlrtsugmkbs erevsmtpcatpi ii ii qgpbtmstnftnsgrs ibqpcsmvdhbnovpopk dhbgfkmbpa vdtlrtsugmkbs teilolf teilolf ibqpcsmvdhbnovpopk teilolf vdtlrtsugmkbs qgpbtmstnftnsgrs ajjjvjvevuodq dbvd hn seqmdclsdkkuhvkkp qgpbtmstnftnsgrs dhbgfkmbpa ulctndktlmusjiorq ajjjvjvevuodq teilolf teilolf qgpbtmstnftnsgrs qgpbtmstnftnsgrs dbvd vdtlrtsugmkbs dbvd vdtlrtsugmkbs qgpbtmstnftnsgrs
dhbgfkmbpa
ntersc
dhbgfkmbpa
dhbgfkmbpa
kimenet !1 ulctndktlmusjiorq !2 teilolf !3 dbvd !4 qgpbtmstnftnsgrs !5 ibqpcsmvdhbnovpopk ntersc !1 erevsmtpcatpi ntersc !5 !1 ii !1 !3 !1 ntersc !5 !4 seqmdclsdkkuhvkkp !4 seqmdclsdkkuhvkkp !1 ajjjvjvevuodq ntersc !4 vdtlrtsugmkbs !3 !3 hn erevsmtpcatpi ajjjvjvevuodq !2 !1 ii ii !1 !1 ntersc !5 !2 ajjjvjvevuodq !5 !3 ii ajjjvjvevuodq ntersc !3 dhbgfkmbpa !5 !1 !3 ajjjvjvevuodq ii seqmdclsdkkuhvkkp ntersc !4 !2 !3 !5 erevsmtpcatpi seqmdclsdkkuhvkkp dhbgfkmbpa !5 !1 !2 !2 hn dhbgfkmbpa !2 erevsmtpcatpi !1 vdtlrtsugmkbs erevsmtpcatpi ii ii !4 !5 dhbgfkmbpa vdtlrtsugmkbs
!2 !2 !5 !2 vdtlrtsugmkbs !4 ajjjvjvevuodq !3 hn seqmdclsdkkuhvkkp !4 dhbgfkmbpa !1 ajjjvjvevuodq !2 !2 !4 !4 !3 vdtlrtsugmkbs !3 vdtlrtsugmkbs dhbgfkmbpa ntersc dhbgfkmbpa dhbgfkmbpa !4 Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
Geometriai alakzatok A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Készítsen programot, amellyel egyszerű metszési feladatok oldhatók meg koordinátageometriával. A program legyen képes két különböző pontjával megadott egyenest, középpontjával és sugarával megadott kört, másodfokú egyenlet formájában megadott parabolát tárolni, és ezek metszéspontjait kiszámolni. Figyeljen arra, hogy a felhasználó ne adhasson meg hibás adatokat, illetve a metszéspontok számításánál ne keletkezzen hiba (pl. negatív diszkrimináns). Legyen képes a program a bevitt objektumok adatait lemezen tárolni, és betölteni. (Tipp: három különböző típus, hat különféle metsző függvény. A metsző függvények két paramétere eltérő, pl. 2 egyenes vagy 1 egyenes 1 kör. Ez alapján a fordító tud kezelni több külön függvényt, ami mind metszes()-nek van elnevezve! Illetve, egy kör és egy egyenes metszéspontjainak száma lehet nulla, egy, kettő. Érdemes egy tömbbel visszatérnie a függvénynek, amelyik nulla, egy, vagy két elemet tartalmaz.) Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
Mátrix osztály A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Készítsen osztályt, amely tetszőleges méretű, double számokból álló mátrixot képes tárolni (két dimenziós tömb). Legyen képes egy ilyen mátrix objektum magát fájlba menteni, illetve fájlból betölteni. (A fájl formátuma szabadon meghatározható, pl. szövegfájl, első sorban szélesség SPACE magasság, következő sorokban pedig az egyes számok.) Definiáljon műveleteket a mátrixokon, amelyeket operátor túlterheléssel valósít meg; ezek legyenek az összeadás, kivonás, szorzás. Ha a két mátrixon az adott művelet nem végezhető el, akkor ezek dobjanak hibát. Definiáljon egy globális függvényt is, amelyik adott méretű egységmátrixot hoz létre. A tesztprogramban mutasson példát a műveletek használatára, és ellenőrizze a műveletek helyességét is a dokumentációban. (Tipp: a mátrix persze dobjon hibát, ha túlindexelik valamelyik irányba. Az indexeléshez nem praktikus a két dimenziós tömböknél szokott m[4][6], mert akkor a második indexnél nem lehetne ellenőrizni a túlcsordulást! Névvel nevezett függvényt, vagy átdefiniált () operátort érdemes használni.) Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
Metrón háromféle jeggyel lehet utazni A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
A Metrón háromféle Jeggyel lehet utazni. A Szakaszjegy maximum 3, a Szakasz-átszálló 5 megállóra jó (a kiindulásin kívül), a Normál Jegy az egész vonalon érvényes. Készítsen olyan szoftvert, mely nyilvántartja, hogy egy adott Utas milyen Jeggyel rendelkezik, és kirúgja a Metróból, ha a Jegye által megadott számú megállón túl is utazni szeretne. (Az egyszerűség érdekében átszállni nem lehet.) Készítse el a szükséges osztályokat, használjon öröklést, dinamikus kötést és dinamikus adatszerkezetet, valamint C++ állománykezelést (minden objektum legyen képes elmenteni ill. betölteni magát a paraméterként megadott fájlból)! Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
Órarend készítő program A,
Általános tudnivalók
Dolgozzon ki és dokumentáljon egymásba ágyazott vagy többszintű osztályhierarchiából és egyedekből álló megoldást C++ nyelven a B. pontban megadott témakörökre! Az elkészítendő adatszerkezet osztálysablonként kerüljön megvalósításra. A feladat megoldásában, ahol csak lehet, dinamikus memóriafoglalást használjon. Definiálja az osztályok adattagjait, értékadási műveleteit valamint a feladat megoldásához tartozó tagfüggvényeket. A struktúra mérete tetszőleges lehet. Amennyiben szükséges kerüljenek implementálásra a szerkezettel végezhető műveletek, a műveleti jelek átértelmezése, stb. Amennyiben mód van rá, a feladat megoldása közben használjon iterátort. B,
Feladat
Készítsen c++ órarend készítő programot, amely az alábbi bemenő adatokból előállítja a kimeneti órarendet. Bemenő adatok: - tantárgyak, azok heti óraszáma. - egy tárgyból egyszerre tartható maximális óraszám - napi maximális óraterhelés, - az egyes tárgyak lehetséges időtartományai (a tárgyhoz rendelt terem, illetve labor szabad.) Kimenő adatok: - a lehetséges heti órarendverziók megadása. (Ha ez a szám nagyobb, mint 10, akkor ezt a program a verziók kinyomtatása előtt jelezze). Specifikáljon néhány egyszerű feladatot, amiben fel tudja használni az elkészített adatszerkezetet! Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.
C,
Bemutatás
Az osztály funkcionalitásának bemutatására külön tesztmodult készítsen, amely bemutatja az egyes műveletek alkalmazását. A teszthez szükséges adatokat önállóan állítsa elő. Amennyiben lehetséges a programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon.