Advertisement
naskedvi

T8 - zad.2.

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