Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- struct PolozeniPredmet {
- char * _naziv;
- int _ocjena;
- int _semestar;
- void Unos(char * naziv, int ocjena, int semestar) {
- _naziv = new char[strlen(naziv) + 1];
- strcpy_s(_naziv, strlen(naziv) + 1, naziv);
- _ocjena = ocjena;
- _semestar = semestar;
- }
- void Ispis() { cout << _naziv << " " << _ocjena << " " << _semestar << endl; };
- };
- struct Student {
- char * _ImePrezime;
- PolozeniPredmet * _polozeni[40];
- int brojPolozenih;
- void Unos(char * imePrezime)
- {
- _ImePrezime = new char[strlen(imePrezime) + 1];
- strcpy_s(_ImePrezime, strlen(imePrezime) + 1, imePrezime);
- brojPolozenih = 0;
- }
- void Ispis() {
- cout << _ImePrezime << endl;
- for (int i = 0; i < brojPolozenih; i++)
- _polozeni[i]->Ispis();
- }
- bool AddPolozeni(PolozeniPredmet noviPredmet) {
- for (int i = 0; i < brojPolozenih; i++)
- {
- if (strcmp(noviPredmet._naziv, _polozeni[i]->_naziv) == 0)
- {
- return false;
- }
- }
- _polozeni[brojPolozenih] = new PolozeniPredmet;
- _polozeni[brojPolozenih]->Unos(noviPredmet._naziv, noviPredmet._ocjena, noviPredmet._semestar);
- brojPolozenih++;
- return true;
- }
- bool RemovePolozeni(char * naziv) {
- //onemoguciti pojavu neinicijaliziranih clanova niza
- for (int i = 0; i < brojPolozenih; i++)
- {
- if (strcmp(naziv, _polozeni[i]->_naziv) == 0)
- {
- for (int j = i; j < brojPolozenih - 1; j++)
- {
- delete _polozeni[j];
- _polozeni[j] = new PolozeniPredmet;
- _polozeni[j]->Unos(_polozeni[j + 1]->_naziv, _polozeni[j + 1]->_ocjena, _polozeni[j + 1]->_semestar);
- }
- delete _polozeni[brojPolozenih - 1];
- brojPolozenih--;
- return true;
- }
- }
- return false;
- }
- float GetProsjekBySemestar(int semestar)
- {
- //vraca prosjecnu ocjenu u semestru. ako nema polozenih predmeta funkcija vraca 5.0
- float prosjek = 0;
- bool k = false;
- float brojac = 0;
- for (int i = 0; i < brojPolozenih; i++)
- {
- if (semestar == _polozeni[i]->_semestar&&_polozeni[i]->_ocjena>5)
- {
- prosjek += _polozeni[i]->_ocjena;
- k = true;
- brojac++;
- }
- }
- if (k)
- return prosjek / brojac;
- else
- return 5.0;
- }
- PolozeniPredmet * GetPolozeniByNaziv(char * naziv)
- {
- //vraca niz predmeta koje je student polozio, a u svom nazivu imaju dio vrijednosti parametra
- PolozeniPredmet * niz;
- int k = 0;
- niz = new PolozeniPredmet[k];
- for (int i = 0; i < brojPolozenih; i++)
- {
- if (strstr(_polozeni[i]->_naziv, naziv)!=NULL)
- {
- PolozeniPredmet * temp = new PolozeniPredmet[k + 1];
- for (int j = 0; j < k; j++)
- {
- temp[j].Unos(niz[j]._naziv, niz[j]._ocjena, niz[j]._semestar);
- }
- temp[k].Unos(_polozeni[i]->_naziv, _polozeni[i]->_ocjena, _polozeni[i]->_semestar);
- k++;
- delete[] niz;
- niz = new PolozeniPredmet[k];
- for (int i = 0; i < k; i++)
- {
- niz[i] = temp[i];
- }
- delete[]temp;
- }
- }
- return niz;
- }
- };
- float PronadjiNajboljeStudenta(Student *s, int max) {
- //vraca prosjek ocjena najboljeg studenta
- float *niz = new float[max];
- int br = max - 1;
- for (int i = 0; i < max; i++)
- {
- for (int j = 0; j < s[i].brojPolozenih; j++)
- {
- niz[i] += s[i]._polozeni[j]->_ocjena;
- }
- }
- for (int i = 0; i < max; i++)
- {
- if (niz[i] < niz[i + 1])
- {
- float temp = niz[i];
- niz[i] = niz[i + 1];
- niz[i + 1] = temp;
- br = br - 1;
- }
- }
- return niz[0] / s[br].brojPolozenih;
- }
- void main()
- {
- int max = 3;
- Student * niz = new Student[max];
- niz[0].Unos("Nedim Pecanin");
- niz[1].Unos("Uma Pecanin");
- niz[2].Unos("Amina Obucina");
- PolozeniPredmet p1; p1.Unos("Uvod u programiranje", 8, 1);
- PolozeniPredmet p2; p2.Unos("Programiranje 1", 7, 2);
- PolozeniPredmet p3; p3.Unos("Programiranje 2", 9, 3);
- niz[0].AddPolozeni(p1); niz[0].AddPolozeni(p2);
- niz[1].AddPolozeni(p1); niz[1].AddPolozeni(p2); niz[1].AddPolozeni(p2);
- niz[2].AddPolozeni(p1); niz[2].AddPolozeni(p2); niz[2].AddPolozeni(p3);
- cout << niz[1].RemovePolozeni("Programiranje 2");
- cout << niz[2].RemovePolozeni("Uvod u programiranje");
- cout << endl << niz[1].GetProsjekBySemestar(2) << endl;
- PolozeniPredmet * novi = niz[1].GetPolozeniByNaziv("ramir");
- cout << novi[0]._naziv << endl;
- cout << "Prosjek ocjena najboljeg studenta je: " << PronadjiNajboljeStudenta(niz, max);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement