eMatematikas Prisijunk Forumas Matematikos testai Pradžia

2020 informatikos egzaminas. 2 užduotis. Varžybos


Ar įmanoma dar ką nors supaprastinti?

#include <fstream>
#include <string>
using namespace std;
struct rezultatai {
    string vardas{};
    int suma{};
};
struct laimikis {
    int kiek{};
    string vardai[100]={};
    int mase[100]={};
};
void nuskaitymas(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int& n, int& k);
void zvejuTaskai(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int n, int k);
void pagautaMase(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int n, int k);
void rikiavimas(rezultatai mas[], int x);
void isvedimas(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int n, int k);
int main(){
    rezultatai Zvejai[30], Zuvys[30]; laimikis Pagavo[30];int n, k;
    nuskaitymas(Zvejai, Zuvys, Pagavo, n, k);
    zvejuTaskai(Zvejai, Zuvys, Pagavo, n, k);
    pagautaMase(Zvejai, Zuvys, Pagavo, n, k);
    rikiavimas(Zvejai, n);
    rikiavimas(Zuvys, k);
    isvedimas(Zvejai, Zuvys, Pagavo, n, k);
    return 0;
}
void nuskaitymas(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int& n, int& k) {
    ifstream fin("U2.txt");
    fin >> n;
    char laikinas[21];
    for (int i = 0; i < n; i++) {
        fin.ignore();
        fin.get(laikinas, 21);
        Zvejai[i].vardas = laikinas;
        fin >> Pagavo[i].kiek;
        for (int j = 0; j < Pagavo[i].kiek; j++) {
            fin.ignore();
            fin.get(laikinas, 21);
            Pagavo[i].vardai[j] = laikinas;
            fin >> Pagavo[i].mase[j];
            if (Pagavo[i].mase[j] < 200) Zvejai[i].suma += 10;
            else Zvejai[i].suma += 30;
        }
    }
    fin >> k;
    for (int i = 0; i < k; i++) {
        fin.ignore();
        fin.get(laikinas, 21);
        Zuvys[i].vardas = laikinas;
        fin >> Zuvys[i].suma;
    }
    fin.close();
}
void zvejuTaskai(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int n, int k) {
    for (int i = 0; i < n; i++)for (int j = 0; j < Pagavo[i].kiek; j++)
            for (int ii = 0; ii < k; ii++)if (Pagavo[i].vardai[j] == Zuvys[ii].vardas)Zvejai[i].suma += Zuvys[ii].suma;
}
void pagautaMase(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int n, int k) {
    for (int i = 0; i < k; i++) {
        Zuvys[i].suma = 0;
        for (int j = 0; j < n; j++)
            for (int ii = 0; ii < Pagavo[j].kiek; ii++)if (Zuvys[i].vardas == Pagavo[j].vardai[ii])Zuvys[i].suma += Pagavo[j].mase[ii];
    }
}
void rikiavimas(rezultatai mas[], int x) {
    for (int i = 0; i < x; i++)for (int j = 0; j < x - 1; j++)
            if ((mas[j].suma < mas[j + 1].suma) || (mas[j].suma == mas[j + 1].suma && mas[j].vardas > mas[j + 1].vardas))swap(mas[j], mas[j + 1]);
}
void isvedimas(rezultatai Zvejai[], rezultatai Zuvys[], laimikis Pagavo[], int n, int k) {
    ofstream fout("U2rez.txt");
    fout << "Dalyviai" << "\n";
    for (int i = 0; i < n; i++)fout << Zvejai[i].vardas << " " << Zvejai[i].suma << "\n";
    fout << "Laimikis" <<"\n";
    for (int i = 0; i < k; i++)fout << Zuvys[i].vardas << " " << Zuvys[i].suma << "\n";
    fout.close();
}

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »