Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<tuple>
- #include <cstring>
- 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
- };
- 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;
- }
- void Unos(Let & let, const char * relacijaOnaKojuUpisujem, int broj_redova, int broj_kolona)
- {
- int size = strlen(relacijaOnaKojuUpisujem) + 1;
- let._relacija = new char[size];
- strcpy_s(let._relacija, size, relacijaOnaKojuUpisujem);
- let._brojRedovaUAvionu = broj_redova;
- let._brojKolonaUAvionu = broj_kolona;
- let._putnici = nullptr;
- let._trenutnoPutnika = 0;
- }
- //GetPozicijuUReduIKoloni - na osnovu oznake sjedista vraca pair red i kolona tj.//poziciju u matrici
- pair <int, int> GetPozicijuUReduIKoloni(const char * oznaka)
- {
- int prvaKoordinata, drugaKoordinata;
- int pomocnaI, pomocnaII;
- pair <int, int> rezultat;
- pomocnaI = oznaka[0] - '0';
- pomocnaI = pomocnaI * 10;
- pomocnaII = oznaka[1] - '0' - 1;
- prvaKoordinata = pomocnaI + pomocnaII;
- drugaKoordinata = oznaka[2] - 'A';//-------------------------------------------------------oznaka[2]
- rezultat = make_pair(prvaKoordinata, drugaKoordinata);
- return rezultat;
- }
- bool provjeraSjedista(const char * sjediste)
- {
- if (!(sjediste[0] >= '0' && sjediste[0] <= '9')) //uslov: ne radi se o broju jer imamo negaciju (!)
- return false;
- if (!(sjediste[1] >= '0' && sjediste[1] <= '9')) ////uslov: ne radi se o broju jer imamo negaciju (!)
- return false;
- if (!(sjediste[2] >= 'A' && sjediste[2] <= 'Z')) //ako nije slovo vratit ces mi false
- return false;
- return true;
- }
- /* 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
- */
- void kopirajPutnika(Putnik & original, Putnik & novi)
- {
- strcpy_s(novi._ozankaSjedista, original._ozankaSjedista);
- int size = strlen(original._imePrezime) + 1;
- novi._imePrezime = new char[size];
- strcpy_s(novi._imePrezime, size, original._imePrezime);
- }
- bool DodajPutnika(Let & let, Putnik & putnik)
- {
- //provjere
- for (int i = 0; i < let._trenutnoPutnika; i++)
- {
- if (strcmp(putnik._imePrezime, let._putnici[i]._imePrezime) == 0) //imaju li putnici s istim imenom
- return false;
- if (!(provjeraSjedista(putnik._ozankaSjedista) == true)) //provjera da li postoji nepostojeca lokacija sjedista
- return false;
- if (strcmp(putnik._ozankaSjedista, let._putnici[i]._ozankaSjedista) == 0) //da li se mjesto vec pojavljuje tj. popunjeno je
- return false;
- }
- Putnik * noviPomocniNiz = new Putnik[let._trenutnoPutnika + 1];
- for (int i = 0; i < let._trenutnoPutnika; i++)
- {
- 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
- }
- kopirajPutnika(putnik, noviPomocniNiz[let._trenutnoPutnika]); // ovdje smo upisali info o novom putniku
- delete[] let._putnici;
- let._putnici = noviPomocniNiz;
- let._trenutnoPutnika++;
- return true;
- }
- /*
- //GetNovogPutnika - vraca objekat (ne pokazivac) tipa Putnik koji
- //je inicijalizovan vrijednsotima proslijedjenih
- //parametara*/
- Putnik & GetNovogPutnika(const char * oznaka, const char * imePrezime)
- {
- Putnik putnik;
- int size = strlen(imePrezime) + 1;
- putnik._imePrezime = new char[size];
- strcpy_s(putnik._imePrezime, size, imePrezime);
- strcpy_s(putnik._ozankaSjedista, 4, oznaka);
- //ovim gore si vec sve upisala u putnika tako da samo vracas putnika jer je vec se sve pohranilo
- return putnik;
- }
- ////PrikaziRasporedSjedenja - na osnovu oznake sjedista prikazuje raspored sjedenja u avionu za let koji je proslijedjen kao
- ////parametar
- //void PrikaziRasporedSjedenja(Let & let)
- //{
- // for (int i = 0; i < let._trenutnoPutnika; i++)
- // {
- // cout << let._putnici[i]._imePrezime << " ";
- // cout << let._putnici[i]._ozankaSjedista << endl;
- // }
- //}
- ////rekBrojacKaraktera - rekurzivna funkcija koja vraca maksimalan broj karaktera u imenu i prezimenu putnika na odredjenom letu
- ////broj 0 je pocetno stanje prilikom
- ////brojanja max karaktera
- //int rekBrojacKaraktera(Let let, int brojPutnika, 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;
- ////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>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement