Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <memory>
- const int BrojPredmeta(8);
- struct Datum
- {
- int dan, mjesec, godina;
- };
- struct Ucenik
- {
- std::string ime, prezime;
- Datum datum_rodjenja;
- int ocjene[BrojPredmeta];
- double prosjek;
- bool prolaz;
- };
- int main()
- {
- void UnesiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici);
- void ObradiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici);
- void IspisiIzvjestaj(const std::vector<std::shared_ptr<Ucenik>> &p_ucenici);
- int broj_ucenika;
- std::cout << "Koliko ima uèenika: ";
- std::cin >> broj_ucenika;
- std::vector<std::shared_ptr<Ucenik>> p_ucenici(broj_ucenika);
- UnesiUcenike(p_ucenici);
- ObradiUcenike(p_ucenici);
- IspisiIzvjestaj(p_ucenici);
- return 0;
- }
- void UnesiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici)
- {
- void UnesiJednogUcenika(std::shared_ptr<Ucenik> p_ucenik);
- for(int i = 0; i < p_ucenici.size(); i++)
- {
- std::cout << "Unesite podatke za " << i + 1 << ". ucenika:\n";
- p_ucenici[i]=std::make_shared<Ucenik>();
- UnesiJednogUcenika(p_ucenici[i]);
- }
- }
- void UnesiJednogUcenika(std::shared_ptr<Ucenik> p_ucenik)
- {
- void UnesiDatum(Datum &datum);
- void UnesiOcjene(int ocjene[], int broj_predmeta);
- std::cout << " Ime: ";
- std::cin >> p_ucenik->ime;
- std::cout << " Prezime: ";
- std::cin >> p_ucenik->prezime;
- std::cout << " Datum rodjenja (D/M/G): ";
- UnesiDatum(p_ucenik->datum_rodjenja);
- UnesiOcjene(p_ucenik->ocjene, BrojPredmeta);
- }
- void UnesiDatum(Datum &datum)
- {
- char znak;
- std::cin >> datum.dan >> znak >> datum.mjesec >> znak >> datum.godina;
- }
- void UnesiOcjene(int ocjene[], int broj_predmeta)
- {
- for(int i = 0; i < broj_predmeta; i++)
- {
- std::cout << " Ocjena iz " << i + 1 << ". predmeta: ";
- std::cin >> ocjene[i];
- }
- }
- void ObradiUcenike(std::vector<std::shared_ptr<Ucenik>> &ucenici)
- {
- void ObradiJednogUcenika(std::shared_ptr<Ucenik> ucenik);
- for(auto ucenik : ucenici) ObradiJednogUcenika(ucenik);
- std::sort(ucenici.begin(), ucenici.end(),
- [](std::shared_ptr<const Ucenik> u1, std::shared_ptr<const Ucenik> u2)
- {
- return u1->prosjek > u2->prosjek;
- });
- }
- void ObradiJednogUcenika(std::shared_ptr<Ucenik> ucenik)
- {
- double suma_ocjena(0);
- ucenik->prosjek = 1;
- ucenik->prolaz = false;
- for(int ocjena : ucenik->ocjene)
- {
- if(ocjena == 1) return;
- suma_ocjena += ocjena;
- }
- ucenik->prolaz = true;
- ucenik->prosjek = suma_ocjena / BrojPredmeta;
- }
- void IspisiIzvjestaj(const std::vector<std::shared_ptr<Ucenik>> &p_ucenici)
- {
- void IspisiJednogUcenika(std::shared_ptr<Ucenik> &p_ucenik);
- std::cout << std::endl;
- for(auto p_ucenik : p_ucenici) IspisiJednogUcenika(p_ucenik);
- }
- void IspisiJednogUcenika(std::shared_ptr<Ucenik> &ucenik)
- {
- void IspisiDatum(const Datum &datum);
- std::cout << "Ucenik " << ucenik->ime << " " << ucenik->prezime << " rodjen ";
- IspisiDatum(ucenik->datum_rodjenja);
- if(ucenik->prolaz)
- std::cout << " ima prosjek " << std::setprecision(3) << ucenik->prosjek;
- else
- std::cout << " mora ponavljati razred";
- std::cout << std::endl;
- }
- void IspisiDatum(const Datum &datum)
- {
- std::cout << datum.dan << "/" << datum.mjesec << "/" << datum.godina;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement