Skip to content

Program that generates and counts grades for a given amount of students, based on different factors

Notifications You must be signed in to change notification settings

roxerj/studentGrader

Repository files navigation

Naudojimo instrukcija: parsisiuntus failus įveskite "make" į komandinę eilutę, tada paleiskite exe failą. Sekite instrukcijas konsolėje.
įvedus "make test" bus sukurtas test.exe failas, jį paleidus galima patikrinti Rule of 5 metodus, implementuotus programoje.
įvedus "make clean" bus ištrinti visi exe failai.
įvedus "make cleanresult" bus ištrinti malaciai.txt ir vargsai.txt failai.

v1.5

v1.5 atnaujinimai: sukurta abstrakti klasė Zmogus, klasė studentas yra išvesta iš Zmogus.
Sukurtas virtualus destruktorius Zmogus klasei, taip pati pridėta virtuali funkcija getVardas.

v1.2

v1.2 atnaujinimai: šioje versijoje studentas struktūra pilnai pakeista į studentas klasę. Implementuota 5-ių taisyklė - sukurtas copy constructor, copy assignment operator, move constructor, move assignment operator, destruktorius. Programoje daug kur pakeistas kodas, dirbant su studentas objektais, naudojant OOP praktiką.
Funkcijoje "nuskaitymas" push_back metodas pakeistas į emplace_back metodą, taip sutaupau atminties.
Šioje versijoje panaudotas perkrautas << operatorius studentas klasei, eilutė std::cout << studentas konsolėje išves studento vardą, pavardę ir galutinį pažymį.
Programa dabar veikia sparčiau, ir užima mažiau atminties.

Testavimas atliktas naudojant vector konteinerį.

VECTOR 100k 1M 10M
Nuskaitymas 0.193s 1.423s 14.176s
Rūšiavimas 0.007s 0.059s 0.64s
Vargsai išvedimas 0.051s 0.335s 3.521s
Malaciai išvedimas 0.071s 0.484s 5.788s
Viso 0.326s 2.307s 24.152s

v1.1

v1.1 atnaujinimai: ankstesnėse versijose naudojau struct studentas, dabar naudoju class studentas. Programa veikia truputį sparčiau, bet nežymiai.

Naudojant vector:

100k 1M 10M
struct 0.51s 4.89s 32.57s
class 0.49s 4.36s 27.33s

Optimizavimo flag'ų testavimas (10M):

laikas(s) exe failo užimama vieta
- 29.8815 1059KB
-O1 26.2167 1302KB
-O2 25.8021 1343KB
-O3 25.3347 1457KB

v1.0

v1.0 atnaujinimai: Skaidydamas studentai konteinerį į malaciai ir vargsai praeitose versijose sukurdavau du naujus konteinerius malaciai ir vargsai, kopijuodamas studento objektą į vieną arba kitą konteinerį, tokia programos realizacija yra neefektyvi atminties atžvilgiu. v1.0 versijoje studentai konteinerį skaidau naudodamas tik vieną naują konteinerį vargsai, perkeldamas studento objektą iš studentai į vargsai, tad konteineryje studentai lieka "malaciai". Sukurtas makefile, parašius komandinę eilutę "make", programa yra sukompiliuojama ir paruošiamas exe failas.

Mano kompiuterio specifikacijos : 16gb RAM, CPU - AMD Ryzen 5 4600H, GPU - Nvidia Geforce GTX 1650 TI

Programos veikimo principas:

Programa paklausia vartotojo, ar generuoti studentų failą, ar atlikti veiksmus su jau esamu failu. Jei pasirenkama generuoti failą, vartotojo klausiama, kiek studentų bus faile. Prieš atliekant veiksmus su failu, vartotojo klausiama, kurį konteinerį naudoti veiksmams su failu. (Vector, list, deque) Atliekami veiksmai su pasirinktu failu:

  1. Nuskaitomi duomenys, suskaičiuojami studentų galutiniai pažymiai
  2. Studentai išskaidomi į "malacius" ir "vargsus" naudojant studentai ir vargsai konteinerius: studentai konteineryje lieka studentai, kurių gal. pažymys >=5, o vargsai konteineryje atsiranda studentai, kurių gal. pažymys <5, jie ištrinami iš studentai konteinerio.
  3. Suformatuojami duomenys iš vargsai konteinerio, rezultatas išvedamas į "vargsai.txt"
  4. Suformatuojami duomenys iš studentai konteinerio, rezultatas išvedamas į "malaciai.txt"

Matome, kad atnaujintoje programos versijoje programa atlieka darbą truputį sparčiau, bet nedaug. Su 10m studentų programa veikia gal 5sec trumpiau nei praeitoje versijoje.

Naudojant vector:

VECTOR 1k 10k 100k 1M 10M
Nuskaitymas 0.004411 0.034408 0.290819 2.891 20.6048
Rūšiavimas 0.000471 0.005166 0.037893 0.233474 1.62612
Vargsai išvedimas 0.026193 0.054142 0.074769 0.718508 4.06602
Malaciai išvedimas 0.002301 0.073061 0.104735 1.04496 6.24776
Viso 0.03805 0.171577 0.51298 4.89566 32.5722
Generavimas 0.001879 0.020029 0.17398 1.72649 12.9375

Naudojant list:

LIST 1k 10k 100k 1M 10M
Nuskaitymas 0.002255 0.020398 0.204996 1.76657 18.8843
Rūšiavimas 0.000178 0.001654 0.019641 0.180727 0.30544
Vargsai išvedimas 0.020804 0.004767 0.043911 0.450671 3.2987
Malaciai išvedimas 0.033024 0.006826 0.063624 0.627831 4.66719
Viso 0.03805 0.037109 0.33603 2.73121 27.981

Naudojant deque:

DEQUE 1k 10k 100k 1M 10M
Nuskaitymas 0.002619 0.019049 0.201048 1.94471 18.5413
Rūšiavimas 0.000167 0.001469 0.015256 0.130697 0.49566
Vargsai išvedimas 0.019543 0.00548 0.039213 0.439459 2.97396
Malaciai išvedimas 0.028777 0.007408 0.056731 0.661483 4.49107
Viso 0.054019 0.036882 0.316761 3.18256 26.532

v0.5

v0.5 atnaujinimai: Dabar programa leidžia pasirinkti konteinerį, su kuriuo bus atliekami veiksmai - vector, list arba deque. Naudoju šablonines funkcijas, kurios veikia su bet kokiu naudojamu konteineriu.

Mano kompiuterio specifikacijos : 16gb RAM, CPU - AMD Ryzen 5 4600H, GPU - Nvidia Geforce GTX 1650 TI

Programos veikimo principas:

Programa paklausia vartotojo, ar generuoti studentų failą, ar atlikti veiksmus su jau esamu failu. Jei pasirenkama generuoti failą, vartotojo klausiama, kiek studentų bus faile. Prieš atliekant veiksmus su failu, vartotojo klausiama, kurį konteinerį naudoti veiksmams su failu. (Vector, list, deque) Atliekami veiksmai su pasirinktu failu:

  1. Nuskaitomi duomenys, suskaičiuojami studentų galutiniai pažymiai
  2. Studentai išrūšiuojami į du naujus konteinerius: malaciai, jei galutinis pažymis >=5, vargsai, jei pažymys <5
  3. Suformatuojami duomenys iš vargsai konteinerio, rezultatas išvedamas į "vargsai.txt"
  4. Suformatuojami duomenys iš malaciai konteinerio, rezultatas išvedamas į "malaciai.txt"

Matome, kad naudojant list arba deque vietoj vector, programos veikimo sparta beveik nesikeičia.

Naudojant list:

LIST 1k 10k 100k 1M 10M
Nuskaitymas 0.002255 0.020398 0.204996 1.76657 19.2724
Rūšiavimas 0.000178 0.001654 0.019641 0.180727 1.84553
Vargsai išvedimas 0.020804 0.004767 0.043911 0.450671 4.40405
Malaciai išvedimas 0.033024 0.006826 0.063624 0.627831 6.41769
Viso 0.03805 0.037109 0.33603 3.03121 31.981
Generavimas 0.001879 0.020029 0.17398 1.72649 12.9375

Naudojant deque:

DEQUE 1k 10k 100k 1M 10M
Nuskaitymas 0.002619 0.019049 0.201048 1.94471 19.258
Rūšiavimas 0.000167 0.001469 0.015256 0.130697 1.60812
Vargsai išvedimas 0.019543 0.00548 0.039213 0.439459 4.32674
Malaciai išvedimas 0.028777 0.007408 0.056731 0.661483 6.0704
Viso 0.054019 0.036882 0.316761 3.18256 31.2998
Generavimas 0.001879 0.020029 0.17398 1.72649 12.9375

v0.4

v0.4 atnaujinimai: programa veikia zymiai sparciau nei v0.3, studentu vektoriu isrusiuoju naudodamas du naujus vektorius - malaciai ir vargsai. Visos programos laikas matuojamas atskirai nuo failo generavimo laiko. Mano kompiuterio specifikacijos : 16gb RAM, CPU - AMD Ryzen 5 4600H, GPU - Nvidia Geforce GTX 1650 TI

Programos veikimo principas:

Programa paklausia vartotojo, ar generuoti studentų failą, ar atlikti veiksmus su jau esamu failu. Jei pasirenkama generuoti failą, vartotojo klausiama, kiek studentų bus faile. Atliekami veiksmai su pasirinktu failu:

  1. Nuskaitomi duomenys, suskaičiuojami studentų galutiniai pažymiai
  2. Studentai išrūšiuojami į du naujus vektorius: malaciai, jei galutinis pažymis >=5, vargsai, jei pažymys <5
  3. Suformatuojami duomenys iš vargsai vektoriaus, rezultatas išvedamas į "vargsai.txt"
  4. Suformatuojami duomenys iš malaciai vektoriaus, rezultatas išvedamas į "malaciai.txt"
1k 10k 100k 1M 10M
Nuskaitymas 0.004411 0.034408 0.290819 2.891 20.6048
Rūšiavimas 0.000471 0.005166 0.037893 0.233474 1.62612
Vargsai išvedimas 0.026193 0.054142 0.074769 0.718508 4.06602
Malaciai išvedimas 0.002301 0.073061 0.104735 1.04496 6.24776
Viso 0.03805 0.171577 0.51298 4.89566 32.5722
Generavimas 0.001879 0.020029 0.17398 1.72649 12.9375

About

Program that generates and counts grades for a given amount of students, based on different factors

Resources

Stars

Watchers

Forks

Packages

No packages published