Repository created for objective programming using C++
Šioje versijoje uždavinys buvo sprendžiamas dviem budais:
- Cmasyvo būdu Cmasyvas.cpp faile - Studento duomenys saugomi struktūroje data
- Vektorių būdu Vektoriai.cpp faile - Studento duomenys saugomi data tipo vektoriuje
Programa turi 7 funkcijas: input, output, mediana, vidurkis, select, addmark, genrandom. Programa paklausia vartotojo kiek jis noretų sugeneruoti studentų, paprašo įvesti vardą, pavardę, pažymių kiekį(po įvedimo galime pasirinkti ar norime papildytį kiekį), pasirenkame kaip vesti rezultatą, medianos ar vidurkio metodu.
Į terminalą išvedami šie duomenys: Vardas, Pavardė, Galutinis rezultatas(Vidurkis/Mediana).
Šioje versijoje kodas yra atnaujintas, pridėtas skaitymas ir rašymas į failą.
Paleidus programa vartotojo paklausiama ar jis nori skaityti studentus iš failo:
Jei ne: vyksta praeitos versijos v0.1 skaitymas iš terminalo.
Jei taip: Nuskaitomas failas studentai.txt, į failą kursiokai.txt išvedamas studento vardas, pavardė, galutinis vidukis ir mediana.
Šioje versijoje atliktas praeitos versijos(v0.2) kodo refactoringas. Programa veikia tuo pačiu principu, tačiau yra išskaidyta į header, resource ir source failus.
- Pagrindinis failas: Source.cpp savyje laiko header failus ir pagrindinę main funkcija kurioje atliktas exception handling skaitymui ir rašymui į failą.
- Aplanke: Headers yra visi programai reikalingi header(.h) failai.
- Aplanke: Resources yra visi programai reikalingi papildomi (.cpp) faila kuriuose aprašytos funkcijos.
Šioje versijoje sukurtas failu generatorius ir matuojami programos vykdymo laikai. Vartotojas pasirenka generuoti failą automatiškai. Vartotojas pasirenka naudoti failų generatorių. Vartotojas iveda failo pavadinimą ir kiekį studentų kuriuos nori sugeneruoti.
Programos kodas yra isskaidytas į tris pagrindinius failus:
- Pagrindinis failas Source.cpp laiko (header) antraštes ir main funkciją.
- functions.cpp laiko savyje funkcijų aprašus.
- headers.h laiko savyje funkcijų antraštes
- Failo skaitymas vyksta iš ivesto failo. Pvz: studentai100000.txt.
- Failo išvedimas vyksta į du skirtingus failus: kietiakai.txt(studentams kurių galutinis balas >= 5.0) ir nuskriaustukai.txt (studentams kurių galutinis balas < 5.0).
Testavimui generuojami 5 atsitiktiniai studentų pažymiai. Programos laikas nustatomas šiems kriterijams:
- Failo kūrimui ir jo uždarymui.
- Duomenų nuskaitymui iš failo.
- Studentų rušiavimui į grupes.
- Surušiuotų studentų išvedimą į du failus.
- Visos programos laikas.
VECTOR
1000
Failo sudarymas uztruko: 0.0263304 s
Failo nuskaitymas uztruko: 0.0062851 s
Failo skirstymas i grupes uztruko: 0.0001799 s
kietiakai.txt surasymas uztruko: 0.0010151 s
nuskriaustukai.txt surasymas uztruko: 0.0052932 s
Visa programa uztruko 0.0450208 s
10000
Failo sudarymas uztruko: 0.395983 s
Failo nuskaitymas uztruko: 0.0949548 s
Failo skirstymas i grupes uztruko: 0.0021033 s
kietiakai.txt surasymas uztruko: 0.0077206 s
nuskriaustukai.txt surasymas uztruko: 0.0415379 s
Visa programa uztruko 0.571244 s
100000
Failo sudarymas uztruko: 2.92119 s
Failo nuskaitymas uztruko: 0.675066 s
Failo skirstymas i grupes uztruko: 0.0210955 s
kietiakai.txt surasymas uztruko: 0.0866178 s
nuskriaustukai.txt surasymas uztruko: 0.389649 s
Visa programa uztruko 4.16463 s
1000000
Failo sudarymas uztruko: 38.2789 s
Failo nuskaitymas uztruko: 13.4123 s
Failo skirstymas i grupes uztruko: 0.267259 s
kietiakai.txt surasymas uztruko: 0.937183 s
nuskriaustukai.txt surasymas uztruko: 4.50081 s
Visa programa uztruko 58.4967 s
Programa atnaujinta galima rinktis konteinerio tipą į kurį vartotojas nori išsaugoti studentą Palaidus programą:
- Ar norite skityti duomenis is failo? (y/n) y
- Ar norite ivesti faila? (y/n) y
- Koki konteinerio tipa norite naudoti? vector - 'v', deque - 'd', list - 'l': studentas išsaugomas į konteinerį tą kurio pirmąją raidę iveda.
Konteinerių spartos lyginimas:
| 1000 | 10000 | 100000 | 1000000 | 10000000 | |
|---|---|---|---|---|---|
| VECTOR NUSKAITYMAS | 0.0133934 s | 0.0324202 s | 0.343198 s | 3.17078 s | 29.5853 s |
| VECTOR RŪŠIAVIMAS | 0.0001265 s | 0.0348088 s | 0.0198464 s | 0.202764 s | 4.85033 s |
| DEQUE NUSKAITYMAS | 0.0173607 s | 0.0612086 s | 0.329132 s | 3.07914 s | 30.1778 s |
| DEQUE RŪŠIAVIMAS | 0.0001259 s | 0.0008603 s | 0.0108355 s | 0.120002 s | 2.38933 s |
| LIST NUSKAITYMAS | 0.051306 s | 0.0343497 s | 0.370915 s | 3.5146 s | 30.9815 s |
| LIST RŪŠIAVIMAS | 0.0001457 s | 0.0013439 s | 0.0327031 s | 0.135128 s | 3.52304 s |
Parametrai:
- CPU: Intel Core i5-10300H 2.5 GHz
- SSD: 476GB SAMSUNG MZVLQ512HALU
- RAM: 8GB 2933MHz
Reikia parsisiųsti mingw32 arba chocolatey, arba bet kokią komandų eilutės paketų tvarkyklę leidžiančią naudoti Makefile. Parsisiųskite v1.0 release failus ir išsaugokite juos faile. Tą padarius nueikite į Command Prompt arba PowerShell, nueikite į vietą kurioje išsaugoti failai, parašykite make, kai sukompiliuos executable failą, iveskite ./run ir programa bus paleista.
-
Ar norite skityti duomenis is failo? (y/n) n
- Jei norite kad programa isvestu vidurki iveskite 'y', jeigu mediana, iveskite 'n': y arba n
- Iveskite studentu skaiciu: (betkoks sveikas skaicius)
- Iveskite studento varda: (betkoks string tipo kintamasis)
- Iveskite studento pavarde: (betkoks string tipo kintamasis)
- Iveskite pazymiu kieki: (sveikas skaicius)
- Jei noretumete ivesti dar pazymiu iveskite 'y', jei ne 'n': n
- Isvedama studento vardas, pavarde ir galutinis rezultaras
-
Ar norite skityti duomenis is failo? (y/n) y
- Ar norite ivesti faila? (y/n) n - skaito is studentai.txt failo, y
- Koki konteinerio tipa norite naudoti? vector - 'v', deque - 'd', list - 'l': (konteinerio tipas)
- Kokia skirstymo strategija norite naudoti? 1 - 'y', 2 - 'n': (skirstymo strategija)
- Iveskite studentu kieki: (sveikas skaicius)
- (Vidurkis/Mediana) - (y/n)
Sukuriamas failas (studentai + studentu kiekis) į jį sugeneruojami vardai, pavardės, pažymiai, vėliau yra nuskaitomas failas, suskaiciuojamas galutinis vidurkis arba mediana, suskirtomas pasirinktas konteineris pagal skirstymo būdą, surikiuojami pagal vardą ir išvedami į 2 skirtingus failus kietiakai.txt studentai kurių vidurkis penki ir daugiau, ir nuskriaustukai.txt kurių vidurkis mažesnis nei penki.
| 1000 | 10000 | 100000 | 1000000 | 10000000 | |
|---|---|---|---|---|---|
| VECTOR RŪŠIAVIMAS | 0.0001401 s | 0.0015573 s | 0.0247494 s | 0.259231 s | 3.27844 s |
| DEQUE RŪŠIAVIMAS | 0.0001259 s | 0.0008211 s | 0.134224 s | 0.134224 s | 3.06859 s |
| LIST RŪŠIAVIMAS | 0.0010098 s | 0.0014011 s | 0.228691 s | 0.228691 s | 2.26937 s |
| 1000 | 10000 | 100000 | 1000000 | 10000000 | |
|---|---|---|---|---|---|
| VECTOR RŪŠIAVIMAS | 0.0001413 s | 0.0008275 s | 0.0175047 s | 0.222046 s | 2.75799 s |
| DEQUE RŪŠIAVIMAS | 0.0001771 s | 0.001222 s | 0.0185876 s | 0.190788 s | 2.16689 s |
| LIST RŪŠIAVIMAS | 0.0001098 s | 0.000711 s | 0.0170997 s | 0.18972 s | 2.08854 s |
| 1000 | 10000 | 100000 | 1000000 | 10000000 | |
|---|---|---|---|---|---|
| VECTOR | 0.0797068 s | 0.083429 s | 0.54483 s | 5.3933 s | 54.824 s |
| DEQUE | 0.0978551 s | 0.087919 s | 0.55718 s | 5.9456 s | 59.228 s |
| LIST | 0.0637336 s | 0.0711814 s | 0.5301 s | 5.6935 s | 52.579 s |
- Greičiausias iš visų testuotų struktūros tipas yra std::list
Parametrai:
- CPU: Intel Core i5-10300H 2.5 GHz
- SSD: 476GB SAMSUNG MZVLQ512HALU
- RAM: 8GB 2933MHz