Advertisement
amermo

Untitled

Apr 29th, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>
  4. #include <vector>
  5. #include <algorithm>
  6. const int BrojPredmeta(8);
  7. struct Datum
  8. {
  9.     int dan, mjesec, godina;
  10. };
  11. struct Ucenik
  12. {
  13.     std::string ime, prezime;
  14.     Datum datum_rodjenja;
  15.     int ocjene[BrojPredmeta];
  16.     double prosjek;
  17.     bool prolaz;
  18. };
  19. int main()
  20. {
  21.     void UnesiUcenike(std::vector<Ucenik*> &p_ucenici);
  22.     void ObradiUcenike(std::vector<Ucenik*> &p_ucenici);
  23.     void IspisiIzvjestaj(const std::vector<Ucenik*> &p_ucenici);
  24.     void OslobodiMemoriju(std::vector<Ucenik*> &p_ucenici);
  25.     int broj_ucenika;
  26.     std::cout << "Koliko ima ucenika: ";
  27.     std::cin >> broj_ucenika;
  28.     try
  29.     {
  30.         std::vector<Ucenik*> p_ucenici(broj_ucenika);
  31.         try
  32.         {
  33.             UnesiUcenike(p_ucenici); // Ovo moลพe izazvati izuzetak!!!
  34.         }
  35.         catch(...)
  36.         {
  37.             OslobodiMemoriju(p_ucenici);
  38.             throw;
  39.         }
  40.         ObradiUcenike(p_ucenici);
  41.         IspisiIzvjestaj(p_ucenici);
  42.         OslobodiMemoriju(p_ucenici);
  43.     }
  44.     catch(...)
  45.     {
  46.         std::cout << "Problemi sa memorijom...\n";
  47.     }
  48.     return 0;
  49. }
  50. void UnesiUcenike(std::vector<Ucenik*> &p_ucenici)
  51. {
  52.     void UnesiJednogUcenika(Ucenik *p_ucenik);
  53.     for(int i = 0; i < p_ucenici.size(); i++)
  54.     {
  55.         std::cout << "Unesite podatke za " << i + 1 << ". uฤenika:\n";
  56.         p_ucenici[i] = new Ucenik;
  57.         UnesiJednogUcenika(p_ucenici[i]);
  58.     }
  59. }
  60. void UnesiJednogUcenika(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. void UnesiOcjene(int ocjene[], int broj_predmeta)
  78. {
  79.     for(int i = 0; i < broj_predmeta; i++)
  80.     {
  81.         std::cout << " Ocjena iz " << i + 1 << ". predmeta: ";
  82.         std::cin >> ocjene[i];
  83.     }
  84. }
  85. void ObradiUcenike(std::vector<Ucenik*> &p_ucenici)
  86. {
  87.     void ObradiJednogUcenika(Ucenik *p_ucenik);
  88.     for(Ucenik *p_ucenik : p_ucenici) ObradiJednogUcenika(p_ucenik);
  89.     std::sort(p_ucenici.begin(), p_ucenici.end(),
  90.               [](const Ucenik *p_u1, const Ucenik *p_u2)
  91.     {
  92.         return p_u1->prosjek > p_u2->prosjek;
  93.     });
  94. }
  95. void ObradiJednogUcenika(Ucenik *p_ucenik)
  96. {
  97.     double suma_ocjena(0);
  98.     p_ucenik->prosjek = 1;
  99.     p_ucenik->prolaz = false;
  100.     for(int ocjena : p_ucenik->ocjene)
  101.     {
  102.         if(ocjena == 1) return;
  103.         suma_ocjena += ocjena;
  104.     }
  105.     p_ucenik->prolaz = true;
  106.     p_ucenik->prosjek = suma_ocjena / BrojPredmeta;
  107. }
  108. void IspisiIzvjestaj(const std::vector<Ucenik*> &p_ucenici)
  109. {
  110.     void IspisiJednogUcenika(const Ucenik *ucenik);
  111.     std::cout << std::endl;
  112.     for(const Ucenik *p_ucenik : p_ucenici) IspisiJednogUcenika(p_ucenik);
  113. }
  114. void IspisiJednogUcenika(const Ucenik *p_ucenik)
  115. {
  116.     void IspisiDatum(const Datum &datum);
  117.     std::cout << "Ucenik " << p_ucenik->ime << " " << p_ucenik->prezime
  118.               << " 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
  123.         std::cout << " mora ponavljati razred";
  124.     std::cout << std::endl;
  125. }
  126. void IspisiDatum(const Datum &datum)
  127. {
  128.     std::cout << datum.dan << "/" << datum.mjesec << "/" << datum.godina;
  129. }
  130. void OslobodiMemoriju(std::vector<Ucenik*> &p_ucenici)
  131. {
  132.     for(Ucenik *p_ucenik : p_ucenici) delete p_ucenik;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement