Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <algorithm>
- #include <random>
- #include <sstream>
- #include <random>
- #include <string>
- #include <fstream>
- #include <cmath>
- using namespace std;
- struct studentas {
- string firstName;
- string secondName;
- vector<double> nd;
- double visiNd = 0;
- double egz = 0;
- void readFile (int &index, vector<studentas> &s);
- //Storing information
- void data() {
- cout << "Studento vardas: ";
- cin >> firstName;
- cout << "\n";
- cout << "Studento pavarde: ";
- cin >> secondName;
- cout << "\n";
- cout << "Ar noresite sugeneruoti random pazymius ir egzamino balus? Random - spauskite 1. Ivesties budu - spauskite 0: \n";
- int ivestiesRadom;
- cin >> ivestiesRadom;
- while (cin.fail()) {
- cout << "Blogas irasymas, bandykite dar karta: \n";
- cin.clear();
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- cin >> ivestiesRadom;
- }
- if (b == 1) {
- randomNumbers();
- }
- else {
- numberInput();
- cout << "Iveskite studento egzamino rezultata: \n";
- cin >> egz;
- }
- }
- //Generuoja random skaicius
- void randomNumbers() {
- cout << "Iveskite kiek norite sugeneruoti skaiciu!: \n";
- cin >> visiNd;
- while (cin.fail()){
- cout << "Blogas irasymas, bandykite dar karta: \n";
- cin.clear();
- cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- cin >> visiNd;
- }
- nd.reserve(visiNd);
- const unsigned int seed = time(0);
- mt19937_64 rng(seed);
- uniform_real_distribution<double> random(1, 10);
- for (int i = 0; i<visiNd; i++) {
- nd.push_back(static_cast<int>(random(rng)));
- }
- egz = static_cast<int>(random(rng));
- }
- //Rankiniu budu turi suvest nd ir egz
- void numberInput() {
- cout << "Iveskit namu darbu pazymius, norint pabaigti, iveskite ne skaiciu! \n";
- int skc;
- while (cin >> skc) {
- if (!(skc >= 1 && skc <= 10)){
- cout << "Pazymys turi buti tarp 1 ir 10! \n";
- continue;
- }
- nd.push_back(skc);
- }
- visiNd = nd.size();
- cin.clear();
- cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
- }
- //Vidutinio skaiciavimas
- double vid () {
- double vidutinis = 0;
- for (auto &viens : nd) {
- vidutinis += viens;
- }
- vidutinis /= nd.size();
- return vidutinis;
- }
- //Medianos skaiciavimas
- double median (vector<double>set) {
- sort(set.begin(), set.end());
- return (set.size()% 2 == 0 ? (set[set.size()/2] + set[(set.size() / 2 ) - 1]) / 2 : set[set.size() / 2]);
- }
- double galutinioM() {
- return 0.4 * median(nd) + 0.6 * egz;
- }
- double galutinioV() {
- return 0.4 * vid() + 0.6 * egz;
- }
- };
- void display(vector<studentas> s, int index);
- void readFile (int &index, vector<studentas> &s);
- int main()
- {
- vector<studentas> s;
- cout << "Ar norite nuskaityti studentus is failo, ar ivesti pats? 1 - jei pats, 0 - jei is failo\n";
- int pasirinkimas;
- cin >> pasirinkimas;
- int index = 0;
- if (pasirinkimas == 0) {
- readFile(index, s);
- } else if (pasirinkimas == 1) {
- cout << "Kiek noresite ivesti studentu ?" << endl;
- int stud;
- cin >> stud;
- s.resize(stud);
- while(cin.fail()) {
- cin.clear();
- cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
- cout << "Neteisingai ivedete, veskite dar karta! ";
- cin >> stud;
- }
- index = stud;
- cout << "\n";
- for (int i = 0; i < stud; i++) {
- s[i].data();
- }
- }
- display(s, index);
- return 0;
- }
- //skaito is failo
- void readFile (int &index, vector<studentas> &s) {
- string line;
- int ndVisu;
- ifstream file_("studentai.txt");
- getline(file_, line); //pirmas
- while (getline(file_, line)) {
- istringstream pirmi(line);
- s.push_back(studentas());
- pirmi >> s[index].firstName;
- pirmi >> s[index].secondName;
- while (pirmi) {
- pirmi >> ndVisu;
- s[index].nd.push_back(ndVisu);
- }
- s[index].egz = s[index].nd.back();
- s[index].nd.pop_back();
- index++;
- }
- }
- //Sortina studentus
- /*void srt(int index)
- {
- studentas s[60];
- sort(s, s + index);
- [](studentas a, studentas b)-> bool{return (a.firstName<b.firstName);}
- }
- */
- void display(vector<studentas> s, int index)
- {
- //Displaying information
- cout << "Jusu pateikta informacija: \n";
- cout << "Pavarde Vardas Galutinis(Vid.) Galutinis(Med.) \n";
- cout <<"-------------------------------------------------------------------------------------";
- for (int i = 0; i < index; ++i) {
- cout << s[i].firstName << " " << s[i].secondName << fixed<< setprecision(2) <<" " << s[i].galutinioV() <<" "<<s[i].galutinioM()<<"\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement