Commit aa87218a by Szeberényi Imre

Merge branch 'zoli' into 'master'

javitasok

See merge request !1
parents 0674b6d5 a9e2b17a
...@@ -25,14 +25,14 @@ A_2 | A_2->A_1 | A_2->A_2 | ... | A_2->A_N | ...@@ -25,14 +25,14 @@ A_2 | A_2->A_1 | A_2->A_2 | ... | A_2->A_N |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
A_N | A_N->A_1 | A_N->A_2 | ... | A_N->A_N | A_N | A_N->A_1 | A_N->A_2 | ... | A_N->A_N |
Az első sor (A_1-hez tartozó) a mátrixban az első állapotból induló átmeneteket mutatja az előző felsorolás sorrendjében, mely bemeneti bázis esetén mely állapotba kerül onnan az automata. A mátrix 2. (A_2) sorában és 3. (A_3) oszlopában találhatóak azon bázisok, melyek hatására a 2. állapotból a 3.-ba kell kerüljön az automata... A celábban a bázisok a rövidítésekkel vannak feltüntetve elválasztó jelek nélkül (pl. CAT), a mátrix soraiban több és eltérő db szóköz gondoskodik a szeparálásról. Ha valahol nincs átmenet, ott nulla ('0') szerepel. Az első sor (A_1-hez tartozó) a mátrixban az első állapotból induló átmeneteket mutatja az előző felsorolás sorrendjében, mely bemeneti bázis esetén mely állapotba kerül onnan az automata. A mátrix 2. (A_2) sorában és 3. (A_3) oszlopában találhatóak azon bázisok, melyek hatására a 2. állapotból a 3.-ba kell kerüljön az automata... A celábban a bázisok a rövidítésekkel vannak feltüntetve elválasztó jelek nélkül (pl. CAT), a mátrix soraiban több és eltérő db szóköz gondoskodik a szeparálásról. Ha valahol nincs átmenet, ott nulla (`'0'`) szerepel.
Beolvasáshoz ajánlott a `std::ifstream` használata, hasonlóan használható, mint az `std::cin`, azaz `>>`-val történő beolvaásákor eldobja a felesleges whitespace-eket. Beolvasáshoz ajánlott a `std::ifstream` használata, hasonlóan használható, mint az `std::cin`, azaz `>>`-val történő beolvasáskor eldobja a felesleges whitespace-eket.
Minden egyes sorban pontosan egyszer fordulhatnak elő valahol az ACGT betűk, így nem lehet olyan, hogy egy állapotból több állapotba is tudnánk menni egy bázis hatására vagy nem tudnánk eldönteni hova kellene lépni (= az automata determinisztikus és teljes). Minden egyes sorban pontosan egyszer fordulhatnak elő valahol az ACGT betűk, így nem lehet olyan, hogy egy állapotból több állapotba is tudnánk menni egy bázis hatására vagy nem tudnánk eldönteni hova kellene lépni (= az automata determinisztikus és teljes).
## Skeleton program ## Skeleton program
A beadáshoz készetettem egy tesztprogramot (*genetika_teszt.cpp*) és az `allapogep.h` fájlban megadtam, hogy az **Allapotgep** osztály miyen publikus interfésszel rendelkezik: A beadáshoz készetettem egy tesztprogramot (*genetika_teszt.cpp*) és az `allapotgep.h` fájlban megadtam, hogy az **Allapotgep** osztály miyen publikus interfésszel rendelkezik:
```c++ ```c++
// A bázisokhoz tartozó felsorolás típus. // A bázisokhoz tartozó felsorolás típus.
enum Bazis { enum Bazis {
...@@ -51,17 +51,17 @@ public: ...@@ -51,17 +51,17 @@ public:
//beérkező bázis hatására, mi történjen //beérkező bázis hatására, mi történjen
void atmenet(Bazis b); void atmenet(Bazis b);
//a lánc feldolgozás után elfogadunk-e, nem áll vissza alaphelyzetbe //a lánc feldolgozás után elfogadunk-e, nem áll vissza alaphelyzetbe
bool feldolgoz(Bazis *b, int n); bool feldolgoz(const Bazis *b, int n);
//visszaállítás a kezdő állapotba //visszaállítás a kezdő állapotba
void alaphelyzet(); void alaphelyzet();
}; };
``` ```
Két globális függvényt is készítettem az enum kezeléséhez, ami a `char -> Bazis` és `Bazis -> char` konverziót segíti elő. Két globális függvényt is készítettem az enum kezeléséhez, ami a `char -> Bazis` és `Bazis -> char` konverziót segíti elő.
A megoldáshoz az **Allapotgep** belső logikája, mezői szabadon megváltoztathatóak, a publikus interfész azonban nem, és nem is bővíthető. Szükség esetén új osztályok szabadon felvehetők az`allapothep.h` fájlba. (Tipikusan legalább még 1-2 osztály felvétele szükséges a szép megoldáshoz.) Az osztályok tagfüggvényeit az `allapotgep.cpp` fájlban kell megvalósítani. A megoldáshoz az **Allapotgep** belső logikája, mezői szabadon megváltoztathatóak, a publikus interfész azonban nem, és nem is bővíthető. Szükség esetén új osztályok szabadon felvehetők az`allapotgep.h` fájlba. (Tipikusan legalább még 1-2 osztály felvétele szükséges a szép megoldáshoz.) Az osztályok tagfüggvényeit az `allapotgep.cpp` fájlban kell megvalósítani.
A `konfigural(const char* fajlnev)` függvény kivételt dob, ha a fájlt nem lehet megnyitni, a kivétel során a neptun kódodat kell eldobni. A konfiguráció minden esetben a fenti leírásnak megfelelő, más hibakezelést nem kell megvalósítani. A `konfigural(const char* fajlnev)` függvény kivételt dob, ha a fájlt nem lehet megnyitni, a kivétel során a **neptun** kódodat kell eldobni. A konfiguráció minden esetben a fenti leírásnak megfelelő, más hibakezelést nem kell megvalósítani.
## Példa ## Példa
A konfigurációs fájl: A konfigurációs fájl:
...@@ -76,11 +76,13 @@ Ezen fájlhoz tartozó állapotgép diagramja: ...@@ -76,11 +76,13 @@ Ezen fájlhoz tartozó állapotgép diagramja:
![állapotgép](statechart.png) ![állapotgép](statechart.png)
Példa bemenet: `{Adenin, Guanin, Timin, Citozin, Citozin, Timin}`, ekkor elfogadunk. Ezen bemenet végeztével az `aktualisallapot()` függvény `ParosTimin` karakterláncot adja vissza. Példa bemenet: `{Adenin, Guanin, Timin, Citozin, Citozin, Timin}`, ekkor elfogadunk. Ezen bemenet végeztével az `aktualisallapot()` függvény `"ParosTimin"` karakterláncot adja vissza.
Vizsgáld meg az `implikacio.txt` fájlt is! Rajzold fel a hozzá tartozó diagramot, ha szükséges.
## Megoldás ## Megoldás
A Git tárolóból letölthető [https://git.ik.bme.hu/Prog2/szorgalmi_feladatok/genetika](https://git.ik.bme.hu/Prog2/szorgalmi_feladatok/genetika) A Git tárolóból letölthető [https://git.ik.bme.hu/Prog2/szorgalmi_feladatok/genetika](https://git.ik.bme.hu/Prog2/szorgalmi_feladatok/genetika)
fájlok felhasználásával hozz létre a lokális fejlesztőkörnyezetedben egy C++ projektet! Ehhez felhasználható a *Makefile*, amiben megtalálhatók a fordítási opciók. Tervezz, fejlessz, tesztelj, majd töltsd fel a megoldását a Jporta rendszerbe! fájlok felhasználásával hozz létre a lokális fejlesztőkörnyezetedben egy C++ projektet! Ehhez felhasználható a *Makefile*, amiben megtalálhatók a fordítási opciók. Tervezz, fejlessz, tesztelj, majd töltsd fel a megoldását a Jporta rendszerbe!
## Beadás ## Beadás
Beadandó az `allapotgep.cpp` és `allapotgep.h` fajl. A genetika_teszt.cpp-t nem kell beadni, az a teszteléshez van. A Jporta nagyon hasonló programal fog tesztelni. Beadandó az `allapotgep.cpp` és `allapotgep.h` fajl. A `genetika_teszt.cpp`-t nem kell beadni, az a teszteléshez van. A Jporta nagyon hasonló programal fog tesztelni.
\ No newline at end of file \ No newline at end of file
...@@ -47,7 +47,7 @@ public: ...@@ -47,7 +47,7 @@ public:
void atmenet(Bazis b); void atmenet(Bazis b);
//a lánc feldolgozás után elfogadunk-e //a lánc feldolgozás után elfogadunk-e
bool feldolgoz(Bazis *b, int n); bool feldolgoz(const Bazis *b, int n);
//konfig fájl beolvasása //konfig fájl beolvasása
void konfigural(const char* fajlnev); void konfigural(const char* fajlnev);
......
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="genetika" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/genetika" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add option="-DMEMTRACE" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/genetika" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
<Add option="-std=c++11" />
<Add option="-Wall" />
<Add option="-Werror" />
</Compiler>
<Unit filename="allapotgep.cpp" />
<Unit filename="allapotgep.h" />
<Unit filename="genetika_teszt.cpp" />
<Unit filename="gtest_lite.h" />
<Unit filename="memtrace.cpp" />
<Unit filename="memtrace.h" />
<Extensions />
</Project>
</CodeBlocks_project_file>
...@@ -80,7 +80,7 @@ int main() { ...@@ -80,7 +80,7 @@ int main() {
/// Itt a vége /// Itt a vége
if (ELKESZULT < 3) if (ELKESZULT < 3)
ADD_FAILURE() << "\nNem futott minden testeset!" << std::endl; ADD_FAILURE() << "\nNem futott minden teszteset!" << std::endl;
GTEND(std::cerr); // Csak C(J)PORTA működéséhez kell GTEND(std::cerr); // Csak C(J)PORTA működéséhez kell
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment