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;
- };
- 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>> &p_ucenici)
- {
- for (auto p_ucenik : p_ucenici)
- {
- p_ucenik->prosjek = 1;
- p_ucenik->prolaz = false;
- }
- for (auto p_ucenik : p_ucenici)
- {
- double suma_ocjena(0);
- for (auto ocjena : p_ucenik->ocjene)
- {
- if (ocjena == 1) return;
- suma_ocjena += ocjena;
- }
- p_ucenik->prolaz = true;
- p_ucenik->prosjek = suma_ocjena / BrojPredmeta;
- }
- std::sort(p_ucenici.begin(), p_ucenici.end(), [](std::shared_ptr<Ucenik> p_u1, std::shared_ptr<Ucenik> p_u2) {return p_u1->prosjek > p_u2->prosjek;});
- }
- void IspisiIzvjestaj(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> p_ucenik)
- {
- void IspisiDatum(const Datum &datum);
- std::cout << "Ucenik " << p_ucenik->ime << " " << p_ucenik->prezime
- << " rodjen ";
- IspisiDatum(p_ucenik->datum_rodjenja);
- if (p_ucenik->prolaz)
- std::cout << " ima prosjek " << std::setprecision(3) << p_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;
- }
- void UnesiJednogUcenika(std::shared_ptr<Ucenik> p_ucenik)
- {
- 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 UnesiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici)
- {
- void UnesiJednogUcenika(std::shared_ptr<Ucenik> p_ucenik);
- for (unsigned 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]);
- }
- }
- int main()
- {
- int broj_ucenika;
- std::cout << "Koliko ima ucenika: ";
- std::cin >> broj_ucenika;
- try
- {
- std::vector<std::shared_ptr<Ucenik>> p_ucenici(broj_ucenika);
- UnesiUcenike(p_ucenici);
- ObradiUcenike(p_ucenici);
- IspisiIzvjestaj(p_ucenici);
- }
- catch (...)
- {
- std::cout << "Problemi sa memorijom...\n";
- }
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement