Advertisement
Guest User

tutorijal8_zadatak2

a guest
Apr 27th, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.44 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <memory>
  7. const int BrojPredmeta(8);
  8. struct Datum
  9. {
  10.     int dan, mjesec, godina;
  11. };
  12. struct Ucenik
  13. {
  14.     std::string ime, prezime;
  15.     Datum datum_rodjenja;
  16.     int ocjene[BrojPredmeta];
  17.     double prosjek;
  18.     bool prolaz;
  19. };
  20. int main()
  21. {
  22.     void UnesiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici);
  23.     void ObradiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici);
  24.     void IspisiIzvjestaj(const std::vector<std::shared_ptr<Ucenik>> &p_ucenici);
  25.     int broj_ucenika;
  26.     std::cout << "Koliko ima uèenika: ";
  27.     std::cin >> broj_ucenika;
  28.     std::vector<std::shared_ptr<Ucenik>> p_ucenici(broj_ucenika);
  29.     UnesiUcenike(p_ucenici);
  30.     ObradiUcenike(p_ucenici);
  31.     IspisiIzvjestaj(p_ucenici);
  32.  
  33.  
  34.     return 0;
  35. }
  36. void UnesiUcenike(std::vector<std::shared_ptr<Ucenik>> &p_ucenici)
  37. {
  38.     void UnesiJednogUcenika(std::shared_ptr<Ucenik> p_ucenik);
  39.     for(int i = 0; i < p_ucenici.size(); i++)
  40.     {
  41.         std::cout << "Unesite podatke za " << i + 1 << ". ucenika:\n";
  42.         p_ucenici[i]=std::make_shared<Ucenik>();
  43.         UnesiJednogUcenika(p_ucenici[i]);
  44.     }
  45. }
  46. void UnesiJednogUcenika(std::shared_ptr<Ucenik> p_ucenik)
  47. {
  48.     void UnesiDatum(Datum &datum);
  49.     void UnesiOcjene(int ocjene[], int broj_predmeta);
  50.     std::cout << " Ime: ";
  51.     std::cin >> p_ucenik->ime;
  52.     std::cout << " Prezime: ";
  53.     std::cin >> p_ucenik->prezime;
  54.     std::cout << " Datum rodjenja (D/M/G): ";
  55.     UnesiDatum(p_ucenik->datum_rodjenja);
  56.     UnesiOcjene(p_ucenik->ocjene, BrojPredmeta);
  57. }
  58. void UnesiDatum(Datum &datum)
  59. {
  60.     char znak;
  61.     std::cin >> datum.dan >> znak >> datum.mjesec >> znak >> datum.godina;
  62. }
  63. void UnesiOcjene(int ocjene[], int broj_predmeta)
  64. {
  65.     for(int i = 0; i < broj_predmeta; i++)
  66.     {
  67.         std::cout << " Ocjena iz " << i + 1 << ". predmeta: ";
  68.         std::cin >> ocjene[i];
  69.     }
  70. }
  71. void ObradiUcenike(std::vector<std::shared_ptr<Ucenik>> &ucenici)
  72. {
  73.     void ObradiJednogUcenika(std::shared_ptr<Ucenik> ucenik);
  74.     for(auto ucenik : ucenici) ObradiJednogUcenika(ucenik);
  75.     std::sort(ucenici.begin(), ucenici.end(),
  76.               [](std::shared_ptr<const Ucenik> u1, std::shared_ptr<const Ucenik> u2)
  77.     {
  78.         return u1->prosjek > u2->prosjek;
  79.     });
  80. }
  81. void ObradiJednogUcenika(std::shared_ptr<Ucenik> ucenik)
  82. {
  83.     double suma_ocjena(0);
  84.     ucenik->prosjek = 1;
  85.     ucenik->prolaz = false;
  86.     for(int ocjena : ucenik->ocjene)
  87.     {
  88.         if(ocjena == 1) return;
  89.         suma_ocjena += ocjena;
  90.     }
  91.     ucenik->prolaz = true;
  92.     ucenik->prosjek = suma_ocjena / BrojPredmeta;
  93. }
  94. void IspisiIzvjestaj(const std::vector<std::shared_ptr<Ucenik>> &p_ucenici)
  95. {
  96.     void IspisiJednogUcenika(std::shared_ptr<Ucenik> &p_ucenik);
  97.     std::cout << std::endl;
  98.     for(auto p_ucenik : p_ucenici) IspisiJednogUcenika(p_ucenik);
  99. }
  100. void IspisiJednogUcenika(std::shared_ptr<Ucenik> &ucenik)
  101. {
  102.     void IspisiDatum(const Datum &datum);
  103.     std::cout << "Ucenik " << ucenik->ime << " " << ucenik->prezime << " rodjen ";
  104.     IspisiDatum(ucenik->datum_rodjenja);
  105.     if(ucenik->prolaz)
  106.         std::cout << " ima prosjek " << std::setprecision(3) << ucenik->prosjek;
  107.     else
  108.         std::cout << " mora ponavljati razred";
  109.     std::cout << std::endl;
  110. }
  111. void IspisiDatum(const Datum &datum)
  112. {
  113.     std::cout << datum.dan << "/" << datum.mjesec << "/" << datum.godina;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement