Advertisement
limun11

PRII - 8. Enumeracije i unije

Apr 25th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.26 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. char crt[]="============================\n";
  4.  
  5. enum Odgovori { TACNO, NETACNO };
  6.  
  7. void main()
  8. {
  9.     Odgovori mojOdgovor;
  10.     int unos;
  11.  
  12.     do
  13.     {
  14.         cout << "Fit je lociran u Mostaru? \n (0-Tacno, 1-Netacno): ";
  15.         cin >> unos;
  16.  
  17.         mojOdgovor = (Odgovori)unos;
  18.     } while (mojOdgovor != TACNO && mojOdgovor != NETACNO);
  19.  
  20.     if (mojOdgovor == TACNO)
  21.         cout << "Odgovor je tacan! " << endl;
  22.     else
  23.         cout << "Posjetite www.fit.ba -> O fakultetu - Kontakti" << endl;
  24.  
  25.     system("PAUSE");
  26. }
  27.  
  28. /////
  29.  
  30. #include <iostream>
  31. using namespace std;
  32. char crt[] = "===================================\n";
  33.  
  34. //RAZLIKA IZMEĐU STRUKTURA I UNIJA
  35.  
  36. struct Struktura
  37. {
  38.     int sClan1;
  39.     float sClan2;
  40. };
  41.  
  42. union Unija
  43. {
  44.     int uClan1;
  45.     float uClan2;
  46. };
  47.  
  48. void main()
  49. {
  50.     Struktura s;
  51.     Unija u;
  52.  
  53.     cout << crt << "\tUNIJA::ISTE ADRESE" << crt;
  54.     cout << "&u.uClan1= " << &u.uClan1 << endl;
  55.     cout << "&u.uClan2= " << &u.uClan2;
  56.  
  57.     cout << crt << "\tSTRUKTURA::RAZLICITE ADRESE" << crt;
  58.     cout << "&s.sClan1= " << &s.sClan1 << endl;
  59.     cout << "&s.sClan2= " << &s.sClan2 << crt;
  60.  
  61.     system("PAUSE");
  62. }
  63.  
  64. /////
  65.  
  66. #include <iostream>
  67. using namespace std;
  68. char crt[] = "\n================================\n";
  69.  
  70. union Unija
  71. {
  72.     int uClan1;
  73.     float uClan2;
  74. };
  75.  
  76. void main()
  77. {
  78.     Unija u;
  79.     u.uClan1 = 125;
  80.     cout << "u.uClan1= " << u.uClan1 << endl;
  81.     cout << "u.uClan2= " << u.uClan2 << crt;
  82.  
  83.     u.uClan2 = 32.5;
  84.     cout << "u.uClan1= " << u.uClan1 << endl;
  85.     cout << "u.uClan2= " << u.uClan2 << crt;
  86.  
  87.     system("PAUSE");
  88. }
  89.  
  90. /////
  91.  
  92. #include <iostream>
  93. using namespace std;
  94. char crt[] = "\n==================================\n";
  95.  
  96. struct Student
  97. {
  98.     int _brojIndeksa;
  99.     char _imePrezime[30];
  100. };
  101.  
  102. enum TipPodatka {eStudent, eInteger, eBool, eFloat};
  103. //prefiks 2 znak za clanove enumeracije
  104.  
  105. struct Strukutra
  106. {
  107.     TipPodatka _Tip;
  108.     union
  109.     {
  110.         int _Integer;
  111.         bool _Bool;
  112.         float _Float;
  113.         Student _Student;
  114.     };
  115. };
  116.  
  117. void Ispis(const Strukutra & objekat)
  118. {
  119.     switch (objekat._Tip)
  120.     {
  121.     case eBool:
  122.         cout << "Bool atribut: " << objekat._Bool << endl; break;
  123.     case eInteger:
  124.         cout << "Integer atribut: " << objekat._Integer << endl; break;
  125.     case eFloat:
  126.         cout << "Float atribut: " << objekat._Float << endl; break;
  127.     case eStudent:
  128.         cout << "Indeks: " << objekat._Student._brojIndeksa;
  129.         cout << " Ime: " << objekat._Student._imePrezime << endl;
  130.         break;
  131.     }
  132. }
  133.  
  134. void Unos(Strukutra & objekat)
  135. {
  136.     TipPodatka tip;
  137.     int unos;
  138.     do
  139.     {
  140.         cout << "Odaberite tip podatka (1.Student, 2.Integer, 3.Bool, 4.Float): ";
  141.         cin >> unos;
  142.         --unos;
  143.  
  144.         tip = (TipPodatka)unos;
  145.     } while (tip != eStudent && tip != eInteger && tip != eBool && tip != eFloat);
  146.  
  147.     objekat._Tip = tip;
  148.  
  149.     switch (objekat._Tip)
  150.     {
  151.     case eBool:
  152.         cout << "Bool unos (0.False, 1.True): ";
  153.         cin >> objekat._Bool;
  154.         break;
  155.     case eInteger:
  156.         cout << "Integer unos: ";
  157.         cin >> objekat._Integer;
  158.         break;
  159.     case eFloat:
  160.         cout << "Float unos: ";
  161.         cin >> objekat._Float;
  162.         break;
  163.     case eStudent:
  164.         cout << "Student\nBroj indeksa: ";
  165.         cin >> objekat._Student._brojIndeksa;
  166.         cin.ignore();
  167.         cout << "Ime i prezime: ";
  168.         cin.getline(objekat._Student._imePrezime, 30);
  169.         break;
  170.     }
  171. }
  172.  
  173. void main()
  174. {
  175.     Strukutra objekat;
  176.     int brojac = 4;
  177.     do
  178.     {
  179.         Unos(objekat);
  180.         Ispis(objekat);
  181.     } while (--brojac > 0);
  182.  
  183.     system("PAUSE");
  184. }
  185.  
  186. /////
  187.  
  188. #include <iostream>
  189. #include <fstream>
  190. using namespace std;
  191. char * crt = "\n========================================\n";
  192.  
  193. enum NacinStudiranja { REDOVAN, DL };
  194.  
  195. enum GodinaStudija { PRVA = 1, DRUGA, TRECA, CETVRTA };
  196.  
  197. enum Odgovori { TACNO, NETACNO };
  198.  
  199. const int brojPitanja = 5;
  200.  
  201. struct Student {
  202.     int _brojIndeksa;
  203.     char _imePrezime[30];
  204.     bool _radioTest;
  205.     NacinStudiranja _nacin;
  206.     GodinaStudija _godina;
  207.     Odgovori _odgovori[brojPitanja];
  208. };
  209. void PrikaziPitanje(int rbPitanja) {
  210.     if (rbPitanja == 1)
  211.         cout << crt << "Enumeracije i unije su sinonimi ?" << crt;
  212.     else if (rbPitanja == 2)
  213.         cout << crt << "Moguce je kreirati anonimnu uniju ?" << crt;
  214.     else if (rbPitanja == 3)
  215.         cout << crt << "Svi clanovi unije koriste istu memorijsku lokaciju?" << crt;
  216.     else if (rbPitanja == 4)
  217.         cout << crt << "Svi clanovi strukture koriste istu memorijsku lokaciju? "<<crt;
  218.     else
  219.         cout << crt << "Unija moze biti deklarisana unutar strukture ?" << crt;
  220. }
  221. Odgovori GetTacanOdgovor(int rbPitanja) {
  222.     if (rbPitanja == 1)
  223.         return NETACNO;
  224.     if (rbPitanja == 2)
  225.         return TACNO;
  226.     if (rbPitanja == 3)
  227.         return TACNO;
  228.     if (rbPitanja == 4)
  229.         return NETACNO;
  230.     return TACNO;
  231. }
  232. int GetUspjehStudenta(Odgovori odgovori[]) {
  233.     int brojacTacnih = 0;
  234.     for (int i = 0; i<brojPitanja; i++)
  235.         if (odgovori[i] == GetTacanOdgovor(i + 1))
  236.             brojacTacnih++;
  237.     return brojacTacnih;
  238. }
  239. void PokreniTest(Student & student) {
  240.     int unos;
  241.     Odgovori temp;
  242.     for (int i = 0; i<brojPitanja; i++) {
  243.         do {
  244.             PrikaziPitanje(i + 1);
  245.             cout << "Odgovor (1.Tacno,2.Netacno): ";
  246.             cin >> unos;
  247.             unos--;
  248.             temp = (Odgovori)unos;
  249.         } while (temp != TACNO && temp != NETACNO);
  250.         student._odgovori[i] = temp;
  251.     }
  252.     student._radioTest = true;
  253. }
  254. void UnosPodataka(Student * niz, int max) {
  255.     int unos;
  256.     for (int i = 0; i<max; i++) {
  257.         cout << crt << "\t::STUDENT " << i + 1 << "::" << crt;
  258.         cout << "Unesite ime i prezime: ";
  259.         cin.getline(niz[i]._imePrezime, 30);
  260.         cout << "Unesite broj indeksa: ";
  261.         cin >> niz[i]._brojIndeksa;
  262.         cout << "Nacin studiranja (1.Redovan, 2.DL): ";
  263.         cin >> unos;
  264.         niz[i]._nacin = (NacinStudiranja)--unos;
  265.         cout << "Nacin godinu studija (1,2,3,4): ";
  266.         cin >> unos;
  267.         niz[i]._godina = (GodinaStudija)unos;
  268.         cin.ignore();
  269.         niz[i]._radioTest = false;//tek smo kreirali studenta
  270.                                   //tako da je sigurno da test nije radjen
  271.     }
  272. }
  273. void Pretraga(Student * niz, int max) {
  274.     //definisati funkciju(e) koja(e) ce omoguciti pretragu po:
  275.     //1. godini studija
  276.     //2. nacinu studiranja
  277.     //3. rezultatima ostvarenim na testu
  278.     //Nove funkcionalnosti dodati u funkciju PrikaziMeni
  279.     for (int i = 0; i < max; i++)
  280.     {
  281.         int unosGodinaStudija;
  282.         cout << "Unesite godinu studija: ";
  283.         cin >> unosGodinaStudija;
  284.         GodinaStudija godina = (GodinaStudija)unosGodinaStudija;
  285.  
  286.         int unosNacinStudiranja;
  287.         cout << "Unesite nacin studiranja: ";
  288.         cin >> unosNacinStudiranja;
  289.         NacinStudiranja nacin = (NacinStudiranja)unosNacinStudiranja;
  290.  
  291.         int rezultat;
  292.         cout << "Unesite minimalni rezultat na testu: ";
  293.         cin >> rezultat;
  294.  
  295.         int poeni = 0;
  296.         int brojTacnih = GetUspjehStudenta(niz->_odgovori);
  297.         poeni = float(brojTacnih/brojPitanja) * 100;
  298.  
  299.         bool b1, b2, b3;
  300.         b1 = niz->_godina == godina;
  301.         b2 = niz->_nacin == nacin;
  302.         b3 = poeni >= rezultat;
  303.  
  304.         if (b1 && b2 && b3)
  305.             cout << niz->_imePrezime << endl;
  306.     }
  307. }
  308. int PrikaziMeni() {
  309.     int izbor;
  310.     do {
  311.         cout << crt << "\t::MENI::" << crt;
  312.         cout << "1. Pokreni test" << endl;
  313.         cout << "2. Prikazi rezultate" << endl;
  314.         cout << "3. Kraj rada" << crt;
  315.         cout << "Unesite izbor: ";
  316.         cin >> izbor;
  317.     } while (izbor<1 || izbor>3);
  318.     return izbor;
  319. }
  320. int PrikaziStudente(Student * niz, int max) {
  321.     int rb;
  322.     do {
  323.         for (int i = 0; i<max; i++)
  324.             cout << i + 1 << ". " << niz[i]._imePrezime << endl;
  325.         cout << crt << "Unesite redni broj studenta: ";
  326.         cin >> rb;
  327.     } while (rb<1 || rb>max);
  328.     return rb - 1;
  329. }
  330. //dodati sljedece funkcionalnosti:
  331. //1.administratoru omoguciti da unosi pitanja te definise tacne odgovore
  332. //2.administratoru dati prava da studentu ponovo omoguci polaganje testa
  333. //3.uvesti username/password na osnovu koga ce se studenti logirati
  334. //4.odvojiti administratorske funkcije (meni) od korisnickih
  335. void main() {
  336.     int max, izbor, student;
  337.     cout << "Unesite broj studenata: ";
  338.     cin >> max;
  339.     cin.ignore();
  340.     Student * niz = new Student[max];
  341.     UnosPodataka(niz, max);
  342.     system("cls");
  343.     do {
  344.         izbor = PrikaziMeni();
  345.         if (izbor == 3)
  346.             break;
  347.         student = PrikaziStudente(niz, max);
  348.         //pokusajte pojednostaviti naredni dio koda, te smanjiti brojnepotrebnih provjera
  349.             if (izbor == 1) {
  350.                 if (niz[student]._radioTest == false)
  351.                     PokreniTest(niz[student]);
  352.                 else
  353.                     cout << "Student " << niz[student]._imePrezime << " je vec radio test!"<<endl;
  354.             }
  355.         if (izbor == 2) {
  356.             if (niz[student]._radioTest == true) {
  357.                 int brojTacnih =
  358.                     GetUspjehStudenta(niz[student]._odgovori);
  359.                 cout << crt << "Uspjeh studenta"<<brojTacnih<<" / "<<brojPitanja<<" ili "<<(brojTacnih*100.0)/brojPitanja<<"%"<<crt;
  360.             }
  361.             else
  362.                 cout << "Student " << niz[student]._imePrezime << " jos uvijek nije radio test!"<<endl;
  363.         }
  364.         system("pause>0");
  365.         system("cls");
  366.     } while (1);
  367.     delete[] niz;
  368.     niz = NULL;
  369.     system("pause");
  370. }
  371.  
  372. /////
  373.  
  374. /*U prethodni zadatak implementirati funkciju
  375. 1. administratoru omoguciti da unosi pitanja te definise tačne odgovore
  376. 2. administratoru dati prava da studentu ponovo omogući polaganje testa
  377. 3. uvesti username/password na osnovu koga će se studenti logirati
  378. 4. odvojiti administratorske funkcije (meni) od korisničkih
  379. 5. dodati enumeraciju za korisničku ulogu
  380. */
  381.  
  382. #include <iostream>
  383. #include <fstream>
  384. using namespace std;
  385. char * crt = "\n========================================\n";
  386.  
  387. enum NacinStudiranja { REDOVAN, DL };
  388.  
  389. enum GodinaStudija { PRVA = 1, DRUGA, TRECA, CETVRTA };
  390.  
  391. enum Odgovori { TACNO, NETACNO };
  392.  
  393. const int brojPitanja = 5;
  394. const int maxBrojPitanja = 100;
  395. int brojPitanja1 = 0;
  396.  
  397. struct Student {
  398.     int _brojIndeksa;
  399.     char _imePrezime[30];
  400.     bool _radioTest;
  401.     NacinStudiranja _nacin;
  402.     GodinaStudija _godina;
  403.     Odgovori _odgovori[brojPitanja];
  404. };
  405.  
  406. struct Pitanja
  407. {
  408.     char tekstPitanja[100];
  409.     Odgovori odogovrNaPitanje;
  410. };
  411.  
  412. Pitanja pitanjaDV[maxBrojPitanja];
  413.  
  414. void Dodaj(char * tekstPitanja, Odgovori tacanOdgovor)
  415. {
  416.     Pitanja pitanje;
  417.     strcpy_s(pitanje.tekstPitanja, tekstPitanja);
  418.  
  419.     pitanje.odogovrNaPitanje = tacanOdgovor;
  420.  
  421.     pitanjaDV[brojPitanja] = pitanje;
  422.     brojPitanja1++;
  423. }
  424.  
  425. void dodajDefaultPitanja()
  426. {
  427.     Dodaj("Enumeracije i unije su sinonimi ?", NETACNO);
  428.     Dodaj("Moguce je kreirati anonimnu uniju ?", TACNO);
  429.     Dodaj("Svi clanovi unije koriste istu memorijsku lokaciju?", TACNO);
  430.     Dodaj("Svi clanovi strukture koriste istu memorijsku lokaciju ? ", NETACNO);
  431.     Dodaj("Unija moze biti deklarisana unutar strukture ?", TACNO);
  432. }
  433.  
  434. void PrikaziPitanje(int rbPitanja) {
  435.     /*if (rbPitanja == 1)
  436.         cout << crt << "Enumeracije i unije su sinonimi ?" << crt;
  437.     else if (rbPitanja == 2)
  438.         cout << crt << "Moguce je kreirati anonimnu uniju ?" << crt;
  439.     else if (rbPitanja == 3)
  440.         cout << crt << "Svi clanovi unije koriste istu memorijsku lokaciju?" << crt;
  441.     else if (rbPitanja == 4)
  442.         cout << crt << "Svi clanovi strukture koriste istu memorijsku lokaciju? " << crt;
  443.     else
  444.         cout << crt << "Unija moze biti deklarisana unutar strukture ?" << crt;*/
  445.  
  446.     cout << pitanjaDV[rbPitanja].tekstPitanja << endl;
  447. }
  448.  
  449. Odgovori GetTacanOdgovor(int rbPitanja) {
  450.     /*if (rbPitanja == 1)
  451.         return NETACNO;
  452.     if (rbPitanja == 2)
  453.         return TACNO;
  454.     if (rbPitanja == 3)
  455.         return TACNO;
  456.     if (rbPitanja == 4)
  457.         return NETACNO;
  458.     return TACNO;*/
  459.     return pitanjaDV[rbPitanja].odogovrNaPitanje;
  460. }
  461. int GetUspjehStudenta(Odgovori odgovori[]) {
  462.     int brojacTacnih = 0;
  463.     for (int i = 0; i<brojPitanja; i++)
  464.         if (odgovori[i] == GetTacanOdgovor(i + 1))
  465.             brojacTacnih++;
  466.     return brojacTacnih;
  467. }
  468. void PokreniTest(Student & student) {
  469.     int unos;
  470.     Odgovori temp;
  471.     for (int i = 0; i<brojPitanja; i++) {
  472.         do {
  473.             PrikaziPitanje(i + 1);
  474.             cout << "Odgovor (1.Tacno,2.Netacno): ";
  475.             cin >> unos;
  476.             unos--;
  477.             temp = (Odgovori)unos;
  478.         } while (temp != TACNO && temp != NETACNO);
  479.         student._odgovori[i] = temp;
  480.     }
  481.     student._radioTest = true;
  482. }
  483. void UnosPodataka(Student * niz, int max) {
  484.     int unos;
  485.     for (int i = 0; i<max; i++) {
  486.         cout << crt << "\t::STUDENT " << i + 1 << "::" << crt;
  487.         cout << "Unesite ime i prezime: ";
  488.         cin.getline(niz[i]._imePrezime, 30);
  489.         cout << "Unesite broj indeksa: ";
  490.         cin >> niz[i]._brojIndeksa;
  491.         cout << "Nacin studiranja (1.Redovan, 2.DL): ";
  492.         cin >> unos;
  493.         niz[i]._nacin = (NacinStudiranja)--unos;
  494.         cout << "Nacin godinu studija (1,2,3,4): ";
  495.         cin >> unos;
  496.         niz[i]._godina = (GodinaStudija)unos;
  497.         cin.ignore();
  498.         niz[i]._radioTest = false;//tek smo kreirali studenta
  499.                                   //tako da je sigurno da test nije radjen
  500.     }
  501. }
  502. void Pretraga(Student * niz, int max) {
  503.     //definisati funkciju(e) koja(e) ce omoguciti pretragu po:
  504.     //1. godini studija
  505.     //2. nacinu studiranja
  506.     //3. rezultatima ostvarenim na testu
  507.     //Nove funkcionalnosti dodati u funkciju PrikaziMeni
  508.     for (int i = 0; i < max; i++)
  509.     {
  510.         int unosGodinaStudija;
  511.         cout << "Unesite godinu studija: ";
  512.         cin >> unosGodinaStudija;
  513.         GodinaStudija godina = (GodinaStudija)unosGodinaStudija;
  514.  
  515.         int unosNacinStudiranja;
  516.         cout << "Unesite nacin studiranja: ";
  517.         cin >> unosNacinStudiranja;
  518.         NacinStudiranja nacin = (NacinStudiranja)unosNacinStudiranja;
  519.  
  520.         int rezultat;
  521.         cout << "Unesite minimalni rezultat na testu: ";
  522.         cin >> rezultat;
  523.  
  524.         int poeni = 0;
  525.         int brojTacnih = GetUspjehStudenta(niz->_odgovori);
  526.         poeni = float(brojTacnih / brojPitanja) * 100;
  527.  
  528.         bool b1, b2, b3;
  529.         b1 = niz->_godina == godina;
  530.         b2 = niz->_nacin == nacin;
  531.         b3 = poeni >= rezultat;
  532.  
  533.         if (b1 && b2 && b3)
  534.             cout << niz->_imePrezime << endl;
  535.     }
  536. }
  537. int PrikaziMeni() {
  538.     int izbor;
  539.     do {
  540.         cout << crt << "\t::MENI::" << crt;
  541.         cout << "1. Pokreni test" << endl;
  542.         cout << "2. Prikazi rezultate" << endl;
  543.         cout << "3. Dodaj novo pitanje" << crt;
  544.         cout << "4. Kraj rada" << crt;
  545.         cout << "Unesite izbor: ";
  546.         cin >> izbor;
  547.     } while (izbor<1 || izbor>4);
  548.     return izbor;
  549. }
  550. int PrikaziStudente(Student * niz, int max) {
  551.     int rb;
  552.     do {
  553.         for (int i = 0; i<max; i++)
  554.             cout << i + 1 << ". " << niz[i]._imePrezime << endl;
  555.         cout << crt << "Unesite redni broj studenta: ";
  556.         cin >> rb;
  557.     } while (rb<1 || rb>max);
  558.     return rb - 1;
  559. }
  560. //dodati sljedece funkcionalnosti:
  561. //1.administratoru omoguciti da unosi pitanja te definise tacne odgovore
  562. //2.administratoru dati prava da studentu ponovo omoguci polaganje testa
  563. //3.uvesti username/password na osnovu koga ce se studenti logirati
  564. //4.odvojiti administratorske funkcije (meni) od korisnickih
  565. void main() {
  566.     int max, izbor, student;
  567.     cout << "Unesite broj studenata: ";
  568.     cin >> max;
  569.     cin.ignore();
  570.     Student * niz = new Student[max];
  571.     UnosPodataka(niz, max);
  572.     system("cls");
  573.     do {
  574.         izbor = PrikaziMeni();
  575.         if (izbor == 4)
  576.             break;
  577.         student = PrikaziStudente(niz, max);
  578.         //pokusajte pojednostaviti naredni dio koda, te smanjiti brojnepotrebnih provjera
  579.         if (izbor == 1) {
  580.             if (niz[student]._radioTest == false)
  581.                 PokreniTest(niz[student]);
  582.             else
  583.                 cout << "Student " << niz[student]._imePrezime << " je vec radio test!" << endl;
  584.         }
  585.         if (izbor == 2) {
  586.             if (niz[student]._radioTest == true) {
  587.                 int brojTacnih =
  588.                     GetUspjehStudenta(niz[student]._odgovori);
  589.                 cout << crt << "Uspjeh studenta" << brojTacnih << " / " << brojPitanja << " ili " << (brojTacnih*100.0) / brojPitanja << "%" << crt;
  590.             }
  591.             else
  592.                 cout << "Student " << niz[student]._imePrezime << " jos uvijek nije radio test!" << endl;
  593.         }
  594.         if (izbor == 3)
  595.         {
  596.             cout << "tekst pitanja" << endl;
  597.             char p[100];
  598.             cin.ignore();
  599.             cin.getline(p, 100);
  600.  
  601.             int x;
  602.             cout << "Tacno1, Netacno2" << endl;
  603.             cin >> x;
  604.             Odgovori g = (Odgovori) x;
  605.             Dodaj(p, g);
  606.         }
  607.         system("pause>0");
  608.         system("cls");
  609.     } while (1);
  610.     delete[] niz;
  611.     niz = NULL;
  612.     system("pause");
  613. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement