Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TP_Tutorijal_8 Zadatak_3 */
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <algorithm>
- #include <memory>
- const int BrojPredmeta (8);
- struct Datum
- {
- int dan, mjesec, godina;
- };
- struct Ucenik
- {
- std::string ime, prezime;
- Datum datum_rodjenja;
- int ocjene[BrojPredmeta];
- double prosjek;
- bool prolaz;
- };
- //poslije promjene //prije promjene
- void UnesiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika); //void UnesiUcenike (std::vector<Ucenik*>& p_ucenici);
- void ObradiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika); //void ObradiUcenike (std::vector<Ucenik*>& p_ucenici);
- void IspisiIzvjestaj (const Ucenik* const* const& p_ucenici, const int& broj_ucenika); //void IspisiIzvjestaj (const std::vector<Ucenik*>& p_ucenici);
- void OslobodiMemoriju (Ucenik**& p_ucenici, const int& broj_ucenika); //void OslobodiMemoriju (std::vector<Ucenik*>& p_ucenici);
- int main()
- {
- int broj_ucenika;
- std::cout << "Koliko ima ucenika: ";
- std::cin >> broj_ucenika;
- Ucenik** p_ucenici {nullptr};
- try
- {
- p_ucenici = new Ucenik* [broj_ucenika];
- for (int i {0}; i < broj_ucenika ; i++) //ovoga nije bilo jer smo koristili vektor
- p_ucenici[i] = nullptr;
- UnesiUcenike (p_ucenici, broj_ucenika); // UnesiUcenike (p_ucenici);
- IspisiIzvjestaj (p_ucenici, broj_ucenika); //IspisiIzvjestaj (p_ucenici);
- OslobodiMemoriju (p_ucenici, broj_ucenika); //OslobodiMemoriju (p_ucenici);
- }
- catch (...)
- {
- OslobodiMemoriju (p_ucenici, broj_ucenika); //PITANJE ??? kada je ovde petlja za brisanje fragmetnirane
- std::cout << "Problemi sa memorijom...\n"; //izbaci neki warning
- }
- return 0;
- }
- void UnesiJednogUcenika (Ucenik* p_ucenik);
- void UnesiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika) //void UnesiUcenike (std::vector<Ucenik*>& p_ucenici);
- {
- for (int i = 0; i < broj_ucenika; i++) //for (int i = 0; i < int (p_ucenici.size() ); i++)
- {
- std::cout << "Unesite podatke za " << i + 1 << ". ucenika:\n";
- p_ucenici[i] = new Ucenik;
- UnesiJednogUcenika (p_ucenici[i]);
- }
- }
- void UnesiDatum (Datum& datum);
- void UnesiOcjene (int ocjene[], int broj_predmeta);
- void UnesiJednogUcenika (Ucenik* p_ucenik)
- {
- std::cout << " Ime: ";
- std::cin >> p_ucenik->ime;
- std::cout << " Prezime: ";
- std::cin >> p_ucenik->prezime;
- std::cout << " Datum rodjenja (D/M/G): ";
- UnesiDatum (p_ucenik->datum_rodjenja);
- UnesiOcjene (p_ucenik->ocjene, BrojPredmeta);
- }
- void UnesiDatum (Datum& datum)
- {
- char znak;
- std::cin >> datum.dan >> znak >> datum.mjesec >> znak >> datum.godina;
- }
- void UnesiOcjene (int ocjene[], int broj_predmeta)
- {
- for (int i = 0; i < broj_predmeta; i++)
- {
- std::cout << " Ocjena iz " << i + 1 << ". predmeta: ";
- std::cin >> ocjene[i];
- }
- }
- void ObradiJednogUcenika (Ucenik* p_ucenik);
- void ObradiUcenike (Ucenik**& p_ucenici, const int& broj_ucenika) //void ObradiUcenike (std::vector<Ucenik*>& p_ucenici);
- {
- for (int i {0}; i < broj_ucenika ; i++) //for (Ucenik* p_ucenik : p_ucenici)
- ObradiJednogUcenika (p_ucenici[i]); // ObradiJednogUcenika (p_ucenik);
- std::sort (p_ucenici, p_ucenici + broj_ucenika, //std::sort (p_ucenici.begin(), p_ucenici.end(),
- [] (const Ucenik * p_u1, const Ucenik * p_u2)
- {
- return p_u1->prosjek > p_u2->prosjek;
- });
- } void ObradiJednogUcenika (Ucenik* p_ucenik)
- {
- double suma_ocjena (0);
- p_ucenik->prosjek = 1; p_ucenik->prolaz = false;
- for (int ocjena : p_ucenik->ocjene)
- {
- if (ocjena == 1) return;
- suma_ocjena += ocjena;
- }
- p_ucenik->prolaz = true;
- p_ucenik->prosjek = suma_ocjena / BrojPredmeta;
- }
- void IspisiJednogUcenika (const Ucenik* ucenik);
- void IspisiIzvjestaj (const Ucenik**& p_ucenici, const int& broj_ucenika) //void IspisiIzvjestaj (const std::vector<Ucenik*>& p_ucenici);
- {
- std::cout << std::endl;
- for (int i {0}; i < broj_ucenika; i++) //for (const Ucenik* p_ucenik : p_ucenici)
- IspisiJednogUcenika (p_ucenici[i]); // IspisiJednogUcenika (p_ucenik);
- }
- void IspisiDatum (const Datum& datum);
- void IspisiJednogUcenika (const Ucenik* p_ucenik)
- {
- std::cout << "Ucenik " << p_ucenik->ime << " " << p_ucenik->prezime << " rodjen "; IspisiDatum (p_ucenik->datum_rodjenja);
- if (p_ucenik->prolaz)
- std::cout << " ima prosjek " << std::setprecision (3) << p_ucenik->prosjek;
- else
- std::cout << " mora ponavljati razred";
- std::cout << std::endl;
- }
- void IspisiDatum (const Datum& datum)
- {
- std::cout << datum.dan << "/" << datum.mjesec << "/" << datum.godina;
- }
- void OslobodiMemoriju (Ucenik**& p_ucenici, const int& broj_ucenika)
- {
- if(p_ucenici==nullptr)
- return;
- for (int i {0}; i < broj_ucenika ; i++)
- delete [] p_ucenici[i];
- delete [] p_ucenici;
- }
- //ova funkcija je sa vektorom
- /*
- * void OslobodiMemoriju (std::vector<Ucenik*>& p_ucenici)
- * {
- * for (Ucenik* p_ucenik : p_ucenici)
- * delete p_ucenik;
- * }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement