Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<tuple>
- const char * crt = "\n-------------------------------------\n";
- using namespace std;
- struct Putnik {
- char * _imePrezime;
- //pretpostavka je da ce se uvijek unijeti validna oznaka sjedista u formatu XXA gdje je XX dvocifreni broj, a A predstavlja veliko slovo.
- //Jednocifrene oznake ce imati prefiks 0
- char _ozankaSjedista[4]; //npr. 02A, 12B, 14B, 28C -> broj predstavlja oznaku reda, a slovo oznaku kolone
- void Dealociraj()
- {
- delete[] _imePrezime; _imePrezime = nullptr;
- }
- };
- struct Let {
- char * _relacija;//Mostar -> Sarajevo
- Putnik * _putnici;
- int _trenutnoPutnika;
- int _brojRedovaUAvionu;
- int _brojKolonaUAvionu;//broj kolona mora biti paran >=4 i <=10
- };
- void Dealociraj(Let & let) {
- delete[] let._relacija; let._relacija = nullptr;
- for (size_t i = 0; i < let._trenutnoPutnika; i++) {
- delete[] let._putnici[i]._imePrezime;
- let._putnici[i]._imePrezime = nullptr;
- }
- delete[] let._putnici;
- let._putnici = nullptr;
- }
- //inicijalizuje vrijednosti atributa objekta mostar_sarajevo
- void Unos(Let & let, const char * relacija, int brojRedova, int brojKolona)//relacija, broj_redova, broj_kolona
- {
- int size = strlen(relacija) + 1;
- let._relacija = new char[size];
- strcpy_s(let._relacija, size, relacija);
- let._brojRedovaUAvionu = brojRedova;
- let._brojKolonaUAvionu = brojKolona;
- let._trenutnoPutnika = 0;
- let._putnici = nullptr;
- }
- //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj. poziciju u matrici
- //ispisuje 14/1 - 15B
- //ispisuje 0/1 - 01B
- pair <int, int> GetPozicijuUReduIKoloni(const char * oznakaSjedista)
- {
- pair <int, int> rezultat;
- int prvaPomocna;
- prvaPomocna = oznakaSjedista[0] - '0'; //1-0=1
- prvaPomocna = prvaPomocna * 10;//1*10=10
- int drugaPomocna;
- drugaPomocna = oznakaSjedista[1] - '0'-1;//5-0=5-1=4
- int prvaKoordinata;
- prvaKoordinata = prvaPomocna + drugaPomocna;
- int drugaKoordinata = oznakaSjedista[2] - 'A';//B-A=1-0=1
- rezultat=make_pair(prvaKoordinata, drugaKoordinata);
- return rezultat;
- }
- /*
- GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji je inicijalizovan
- vrijednsotima proslijedjenih parametara*/
- Putnik GetNovogPutnika(const char * oznakaSjedista, const char * imePrezime)
- {
- Putnik putnik;
- strcpy_s(putnik._ozankaSjedista, oznakaSjedista);
- int size = strlen(imePrezime) + 1;
- putnik._imePrezime = new char[size];
- strcpy_s(putnik._imePrezime, size, imePrezime);
- return putnik;
- }
- /*DodajPutnika - podatke o novom putniku dodaje u listu (niz) putnika na proslijedjenom letu.
- Onemoguciti dodavanje putnika sa istim imenom i prezimenom,
- nepostojecom lokacijom sjedista ili u slucaju da su sva mjesta popunjena
- */
- bool provjeraSjedista(const char *oznakaSjedista)
- {
- //0,1,2,3,4,5,6,78,9
- //A,B,C....Z
- //15B
- if (!(oznakaSjedista[0]>='0' && oznakaSjedista[0]<='9'))
- return false;
- if (!(oznakaSjedista[1]>='0' && oznakaSjedista[1]<='9'))
- return false;
- if (!(oznakaSjedista[2]>='A' && oznakaSjedista[2]<='Z'))
- return false;
- return true;
- }
- bool DodajPutnika(Let & let, Putnik putnik)
- {
- //provjere
- for (int i = 0; i < let._trenutnoPutnika; i++)
- {
- if (strcmp(let._putnici[i]._imePrezime, putnik._imePrezime) == 0)
- {
- cout << "Putnik sa istim imenom vec dodan! " << endl;
- return false;
- }
- if (strcmp(let._putnici[i]._ozankaSjedista, putnik._ozankaSjedista) == 0)
- {
- cout << "Sjediste je vec zauzeto. " << endl;
- return false;
- }
- if (!(provjeraSjedista(putnik._ozankaSjedista) == true))
- {
- cout << "Nepostojeca lokacija sjedista... " << endl;
- return false;
- }
- }
- Putnik * temp = new Putnik[let._trenutnoPutnika + 1];
- for (int i = 0; i < let._trenutnoPutnika; i++)
- {
- strcpy_s(temp[i]._ozankaSjedista, 4, let._putnici[i]._ozankaSjedista);
- int size = strlen(let._putnici[i]._imePrezime) + 1;
- temp[i]._imePrezime = new char[size];
- strcpy_s(temp[i]._imePrezime, size, let._putnici[i]._imePrezime);
- }
- strcpy_s(temp[let._trenutnoPutnika]._ozankaSjedista, 4, putnik._ozankaSjedista);
- int size1 = strlen(putnik._imePrezime) + 1;
- temp[let._trenutnoPutnika]._imePrezime = new char[size1];
- strcpy_s(temp[let._trenutnoPutnika]._imePrezime, size1, putnik._imePrezime);
- for (int i = 0; i < let._trenutnoPutnika; i++)
- {
- let._putnici[i].Dealociraj();
- }
- delete[] let._putnici;
- let._putnici = temp;
- let._trenutnoPutnika++;
- return true;
- }
- //PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao parametar
- void PrikaziRasporedSjedenja(Let & let)
- {
- }
- int rekBrojacKaraktera(Let & let, int trenutnoPutnika, int brojac)
- {
- return 0;
- }
- int main() {
- int oznakaR = 0, oznakaK = 0;
- Let mostar_sarajevo;
- //inicijalizuje vrijednosti atributa objekta mostar_sarajevo
- Unos(mostar_sarajevo, "Mostar -> Sarajevo", 10, 4);//relacija, broj_redova, broj_kolona
- //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj. poziciju u matrici
- tie(oznakaR, oznakaK) = GetPozicijuUReduIKoloni("15B");
- cout << crt << "GetPozicijuUReduIKoloni(15B) ->" << oznakaR << "/" << oznakaK << endl;//ispisuje 14/1
- tie(oznakaR, oznakaK) = GetPozicijuUReduIKoloni("01B");
- cout << "GetPozicijuUReduIKoloni(01B) ->" << oznakaR << "/" << oznakaK << crt;//ispisuje 0/1
- /*
- GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji je inicijalizovan
- vrijednsotima proslijedjenih parametara
- DodajPutnika - podatke o novom putniku dodaje u listu (niz) putnika na
- proslijedjenom letu. Onemoguciti dodavanje putnika sa istim imenom i prezimenom,
- nepostojecom lokacijom sjedista ili u slucaju da su sva mjesta popunjena
- */
- if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("01A", "Denis Music")))
- cout << crt << "Putnik uspjesno dodan!" << crt;
- if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("07C", "Zanin Vejzovic")))
- cout << crt << "Putnik uspjesno dodan!" << crt;
- if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("10D", "Adel Handzic")))
- cout << crt << "Putnik uspjesno dodan!" << crt;
- if (DodajPutnika(mostar_sarajevo, GetNovogPutnika("d5C", "Sdel Handzic")))
- cout << crt << "Putnik uspjesno dodan!" << crt;
- //PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao parametar
- PrikaziRasporedSjedenja(mostar_sarajevo);
- //rekBrojacKaraktera - rekurzivna funkcija koja vraca maksimalan broj karaktera u imenu i prezimenu putnika na odredjenom letu
- cout << crt << "Maksimalna broj karaktera u imenu i prezimenu putnika je -> " << rekBrojacKaraktera(mostar_sarajevo,
- mostar_sarajevo._trenutnoPutnika, 0) << crt; //broj 0 je pocetno stanje prilikom brojanja max karaktera
- /*
- DODATNO:
- 1. prilikom ispisa, sirinu kolone prilagoditi maksimalnom broju karaktera u imenu i prezimenu
- 2. automatski generisati oznaku sjedista na osnovu narednog slobodnog mjesta na letu
- (povratnom vrijednoscu sugerisati na slucaj u kome su sva mjesta na letu vec zauzeta).
- ovu funkciju nije potrebno integrisati u postojece rjesenje, vec se moze i zasebno testirati
- */
- Dealociraj(mostar_sarajevo);
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement