Advertisement
sellmmaahh

tut8-zad2-p1

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