Advertisement
FRiTZZY

TP_T8_Z3

Apr 27th, 2015
706
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.99 KB | None | 0 0
  1. /* TP_Tutorijal_8 Zadatak_3 */
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <string>
  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. //poslije promjene                                                                                          //prije promjene
  22. void UnesiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika);                               //void UnesiUcenike (std::vector<Ucenik*>& p_ucenici);
  23. void ObradiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika);                          //void ObradiUcenike (std::vector<Ucenik*>& p_ucenici);
  24. void IspisiIzvjestaj (const Ucenik* const* const& p_ucenici, const int& broj_ucenika);  //void IspisiIzvjestaj (const std::vector<Ucenik*>& p_ucenici);
  25. void OslobodiMemoriju (Ucenik**& p_ucenici, const int& broj_ucenika);                       //void OslobodiMemoriju (std::vector<Ucenik*>& p_ucenici);
  26. int main()
  27. {
  28.     int broj_ucenika;
  29.     std::cout << "Koliko ima ucenika: ";
  30.     std::cin >> broj_ucenika;
  31.     Ucenik** p_ucenici {nullptr};
  32.     try
  33.     {
  34.         p_ucenici = new Ucenik* [broj_ucenika];
  35.         for (int i {0}; i < broj_ucenika ; i++)                                                         //ovoga nije bilo jer smo koristili vektor
  36.             p_ucenici[i] = nullptr;
  37.         UnesiUcenike (p_ucenici, broj_ucenika);                                                         //  UnesiUcenike (p_ucenici);
  38.         IspisiIzvjestaj (p_ucenici, broj_ucenika);                                                      //IspisiIzvjestaj (p_ucenici);
  39.         OslobodiMemoriju (p_ucenici, broj_ucenika);                                                     //OslobodiMemoriju (p_ucenici);
  40.     }
  41.     catch (...)
  42.     {
  43.         OslobodiMemoriju (p_ucenici, broj_ucenika);                                                     //PITANJE ??? kada je ovde petlja za brisanje fragmetnirane
  44.         std::cout << "Problemi sa memorijom...\n";                                                      //izbaci neki warning
  45.     }
  46.     return 0;
  47. }
  48. void UnesiJednogUcenika (Ucenik* p_ucenik);
  49. void UnesiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika)                                    //void UnesiUcenike (std::vector<Ucenik*>& p_ucenici);
  50. {
  51.     for (int i = 0; i < broj_ucenika; i++)                                                                  //for (int i = 0; i < int (p_ucenici.size() ); i++)
  52.     {
  53.         std::cout << "Unesite podatke za " << i + 1 << ". ucenika:\n";
  54.         p_ucenici[i] = new Ucenik;
  55.         UnesiJednogUcenika (p_ucenici[i]);
  56.     }
  57. }
  58. void UnesiDatum (Datum& datum);
  59. void UnesiOcjene (int ocjene[], int broj_predmeta);
  60.  
  61. void UnesiJednogUcenika (Ucenik* p_ucenik)
  62. {
  63.     std::cout << " Ime: ";
  64.     std::cin >> p_ucenik->ime;
  65.     std::cout << " Prezime: ";
  66.     std::cin >> p_ucenik->prezime;
  67.     std::cout << " Datum rodjenja (D/M/G): ";
  68.     UnesiDatum (p_ucenik->datum_rodjenja);
  69.     UnesiOcjene (p_ucenik->ocjene, BrojPredmeta);
  70. }
  71. void UnesiDatum (Datum& datum)
  72. {
  73.     char znak;
  74.     std::cin >> datum.dan >> znak >> datum.mjesec >> znak >> datum.godina;
  75. }
  76. void UnesiOcjene (int ocjene[], int broj_predmeta)
  77. {
  78.     for (int i = 0; i < broj_predmeta; i++)
  79.     {
  80.         std::cout << " Ocjena iz " << i + 1 << ". predmeta: ";
  81.         std::cin >> ocjene[i];
  82.     }
  83. }
  84. void ObradiJednogUcenika (Ucenik* p_ucenik);
  85. void ObradiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika)                               //void ObradiUcenike (std::vector<Ucenik*>& p_ucenici);
  86. {
  87.     for (int i {0}; i < broj_ucenika ; i++)                                                             //for (Ucenik* p_ucenik : p_ucenici)
  88.         ObradiJednogUcenika (p_ucenici[i]);                                                                 //      ObradiJednogUcenika (p_ucenik);
  89.     std::sort (p_ucenici, p_ucenici + broj_ucenika,                                                     //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. } void ObradiJednogUcenika (Ucenik* p_ucenik)
  95. {
  96.     double suma_ocjena (0);
  97.     p_ucenik->prosjek = 1; p_ucenik->prolaz = false;
  98.     for (int ocjena : p_ucenik->ocjene)
  99.     {
  100.         if (ocjena == 1) return;
  101.         suma_ocjena += ocjena;
  102.     }
  103.     p_ucenik->prolaz = true;
  104.     p_ucenik->prosjek = suma_ocjena / BrojPredmeta;
  105. }
  106. void IspisiJednogUcenika (const Ucenik* ucenik);
  107. void IspisiIzvjestaj (const Ucenik**& p_ucenici, const int& broj_ucenika)                   //void IspisiIzvjestaj (const std::vector<Ucenik*>& p_ucenici);
  108. {
  109.     std::cout << std::endl;
  110.     for (int i {0}; i < broj_ucenika; i++)                                                              //for (const Ucenik* p_ucenik : p_ucenici)
  111.         IspisiJednogUcenika (p_ucenici[i]);                                                             //      IspisiJednogUcenika (p_ucenik);
  112. }
  113. void IspisiDatum (const Datum& datum);
  114. void IspisiJednogUcenika (const Ucenik* p_ucenik)
  115. {
  116.     std::cout << "Ucenik " << p_ucenik->ime << " " << p_ucenik->prezime << " rodjen "; IspisiDatum (p_ucenik->datum_rodjenja);
  117.     if (p_ucenik->prolaz)
  118.         std::cout << " ima prosjek " << std::setprecision (3) << p_ucenik->prosjek;
  119.     else
  120.         std::cout << " mora ponavljati razred";
  121.     std::cout << std::endl;
  122. }
  123. void IspisiDatum (const Datum& datum)
  124. {
  125.     std::cout << datum.dan << "/" << datum.mjesec << "/" << datum.godina;
  126. }
  127.  
  128. void OslobodiMemoriju (Ucenik**& p_ucenici, const int& broj_ucenika)
  129. {
  130.     if(p_ucenici==nullptr)
  131.         return;
  132.     for (int i {0}; i < broj_ucenika ; i++)
  133.         delete [] p_ucenici[i];
  134.     delete [] p_ucenici;
  135. }
  136. //ova funkcija je sa vektorom
  137. /*
  138.  * void OslobodiMemoriju (std::vector<Ucenik*>& p_ucenici)
  139.  * {
  140.  *  for (Ucenik* p_ucenik : p_ucenici)
  141.  *      delete p_ucenik;
  142.  * }
  143.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement