Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <memory>
- using namespace std;
- const int BrPredmeta(8);
- struct Datum {
- int dan, mjesec, godina;
- };
- struct Ucenik {
- string ime, prezime;
- Datum datum_rodjenja;
- int ocjene[BrPredmeta];
- double prosjek;
- bool prolaz;
- };
- int main () {
- void UnesiUcenike (Ucenik **&p_ucenici, int br_ucenike);
- void ObradiUcenike (Ucenik **&p_ucenici, int br_ucenika);
- void IspisiIzvjestaj (const Ucenik **&p_ucenici);
- int br_ucenika;
- cout<<"Koliko ima ucenika: ";
- cin>>br_ucenika;
- try {
- Ucenik **p_ucenici;
- p_ucenici= new Ucenik*[br_ucenika];
- try { UnesiUcenike(p_ucenici, int br_ucenika);
- } catch (...) {
- OslobodiMemoriju(Ucenik **p_ucenici,int br_ucenika);
- }
- ObradiUcenike(Ucenik **p_ucenici, int br_ucenika);
- IspisiIzvjestaj(Ucenik **p_ucenici, int br_ucenika);
- OslobodiMemoriju(Ucenik **p_ucenici, int br_ucenika);
- } catch (...) {
- cout<<"Problemi sa memorijom.";
- }
- return 0;
- }
- void UnesiUcenike (&p_ucenici, int br_ucenika){
- void UnesiJednogUcenika(Ucenik *p_ucenik);
- for (int i=0; i<br_ucenika; i++) {
- cout<<"Unesite podatke za "<<i+1<<". ucenika:\n";
- p_ucenici[i]=new Ucenik ;
- UnesiJednogUcenika(p_ucenici[i]);
- }}
- void UnesiJednogUcenika (Ucenik *p_ucenik) {
- void UnesiDatum (Datum &datum);
- void UnesiOcjene (int ocjene [], int br_predmeta);
- cout<<"Ime: "; cin>>p_ucenik->ime;
- cout<<"Prezime: "; cin>>p_ucenik->prezime;
- cout<<"Datum rodjenja (D/M/G) : ";
- UnesiDatum(p_ucenik->datum_rodjenja);
- UnesiOcjene(p_ucenik->ocjene, BrPredmeta);
- }
- void UnesiDatum(Datum &datum)
- { char znak;
- cin>>datum.dan>>znak>>datum.mjesec>>znak>>datum.godina;
- }
- void UnesiOcjene (int ocjene [], int broj_predmeta) {
- for (int i=0; i<broj_predmeta; i++) {
- cout<<" Ocjena iz "<<i+1<<". predmeta: ";
- cin>>ocjene[i];
- }
- }
- void ObradiUcenike (Ucenik **&p_ucenici, int br_ucenika) {
- void ObradiJednogUcenika (Ucenik **p_ucenik, int br_ucenika);
- for (int i=0; i<br_ucenika; i++) ObradiJednogUcenika(p_ucenici[i]);
- 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, int br_ucenika) {
- double suma_ocjena(0);
- p_ucenik->prosjek=1;
- p_ucenik->prolaz=false;
- for (int i=0; i<br_ucenika; i++) {
- if (ocjena==1) return;
- suma_ocjena+=ocjena;
- }
- p_ucenik->prolaz=true;
- p_ucenik->prosjek=suma_ocjena/BrPredmeta;
- }
- void IspisiIzvjestaj(const Ucenik **p_ucenici, br_ucenika) {
- void IspisiJednogUcenika (const shared_ptr<Ucenik> p_ucenik);
- cout<<endl;
- for (int i=0; i<br_ucenika; i++) IspisiJednogUcenika(p_ucenici[i]);
- }
- void IspisiJednogUcenika (Ucenik **p_ucenik, int br_ucenika) {
- void IspisiDatum (const Datum &datum);
- cout<<"Ucenik: "<<p_ucenik->ime<< " "<<p_ucenik->prezime<<" rodjen ";
- IspisiDatum(p_ucenik->datum_rodjenja);
- if (p_ucenik->prolaz) cout<<"ima prosjek "<<setprecision(3)<<p_ucenik->prosjek;
- else cout<<" mora ponavljati razred";
- cout<<endl;
- }
- void IspisiDatum (const Datum &datum) {
- cout<<datum.dan<<"/"<<datum.mjesec<<"/"<<datum.godina;
- }
- void OslobodiMemoriju(Ucenik **ucenici, int br_ucenika) {
- for (int i=0; i<br_ucenika; i++)
- delete [] ucenici[i];
- delete [] ucenici;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement