Advertisement
wiuu23

Untitled

Jun 4th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.77 KB | None | 0 0
  1. #include <iostream>
  2. #include<tuple>
  3. #include <cstring>
  4. const char * crt = "\n-------------------------------------\n";
  5. using namespace std;
  6. struct Putnik
  7. {
  8.     char * _imePrezime;
  9.     //pretpostavka je da ce se uvijek unijeti validna oznaka sjedista u formatu XXA gdje je XX dvocifreni broj, a A
  10.     //predstavlja veliko slovo.Jednocifrene oznake ce imati prefiks 0
  11.     char _ozankaSjedista[4]; //npr. 02A, 12B, 14B, 28C -> broj predstavlja oznaku reda, a slovo oznaku kolone
  12. };
  13. struct Let
  14. {
  15.     char * _relacija;//Mostar -> Sarajevo
  16.     Putnik * _putnici;
  17.     int _trenutnoPutnika;
  18.     int _brojRedovaUAvionu;
  19.     int _brojKolonaUAvionu;//broj kolona mora biti paran >=4 i <=10
  20. };
  21. void Dealociraj(Let & let) {
  22.     delete[] let._relacija; let._relacija = nullptr;
  23.     for (size_t i = 0; i < let._trenutnoPutnika; i++) {
  24.         delete[] let._putnici[i]._imePrezime;
  25.         let._putnici[i]._imePrezime = nullptr;
  26.     }
  27.     delete[] let._putnici;
  28.     let._putnici = nullptr;
  29. }
  30.  
  31. void Unos(Let & let, const char * relacijaOnaKojuUpisujem, int broj_redova, int broj_kolona)
  32. {
  33.     int size = strlen(relacijaOnaKojuUpisujem) + 1;
  34.     let._relacija = new char[size];
  35.     strcpy_s(let._relacija, size, relacijaOnaKojuUpisujem);
  36.  
  37.     let._brojRedovaUAvionu = broj_redova;
  38.     let._brojKolonaUAvionu = broj_kolona;
  39.  
  40.     let._putnici = nullptr;
  41.     let._trenutnoPutnika = 0;
  42.  
  43. }
  44. //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj.//poziciju u matrici
  45. pair <int, int> GetPozicijuUReduIKoloni(const char * oznaka)
  46. {
  47.     int prvaKoordinata, drugaKoordinata;
  48.     int pomocnaI, pomocnaII;
  49.     pair <int, int> rezultat;
  50.  
  51.     pomocnaI = oznaka[0] - '0';
  52.     pomocnaI = pomocnaI * 10;
  53.     pomocnaII = oznaka[1] - '0' - 1;
  54.     prvaKoordinata = pomocnaI + pomocnaII;
  55.     drugaKoordinata = oznaka[2] - 'A';//-------------------------------------------------------oznaka[2]
  56.     rezultat = make_pair(prvaKoordinata, drugaKoordinata);
  57.     return rezultat;
  58. }
  59. bool provjeraSjedista(const char * sjediste)
  60. {
  61.     if (!(sjediste[0] >= '0' && sjediste[0] <= '9')) //uslov: ne radi se o broju jer imamo negaciju (!)
  62.         return false;
  63.     if (!(sjediste[1] >= '0' && sjediste[1] <= '9')) ////uslov: ne radi se o broju jer imamo negaciju (!)
  64.         return false;
  65.     if (!(sjediste[2] >= 'A' && sjediste[2] <= 'Z')) //ako nije slovo vratit ces mi false
  66.         return false;
  67.  
  68.     return true;
  69. }
  70.  
  71. /* DodajPutnika - podatke o novom putniku dodaje u listu (niz)
  72. putnika na proslijedjenom letu.
  73. Onemoguciti dodavanje putnika sa istim imenom i prezimenom,
  74. nepostojecom lokacijom sjedista ili u slucaju da su sva mjesta
  75. popunjena
  76. */
  77. void kopirajPutnika(Putnik & original, Putnik & novi)
  78. {
  79.     strcpy_s(novi._ozankaSjedista, original._ozankaSjedista);
  80.  
  81.     int size = strlen(original._imePrezime) + 1;
  82.     novi._imePrezime = new char[size];
  83.     strcpy_s(novi._imePrezime, size, original._imePrezime);
  84.  
  85. }
  86. bool DodajPutnika(Let & let, Putnik & putnik)
  87. {
  88.     //provjere
  89.     for (int i = 0; i < let._trenutnoPutnika; i++)
  90.     {
  91.         if (strcmp(putnik._imePrezime, let._putnici[i]._imePrezime) == 0) //imaju li putnici s istim imenom
  92.             return false;
  93.         if (!(provjeraSjedista(putnik._ozankaSjedista) == true)) //provjera da li postoji nepostojeca lokacija sjedista
  94.             return false;
  95.         if (strcmp(putnik._ozankaSjedista, let._putnici[i]._ozankaSjedista) == 0) //da li se mjesto vec pojavljuje tj. popunjeno je
  96.             return false;
  97.     }
  98.  
  99.     Putnik * noviPomocniNiz = new Putnik[let._trenutnoPutnika + 1];
  100.     for (int i = 0; i < let._trenutnoPutnika; i++)
  101.     {
  102.         kopirajPutnika(let._putnici[i], noviPomocniNiz[i]); //kopiramo podatke o svim putnicima iz leta u pomocni niz tj. novi niz, ovdje civamo privremeno podatke o putnicima jer ce nam kasnije trebati
  103.     }
  104.     kopirajPutnika(putnik, noviPomocniNiz[let._trenutnoPutnika]); // ovdje smo upisali info o novom putniku
  105.     delete[] let._putnici;
  106.     let._putnici = noviPomocniNiz;
  107.     let._trenutnoPutnika++;
  108.     return true;
  109. }
  110.  
  111. /*
  112. //GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji
  113. //je inicijalizovan vrijednsotima proslijedjenih
  114. //parametara*/
  115. Putnik & GetNovogPutnika(const char * oznaka, const char * imePrezime)
  116. {
  117.     Putnik putnik;
  118.     int size = strlen(imePrezime) + 1;
  119.     putnik._imePrezime = new char[size];
  120.     strcpy_s(putnik._imePrezime, size, imePrezime);
  121.  
  122.     strcpy_s(putnik._ozankaSjedista, 4, oznaka);
  123.  
  124.     //ovim gore si vec sve upisala u putnika tako da samo vracas putnika jer je vec se sve pohranilo
  125.     return putnik;
  126. }
  127. ////PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao
  128. ////parametar
  129. //void PrikaziRasporedSjedenja(Let & let)
  130. //{
  131. //  for (int i = 0; i < let._trenutnoPutnika; i++)
  132. //  {
  133. //      cout << let._putnici[i]._imePrezime << " ";
  134. //      cout << let._putnici[i]._ozankaSjedista << endl;
  135. //  }
  136. //}
  137. ////rekBrojacKaraktera - rekurzivna funkcija koja vraca maksimalan broj karaktera u imenu i prezimenu putnika na odredjenom letu
  138. ////broj 0 je pocetno stanje prilikom
  139. ////brojanja max karaktera
  140. //int rekBrojacKaraktera(Let let, int brojPutnika, int brojac)
  141. //{
  142. //  return 0;
  143. //}
  144. int main() {
  145.     int oznakaR = 0, oznakaK = 0;
  146.     Let mostar_sarajevo;
  147.     //inicijalizuje vrijednosti atributa objekta mostar_sarajevo
  148.     Unos(mostar_sarajevo, "Mostar -> Sarajevo", 10, 4);//relacija, broj_redova, broj_kolona
  149.                                                        //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj.
  150.                                                        //poziciju u matrici
  151.     tie(oznakaR, oznakaK) = GetPozicijuUReduIKoloni("15B");
  152.     cout << crt << "GetPozicijuUReduIKoloni(15B) ->" << oznakaR << "/" << oznakaK << endl;//ispisuje 14/1
  153.     tie(oznakaR, oznakaK) = GetPozicijuUReduIKoloni("01B");
  154.     cout << "GetPozicijuUReduIKoloni(01B) ->" << oznakaR << "/" << oznakaK << crt;//ispisuje 0/1
  155.                                                                                   /*
  156.                                                                                   GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji
  157.                                                                                   je inicijalizovan vrijednsotima proslijedjenih
  158.                                                                                   parametara
  159.                                                                                   DodajPutnika - podatke o novom putniku dodaje u listu (niz)
  160.                                                                                   putnika na proslijedjenom letu. Onemoguciti
  161.                                                                                   dodavanje putnika sa istim imenom i prezimenom,
  162.                                                                                   nepostojecom lokacijom sjedista ili u slucaju da su sva mjesta
  163.                                                                                   popunjena
  164.                                                                                   */
  165.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("01A", "Denis Music")))
  166.         cout << crt << "Putnik uspjesno dodan!" << crt;
  167.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("07C", "Zanin Vejzovic")))
  168.         cout << crt << "Putnik uspjesno dodan!" << crt;
  169.     if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("10D", "Adel Handzic")))
  170.     //  cout << crt << "Putnik uspjesno dodan!" << crt;
  171.     ////PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao
  172.     ////parametar
  173.     //PrikaziRasporedSjedenja(mostar_sarajevo);
  174.     ////rekBrojacKaraktera - rekurzivna funkcija koja vraca maksimalan broj karaktera u imenu i prezimenu putnika na odredjenom letu
  175.     //cout << crt << "Maksimalna broj karaktera u imenu i prezimenu putnika je -> " <<
  176.     //  rekBrojacKaraktera(mostar_sarajevo, mostar_sarajevo._trenutnoPutnika, 0) << crt; //broj 0 je pocetno stanje prilikom
  177.     //                                                                                   //brojanja max karaktera
  178.     //                                                                                   /*
  179.     //                                                                                   DODATNO:
  180.     //                                                                                   1. prilikom ispisa, sirinu kolone prilagoditi maksimalnom broju karaktera u
  181.     //                                                                                   imenu i prezimenu
  182.     //                                                                                   2. automatski generisati oznaku sjedista na osnovu narednog
  183.     //                                                                                   slobodnog mjesta na letu (povratnom vrijednoscu sugerisati na slucaj u
  184.     //                                                                                   kome su sva mjesta na letu vec zauzeta). ovu funkciju nije potrebno
  185.     //                                                                                   integrisati u postojece rjesenje, vec se moze i zasebno testirati
  186.     //                                                                                   */
  187.     Dealociraj(mostar_sarajevo);
  188.     system("pause>0");
  189.     return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement