Advertisement
limun11

PRII -I par. vježba rješenje

Apr 6th, 2017
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.83 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. struct Datum
  4. {
  5.     int Dan, Mjesec, Godina;
  6. };
  7. void Unos(Datum *datum)
  8. {
  9.     cout << "Unesi dan, mjesec i godinu: ";
  10.     cin >> datum->Dan >> datum->Mjesec >> datum->Godina;
  11. }
  12. void Ispis(Datum datum)
  13. {
  14.     cout << "Dan / Mjesec / Godina" << endl;
  15.     cout << datum.Dan << "/" << datum.Mjesec << "/" << datum.Godina << endl;
  16. }
  17. struct PolozeniPredmet
  18. {
  19.     char Naziv[30];
  20.     int Ects;
  21.     int Ocjena;
  22.     Datum DatumPolaganja;
  23. };
  24. void Unos(PolozeniPredmet *polozeniPredmet)
  25. {
  26.     cin.ignore();
  27.     cout << "Unesi naziv predmeta: ";
  28.     cin.getline(polozeniPredmet->Naziv, 29);
  29.     cout << "Unesi broj ECTS bodova: ";
  30.     cin >> polozeniPredmet->Ects;
  31.     cout << "Unesi ocjenu: ";
  32.     cin >> polozeniPredmet->Ocjena;
  33.     cout << "Unesi datum polaganja: ";
  34.     Unos(&polozeniPredmet->DatumPolaganja);
  35. }
  36. void Ispis(PolozeniPredmet polozeniPredmet)
  37. {
  38.     cout << "Naziv polozenog predmeta je : " << polozeniPredmet.Naziv << endl;
  39.     cout << "Broj ECTS bodova: " << polozeniPredmet.Ects << endl;
  40.     cout << "Ocjena je : " << polozeniPredmet.Ocjena << endl;
  41.     cout << "Datum polaganja je : ";
  42.     Ispis(polozeniPredmet.DatumPolaganja);
  43. }
  44. struct Student
  45. {
  46.     char ImePrezime[30];
  47.     char BrojIndeksa[15];
  48.     int GodinaStudija;
  49.     PolozeniPredmet PolozeniPredmeti[30];
  50.     int BrojacPolozenih;
  51. };
  52. void Unos(Student *student)
  53. {
  54.     cin.ignore();
  55.     cout << "Unesi ime i prezime studenta: ";
  56.     cin.getline(student->ImePrezime, 29);
  57.     cout << "Unesi broj indeksa: ";
  58.     cin.getline(student->BrojIndeksa, 14);
  59.     cout << "Unesi godinu studija: ";
  60.     cin >> student->GodinaStudija;
  61.     student->BrojacPolozenih = 0;
  62. }
  63. void Ispis(Student student)
  64. {
  65.     cout << "Ime i prezime: " << student.ImePrezime << endl;
  66.     cout << "Broj indeksa : " << student.BrojIndeksa << endl;
  67.     cout << "Godina studija: " << student.GodinaStudija << endl;
  68.     for (int i = 0; i < student.BrojacPolozenih; i++) {
  69.         Ispis(student.PolozeniPredmeti[i]);
  70.         cout << "_____________________________________ " << endl;
  71.     }
  72. }
  73. Student *GetPokazivac(Student *pok, int velicina, char trazeniIndeks[])
  74. {
  75.     for (int i = 0; i < velicina; i++)
  76.     {
  77.         if (strcmp(pok[i].BrojIndeksa, trazeniIndeks) == 0) {
  78.             return &pok[i];
  79.         }
  80.     }
  81.     return NULL;
  82. }
  83. void Pretraga(Student *pok, int velicina)
  84. {
  85.     char PojamPretrage[30];
  86.     cin.ignore();
  87.     cout << "Unesi pojam pretrage: ";
  88.     cin.getline(PojamPretrage, 29);
  89.     bool pronadjen = false;
  90.     for (int i = 0; i < velicina; i++) {
  91.         if (strstr(pok[i].ImePrezime, PojamPretrage) != NULL);
  92.         {
  93.             Ispis(pok[i]);
  94.             pronadjen = true;
  95.         }
  96.     }
  97.     if (pronadjen == false) {
  98.         cout << "Nema rezultata pretrage." << endl;
  99.     }
  100. }
  101. bool DodajPolozeni(Student *student, PolozeniPredmet polozeniPredmet)
  102. {
  103.     if (student->BrojacPolozenih == 30) {
  104.         return false;
  105.     }
  106.     for (int i = 0; i < student->BrojacPolozenih; i++) {
  107.         if (strcmp(polozeniPredmet.Naziv, student->PolozeniPredmeti[i].Naziv) == 0) {
  108.             if (polozeniPredmet.Ocjena > student->PolozeniPredmeti[i].Ocjena) {
  109.                 student->PolozeniPredmeti[student->BrojacPolozenih] = polozeniPredmet;
  110.                 student->BrojacPolozenih++;
  111.                 return true;
  112.             }
  113.             return false;
  114.         }
  115.     }
  116.     student->PolozeniPredmeti[student->BrojacPolozenih] = polozeniPredmet;
  117.     student->BrojacPolozenih++;
  118.     return true;
  119. }
  120. Student *GetNajbolji(Student *niz, int brojac, char NazivPredmeta[], Student *najbolji = NULL)
  121. {
  122.     //Funkcija treba rekurzijom vratiti studenta koji ima najvecu
  123.     //ocjenu na primljenom predmetu.
  124.     //U slucaju da ne postoji student koji je polozio primljeni predmet
  125.     //funkcija vraca NULL.
  126.     if (brojac < 0) {
  127.         return najbolji;
  128.     }
  129.     for (size_t i = 0; i < niz[brojac].BrojacPolozenih; i++)
  130.     {
  131.         if (strcmp(NazivPredmeta, niz[brojac].PolozeniPredmeti[i].Naziv) == 0) {
  132.             if (najbolji == NULL) {
  133.                 najbolji = &niz[brojac];
  134.             }
  135.             else {
  136.                 for (size_t j = 0; j < najbolji->BrojacPolozenih; j++)
  137.                 {
  138.                     if (strcmp(NazivPredmeta, najbolji->PolozeniPredmeti[j].Naziv) == 0) {
  139.                         if (niz[brojac].PolozeniPredmeti[i].Ocjena > najbolji->PolozeniPredmeti[j].Ocjena) {
  140.                             najbolji = &niz[brojac];
  141.                         }
  142.                     }
  143.                 }
  144.             }
  145.             return GetNajbolji(niz, brojac - 1, NazivPredmeta, najbolji);
  146.         }
  147.         void main()
  148.         {
  149.  
  150.             int velicina;
  151.             cout << "Unesi broj studenata: ";
  152.             cin >> velicina;
  153.             Student * niz = new Student[velicina];
  154.             for (size_t i = 0; i < velicina; i++)
  155.             {
  156.                 Unos(&niz[i]);
  157.             }
  158.             PolozeniPredmet predmet1, predmet2;
  159.             Unos(&predmet1);
  160.             Unos(&predmet2);
  161.  
  162.             //2 studenta kreirati
  163.  
  164.             DodajPolozeni(&niz[0], predmet1);
  165.             DodajPolozeni(&niz[1], predmet2);
  166.  
  167.  
  168.             for (size_t i = 0; i < velicina; i++)
  169.             {
  170.                 Ispis(niz[i]);
  171.             }
  172.  
  173.             Student * pokazivac = GetPokazivac(niz, velicina, "IB160143");
  174.             if (pokazivac != NULL) {
  175.                 cout << ":: STUDENT PRONADJEN:: " << endl;
  176.                 Ispis(*pokazivac);
  177.             }
  178.             else
  179.             {
  180.                 cout << ":: STUDENT NIJE PRONADJEN :: " << endl;
  181.             }
  182.             Pretraga(pokazivac, velicina);
  183.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement