Advertisement
NedimPecanin

Zadatak 12(Pitaj za najboljeg studenta)

Aug 28th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.28 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. struct PolozeniPredmet {
  4.     char * _naziv;
  5.     int _ocjena;
  6.     int _semestar;
  7.     void Unos(char * naziv, int ocjena, int semestar) {
  8.         _naziv = new char[strlen(naziv) + 1];
  9.         strcpy_s(_naziv, strlen(naziv) + 1, naziv);
  10.         _ocjena = ocjena;
  11.         _semestar = semestar;
  12.     }
  13.     void Ispis() { cout << _naziv << " " << _ocjena << " " << _semestar << endl; };
  14. };
  15. struct Student {
  16.     char * _ImePrezime;
  17.     PolozeniPredmet * _polozeni[40];
  18.     int brojPolozenih;
  19.     void Unos(char * imePrezime)
  20.     {
  21.         _ImePrezime = new char[strlen(imePrezime) + 1];
  22.         strcpy_s(_ImePrezime, strlen(imePrezime) + 1, imePrezime);
  23.         brojPolozenih = 0;
  24.     }
  25.     void Ispis() {
  26.         cout << _ImePrezime << endl;
  27.         for (int i = 0; i < brojPolozenih; i++)
  28.             _polozeni[i]->Ispis();
  29.     }
  30.     bool AddPolozeni(PolozeniPredmet noviPredmet) {
  31.         for (int i = 0; i < brojPolozenih; i++)
  32.         {
  33.             if (strcmp(noviPredmet._naziv, _polozeni[i]->_naziv) == 0)
  34.             {
  35.                 return false;
  36.             }
  37.         }
  38.         _polozeni[brojPolozenih] = new PolozeniPredmet;
  39.         _polozeni[brojPolozenih]->Unos(noviPredmet._naziv, noviPredmet._ocjena, noviPredmet._semestar);
  40.         brojPolozenih++;
  41.         return true;
  42.     }
  43.     bool RemovePolozeni(char * naziv) {
  44.         //onemoguciti pojavu neinicijaliziranih clanova niza
  45.         for (int i = 0; i < brojPolozenih; i++)
  46.         {
  47.             if (strcmp(naziv, _polozeni[i]->_naziv) == 0)
  48.             {
  49.                 for (int j = i; j < brojPolozenih - 1; j++)
  50.                 {
  51.                     delete _polozeni[j];
  52.                     _polozeni[j] = new PolozeniPredmet;
  53.                     _polozeni[j]->Unos(_polozeni[j + 1]->_naziv, _polozeni[j + 1]->_ocjena, _polozeni[j + 1]->_semestar);
  54.                 }
  55.                 delete _polozeni[brojPolozenih - 1];
  56.                 brojPolozenih--;
  57.                 return true;
  58.             }
  59.         }
  60.         return false;
  61.     }
  62.     float GetProsjekBySemestar(int semestar)
  63.     {
  64.         //vraca prosjecnu ocjenu u semestru. ako nema polozenih predmeta funkcija vraca 5.0
  65.         float prosjek = 0;
  66.         bool k = false;
  67.         float brojac = 0;
  68.         for (int i = 0; i < brojPolozenih; i++)
  69.         {
  70.             if (semestar == _polozeni[i]->_semestar&&_polozeni[i]->_ocjena>5)
  71.             {
  72.                 prosjek += _polozeni[i]->_ocjena;
  73.                 k = true;
  74.                 brojac++;
  75.             }
  76.         }
  77.         if (k)
  78.             return prosjek / brojac;
  79.         else
  80.             return 5.0;
  81.  
  82.     }
  83.     PolozeniPredmet * GetPolozeniByNaziv(char * naziv)
  84.     {
  85.         //vraca niz predmeta koje je student polozio, a u svom nazivu imaju dio vrijednosti parametra
  86.         PolozeniPredmet * niz;
  87.         int k = 0;
  88.         niz = new PolozeniPredmet[k];
  89.         for (int i = 0; i < brojPolozenih; i++)
  90.         {
  91.             if (strstr(_polozeni[i]->_naziv, naziv)!=NULL)
  92.             {
  93.                 PolozeniPredmet * temp = new PolozeniPredmet[k + 1];
  94.                 for (int j = 0; j < k; j++)
  95.                 {
  96.                     temp[j].Unos(niz[j]._naziv, niz[j]._ocjena, niz[j]._semestar);
  97.                 }
  98.                 temp[k].Unos(_polozeni[i]->_naziv, _polozeni[i]->_ocjena, _polozeni[i]->_semestar);
  99.                 k++;
  100.                 delete[] niz;
  101.                 niz = new PolozeniPredmet[k];
  102.                 for (int i = 0; i < k; i++)
  103.                 {
  104.                     niz[i] = temp[i];
  105.                 }
  106.                 delete[]temp;
  107.             }
  108.         }
  109.         return niz;
  110.     }
  111. };
  112. float PronadjiNajboljeStudenta(Student *s, int max) {
  113.     //vraca prosjek ocjena najboljeg studenta
  114.     float *niz = new float[max];
  115.     int br = max - 1;
  116.     for (int i = 0; i < max; i++)
  117.     {
  118.         for (int j = 0; j < s[i].brojPolozenih; j++)
  119.         {
  120.             niz[i] += s[i]._polozeni[j]->_ocjena;
  121.         }
  122.     }
  123.     for (int i = 0; i < max; i++)
  124.     {
  125.         if (niz[i] < niz[i + 1])
  126.         {
  127.             float temp = niz[i];
  128.             niz[i] = niz[i + 1];
  129.             niz[i + 1] = temp;
  130.             br = br - 1;
  131.         }
  132.     }
  133.     return niz[0] / s[br].brojPolozenih;
  134.  
  135. }
  136. void main()
  137. {
  138.     int max = 3;
  139.     Student * niz = new Student[max];
  140.     niz[0].Unos("Nedim Pecanin");
  141.     niz[1].Unos("Uma Pecanin");
  142.     niz[2].Unos("Amina Obucina");
  143.  
  144.     PolozeniPredmet p1; p1.Unos("Uvod u programiranje", 8, 1);
  145.     PolozeniPredmet p2; p2.Unos("Programiranje 1", 7, 2);
  146.     PolozeniPredmet p3; p3.Unos("Programiranje 2", 9, 3);
  147.  
  148.     niz[0].AddPolozeni(p1); niz[0].AddPolozeni(p2);
  149.     niz[1].AddPolozeni(p1); niz[1].AddPolozeni(p2); niz[1].AddPolozeni(p2);
  150.     niz[2].AddPolozeni(p1); niz[2].AddPolozeni(p2); niz[2].AddPolozeni(p3);
  151.  
  152.     cout << niz[1].RemovePolozeni("Programiranje 2");
  153.     cout << niz[2].RemovePolozeni("Uvod u programiranje");
  154.  
  155.     cout << endl << niz[1].GetProsjekBySemestar(2) << endl;
  156.     PolozeniPredmet * novi = niz[1].GetPolozeniByNaziv("ramir");
  157.     cout << novi[0]._naziv << endl;
  158.  
  159.     cout << "Prosjek ocjena najboljeg studenta je: " << PronadjiNajboljeStudenta(niz, max);
  160.  
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement