Advertisement
Guest User

kera_PR2

a guest
Apr 25th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.31 KB | None | 0 0
  1. #include "stdafx.h"
  2. using namespace std;
  3.  
  4. const char * crt = "\n---------------------------\n";
  5. bool pokrenut = false;
  6. struct Odgovor {
  7.     bool tacan;
  8.     char * tekstOdgovora;
  9. };
  10. struct Pitanje {
  11.     char * tekstPitanja;
  12.     Odgovor odgovori[5];
  13.     int brojOdgovora;
  14.     int brojBodova;
  15.  
  16. };
  17.  
  18. void DodajPitanje(Pitanje * p)
  19. {
  20.     char tekst[100];
  21.     cout << "Unesite tekst pitanja -> ";
  22.     cin.getline(tekst, 100);
  23.     int size = strlen(tekst);
  24.     p->tekstPitanja = new char[size + 1];
  25.     strcpy_s(p->tekstPitanja, size + 1, tekst);
  26.     strcpy_s(tekst, "");
  27.  
  28.     cout << "Koliko odgovora unosite -> ";
  29.     do
  30.     {
  31.         cin >> p->brojOdgovora;
  32.         cin.ignore();
  33.     } while (p->brojOdgovora < 0 || p->brojOdgovora > 5);
  34.  
  35.     for (int i = 0; i < p->brojOdgovora; i++)
  36.     {
  37.         cout << "Odgovor " << i + 1 << ". -> ";
  38.         cin.getline(tekst, 100);
  39.         int size = strlen(tekst);
  40.         p->odgovori[i].tekstOdgovora = new char[size + 1];
  41.         strcpy_s(p->odgovori[i].tekstOdgovora, size + 1, tekst);
  42.         strcpy_s(tekst, "");
  43.     }
  44.  
  45.     int tacan;
  46.     cout << "Koji od unesenih je tacan odgovor -> ";
  47.     cin >> tacan;
  48.     cin.ignore();
  49.     p->odgovori[tacan - 1].tacan = true;
  50.  
  51.     int bodovi;
  52.     cout << "Koliko bodova nosi ovo pitanje -> ";
  53.     cin >> p->brojBodova;
  54.     cin.ignore();
  55.  
  56. }
  57.  
  58. int * PokreniKviz(Pitanje * pitanja[], int max)
  59. {
  60.     if (pokrenut == true)
  61.         return nullptr;
  62.  
  63.     int * odgovori = new int[max], br = 0, unos;
  64.     for (int i = 0; i < max; i++)
  65.     {
  66.         if (pitanja[i] == nullptr)
  67.             continue;
  68.  
  69.         system("cls");
  70.         cout << crt << pitanja[i]->tekstPitanja << crt;
  71.         for (int j = 0; j < pitanja[i]->brojOdgovora; j++)
  72.             cout << j + 1 << ". " << pitanja[i]->odgovori[j].tekstOdgovora << endl;
  73.         cout << crt << "Vas odgovor -> ";
  74.         cin >> unos;
  75.         odgovori[br++] = unos - 1;
  76.         cin.ignore();
  77.         cout << crt;
  78.     }
  79.     pokrenut = true;
  80.     return odgovori;
  81. }
  82.  
  83. void PrikaziRezultat(Pitanje * pitanja[], int * odgovori, int max)
  84. {
  85.     int i = 0, bodovi = 0, ukupniBodovi = 0;
  86.     cout << crt << "REZULTATI" << crt;
  87.     while (pitanja[i] != nullptr)
  88.     {
  89.         if (pitanja[i]->odgovori[odgovori[i]].tacan == true)
  90.         {
  91.             bodovi += pitanja[i]->brojBodova;
  92.             ukupniBodovi += pitanja[i]->brojBodova;
  93.             cout << i + 1 << ". Pitanje -> TACNO" << endl;
  94.         }
  95.         else
  96.         {
  97.             ukupniBodovi += pitanja[i]->brojBodova;
  98.             cout << i + 1 << ". Pitanje -> NETACNO" << endl;
  99.         }
  100.         i++;
  101.     }
  102.  
  103.     cout << crt << "USPJEH: " << bodovi << "/" << ukupniBodovi << "  (" << (int)((float)(bodovi / ukupniBodovi) * 100) << "%)" << crt;
  104.     system("Pause");
  105. }
  106.  
  107. void Dealociraj(Pitanje * pitanja[], int * odgovori, int brojPitanja)
  108. {
  109.     delete[] odgovori;
  110.     odgovori = nullptr;
  111.  
  112.     for (int i = 0; i < brojPitanja; i++)
  113.     {
  114.         delete pitanja[i];
  115.         pitanja[i] = nullptr;
  116.     }
  117. }
  118.  
  119. int PrikaziMenu() {
  120.     system("cls");
  121.     int izbor;
  122.     cout << crt << "\t::MENU::" << crt;
  123.     cout << "1. Dodaj pitanje" << endl;
  124.     cout << "2. Promijeni odgovor na pitanje" << endl;
  125.     cout << "3. Pokreni kviz" << endl;
  126.     cout << "4. Prikazi rezultat" << crt;
  127.     cout << "5. Kraj" << crt;
  128.     do {
  129.         cout << "Vas izbor -> ";
  130.         cin >> izbor;
  131.         cin.ignore();
  132.     } while (izbor < 1 || izbor>5);
  133.     system("cls");
  134.     return izbor;
  135. }
  136. void main() {
  137.     const int maxPitanja = 6;
  138.     int trenutnoPitanja = 0, izbor = 0;
  139.     Pitanje * ispitPRII[maxPitanja];
  140.     int * odgovoriNaPitanja = nullptr;
  141.     for (int i = 0; i < maxPitanja; i++)
  142.         ispitPRII[i] = nullptr;
  143.     /*VRSITI VALIDACIJU KORISNIKOVIH UNOSA TE GA ONEMOGUCITI DA UNOSI VRIJEDNOSTI KOJE NISU VALIDNE*/
  144.     do {
  145.         izbor = PrikaziMenu();
  146.         if (izbor == 1) {
  147.             ispitPRII[trenutnoPitanja] = new Pitanje();
  148.             DodajPitanje(ispitPRII[trenutnoPitanja]);
  149.             /*
  150.             Unesite tekst pitanja -> U kojem gradu se nalazi FIT?
  151.             Koliko odgovora unosite -> 4
  152.             Odgovor 1 -> Mostar
  153.             Odgovor 2 -> Sarajevo
  154.             Odgovor 3 -> Tuzla
  155.             Odgovor 4 -> Bihac
  156.             Koji od unesenih je tacan odgovor -> 1
  157.             Koliko bodova nosi ovo pitanje -> 3
  158.             */
  159.             trenutnoPitanja++;
  160.         }
  161.         else if (izbor == 2) {
  162.             /*PITANJA SE MOGU MIJENJATI SAMO AKO KVIZ NIJE URADJEN!*/
  163.             //PromijeniOdgovor(ispitPRII, trenutnoPitanja);
  164.             /*
  165.             Unesite odgovor ili dio odgovora za pretragu -> ac
  166.             Odgovor Bihac pronadjen u pitanju: U kojem gradu se nalazi FIT?
  167.             Da li je ovo odgovor koji biste zeljeli promijeniti (d/n) -> d
  168.             Unesite novi odgovor -> Zenica
  169.             Da li zelite postaviti novi odgovor kao tacan (d/n) -> d
  170.             */
  171.         }
  172.         else if (izbor == 3) {
  173.             /*ONEMOGUCITI VISESTRUKO POKRETANJE KVIZA!*/
  174.             //if (trenutnoPitanja >= 3) /*KVIZ MORA IMAT NAJMANJE 3 PITANJA*/
  175.             odgovoriNaPitanja = PokreniKviz(ispitPRII, maxPitanja);
  176.             /*
  177.             -------------------------------
  178.             1. U kojem gradu se nalazi FIT?
  179.             -------------------------------
  180.             1. Mostar
  181.             2. Sarajevo
  182.             3. Tuzla
  183.             4. Zenica
  184.             -------------------------------
  185.             Vas odgovor -> 1
  186.             -------------------------------
  187.             2. Naredno pitanje...
  188.             */
  189.         }
  190.         else if (izbor == 4) {
  191.             /*REZULTATI SE PRIKAZUJU SAMO AKO JE KVIZ URADJEN*/
  192.             PrikaziRezultat(ispitPRII, odgovoriNaPitanja, maxPitanja);
  193.             /*
  194.             -------------------------------
  195.             REZULTATI
  196.             -------------------------------
  197.             1. Pitanje -> TACNO
  198.             2. Pitanje -> NETACNO
  199.             3. Pitanje -> NETACNO
  200.             ...
  201.             -------------------------------
  202.             USPJEH: 10/20 BODOVA (50%)
  203.             -------------------------------
  204.             */
  205.         }
  206.  
  207.     } while (izbor != 5);
  208.  
  209.  
  210.     /*oslobađa zauzetu memoriju*/
  211.     Dealociraj(ispitPRII, odgovoriNaPitanja, trenutnoPitanja);
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement