Advertisement
amermo

ucenici sa pametnim

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