- Viskas tvarkinga ir teisinga ir efektyvu!
git clone https://github.com/VakarisL/OOP_2DuomenuApdorojimas.gitcd OOP_2DuomenuApdorojimascmake . -G "MinGW Makefiles"mingw32-make.\main
git clone https://github.com/VakarisL/OOP_2DuomenuApdorojimas.gitcd OOP_2DuomenuApdorojimascmake .make./main
Ar norite:
1- Irasyti pazymius ranka;
2- Generuoti atsitiktinius pazymius;
3- Skaityti pazymius is failo;
4- Generuoti 10/100/.../100000 irasu ir matuoti veikimo laika;
5- Generuoti 10/100/.../100000 irasu ir matuoti veikimo laika naudojant du papildomus konteinerius;
6- Generuoti 10/100/.../100000 irasu ir matuoti veikimo laika naudojant viena papildoma konteineri;
7- Iseiti...
Leidžia įvesti norimo studento/mokinio vardą ir pavardę, bet kokį kiekį jo gautų pažymių (norint sustoti, reikia įvesti -1) ir egzamino pažymį. Suskaičiuoja ir pateikia įvestus pažymius bei galutinius pažymius naudojant vidurkį ir medianą
Leidžia įvesti norimo studento/mokinio vardą ir pavardę, ir pasirinkti kokį kiekį jo gautų pažymių norėtumėme sugeneruoti pseudo-atsitiktiniu generavimo būdu. Suskaičiuoja ir pateikia sugeneruotus pažymius bei galutinius pažymius naudojant vidurkį ir medianą
Nuskaito informaciją iš pateikto failo Kursiokai.txt ir pateikia surušiuotą lentelę su galutiniais pažymiais
- (formatas: Pavarde Vardas Pažymys Pažymys Pažymys Pažymys Pažymys Egzaminas)
Generuoja test.txt failą su n įrašų ir matuoja programos veikimo laiką naudojant vector, list ir deque konteinerius
Veikimo principas:
- Nuskaitomas failas į operatyviąją atmintį
- Programa surūšiuoja visą konteinerį pagal surinktus galutinius pažymius
- Programa į naują failą surašo įrašus pažymių mažėjimo eile
- prie kiekvieno įrašo prirašoma pass/fail, priklausomai nuo to ar pažymiai mažesni už 6
- Sukuria failus TestOutputV.txt, TestOutputL.txt, TestOutputD.txt, kuriuose pateikiami galutiniai įrašai
5- Generuoti 10/100/.../100000 irasu ir matuoti veikimo laika naudojant du papildomus konteinerius; (v1.0)
Generuoja test.txt failą su n įrašų ir matuoja programos veikimo laiką naudojant vector, list ir deque konteinerius
Veikimo principas:
- Nuskaitomas failas į operatyviąją atmintį
- Programa suskirsto nuskaitytą konteinerį į du naujus pagal surinktus galutinius pažymius
- Programa surūšiuoja abu naujus konteinerius pagal surinktus galutinius pažymius
- Programa į naują failą surašo įrašus pažymių mažėjimo eile
- prie kiekvieno įrašo prirašoma pass/fail, priklausomai nuo to ar pažymiai mažesni už 6
- Sukuria failus TestOutputV.txt, TestOutputL.txt, TestOutputD.txt, kuriuose pateikiami galutiniai įrašai
6- Generuoti 10/100/.../100000 irasu ir matuoti veikimo laika naudojant viena papildoma konteineri; v(1.0)
Generuoja test.txt failą su n įrašų ir matuoja programos veikimo laiką naudojant vector, list ir deque konteinerius
Veikimo principas:
- Nuskaitomas failas į operatyviąją atmintį
- Programa sukuria naują konteinerį į kurį įkelia įrašus su mažais pažymiais
- Programa nuskaitytame konteineryje ištrina įrašus su mažais pažymiais
- Programa surūšiuoja abu naujus konteinerius pagal surinktus galutinius pažymius
- Programa į naują failą surašo įrašus pažymių mažėjimo eile
- prie kiekvieno įrašo prirašoma pass/fail, priklausomai nuo to ar pažymiai mažesni už 6
- Sukuria failus TestOutputV.txt, TestOutputL.txt, TestOutputD.txt, kuriuose pateikiami galutiniai įrašai
Programa užsidaro
| Generuotų įrašų kiekis | Vector | List | Deque |
|---|---|---|---|
| 10 | 0.06498s | 0.004012s | 0.003009s |
| 100 | 0.00702s | 0.009027s | 0.005014s |
| 1000 | 0.02306s | 0.021056s | 0.026056s |
| 10000 | 0.154425s | 0.143439s | 0.157458s |
| 100000 | 1.56439s | 1.65258s | 1.75514s |
| Generuotų įrašų kiekis | Vector | List | Deque |
|---|---|---|---|
| 10 | 0.005514s | 0.002493s | 0.004998s |
| 100 | 0.008021s | 0.00502s | 0.010026s |
| 1000 | 0.030104s | 0.020053s | 0.025568s |
| 10000 | 0.151402s | 0.155922s | 0.155737s |
| 100000 | 1.59442s | 1.4895s | 1.622s |
v1.0 metodu (be optimizacijos), naudojant vieną papildomą konteinerį, trinant įrašus iš orginalaus konteinerio
| Generuotų įrašų kiekis | Vector | List | Deque |
|---|---|---|---|
| 10 | 0.004512s | 0.002006s | 0.003008s |
| 100 | 0.005515s | 0.006516s | 0.006532s |
| 1000 | 0.055147s | 0.020592s | 0.0311s |
| 10000 | 3.86827s | 0.149931s | 1.31118s |
| 100000 | 370.434s | 1.47288s | 122.726s |
v1.0 metodu (optimizacuota), naudojant vieną papildomą konteinerį, trinant įrašus iš orginalaus konteinerio
| Generuotų įrašų kiekis | Vector | List | Deque |
|---|---|---|---|
| 10 | 0.005504s | 0.003008s | 0.006017s |
| 100 | 0.0059915s | 0.010512s | 0.007025s |
| 1000 | 0.027073s | 0.023061s | 0.029583s |
| 10000 | 0.153408s | 0.152944s | 0.166948s |
| 100000 | 1.58353s | 1.48761s | 1.56484s |
Matome, kad neoptimizavus trynimo metodo vector ir deque konteineriai labai stipriai sulėtėja, naudojant didelius duomenų failus. List konteineriui trynimo metodas nekenkia, nes jame nereikia aktyviai perskirstyti atminties vietos.
Tačiau optimizavus Vector ir Deque konteinerius naudojant remove_copy_if ir remove_if algoritmus, jų veiklos laikas stipriai nukrenta ir yra beveik palyginamas su List konteinerio veikimo laiku.
Visų trijų metodų darbo laikas (po optimizacijos) yra panašus, tačiau trynimo metodas (po optimizacijos) gali būti pranašesnis, jeigu norime naudoti mažiau kompiuterio operatyviosios atminties.