Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<conio.h>
- using namespace std;
- enum TipVozila { DRUMSKO = 1, VAZDUSNO, PLOVNO };
- char *enumTipVozila[] = { "DRUMSKO","VAZDUSNO","PLOVNO" };
- char *crt = "\n--------------------------\n";
- struct Datum
- {
- int *_dan, *_mjesec, *_godina;
- void Unos(int d, int m, int g)
- {
- if (g < 1900 || g>2017)
- return;
- if (d < 1 || d>31)
- return;
- if (m < 1 || m>12)
- return;
- switch (m)
- {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- if (d > 31)
- return; break;
- case 2:
- if (g % 4 == 0 && d > 28)
- return;
- else if (g % 4 != 0 && d > 29)
- return; break;
- default:
- if (d > 30)
- return;
- break;
- }
- _dan = new int;
- _mjesec = new int;
- _godina = new int;
- *_dan = d;
- *_mjesec = m;
- *_godina = g;
- }
- void Ispis()
- {
- cout << *_dan << "." << *_mjesec << "." << *_godina << endl;
- }
- void Dealociraj()
- {
- delete _dan, _mjesec, _godina;
- _dan = _mjesec = _godina = NULL;
- }
- };
- struct Ostecenje
- {
- char * _nazivOstecenogDijela;
- float _cijenaOriginalnogDijela;
- float _cijenaZamjenskogDijela;
- bool _mogucPopravak;
- //na osnovu primljenih parametara incijlizovati potrebne atribute.
- //ukoliko je cijena zamjenskog dijela veća od cijene originalnog oporvak se smatra nemogucim, u suprotnom se
- //smatra mogucim.
- void Unos(char *naziv, float cijenaOrig, float cijenaZamj)
- {
- int vel = strlen(naziv) + 1;
- _nazivOstecenogDijela = new char[vel];
- strcpy_s(_nazivOstecenogDijela, vel, naziv);
- _cijenaOriginalnogDijela = cijenaOrig;
- _cijenaZamjenskogDijela = cijenaZamj;
- if (cijenaZamj > cijenaOrig)
- _mogucPopravak = false;
- else _mogucPopravak = true;
- }
- void Ispis()
- {
- cout << "Naziv ostecenog dijela: " << _nazivOstecenogDijela << endl;
- cout << "Cijena originalnog dijela: " << _cijenaOriginalnogDijela << endl;
- cout << "Cijena zamjenskog dijela: " << _cijenaZamjenskogDijela << endl;
- }
- void Dealokacija()
- {
- delete[]_nazivOstecenogDijela; _nazivOstecenogDijela = nullptr;
- }
- };
- struct Nezgoda
- {
- char* _lokacija; //npr.magistralni put M17
- Datum _datumNezgode;
- Ostecenje *_listaOstecenja[10]; //smatramo da je maksimalan broj ostecenja 10.
- int _brojOstecenja; //broji ostecenja.
- char *_napomene[50]; //svako ostecenje ne mora imati napomenu.
- //osmisliti mehanizam pracenja napomene uz ustecenje za koje je napomena namijenjena.
- //Funkcije Unos, Ispis i Dealokaciju implementirati van strukture!
- void Unos(char * lok, Datum * d)
- {
- int vel = strlen(lok) + 1;
- _lokacija = new char[vel];
- strcpy_s(_lokacija, vel, lok);
- _datumNezgode.Unos(*d->_dan, *d->_mjesec, *d->_godina);
- _brojOstecenja = 0;
- }
- void Ispis()
- {
- cout << "Lokacija: " << _lokacija << endl;
- _datumNezgode.Ispis();
- cout << "Napomene: " << _napomene << endl;
- }
- void Dealokacija()
- {
- delete[]_lokacija; _lokacija = nullptr;
- _datumNezgode.Dealociraj();
- for (size_t i = 0; i < _brojOstecenja; i++)
- {
- delete _listaOstecenja[i]; _listaOstecenja[i] = nullptr;
- }
- }//Implementirati sljedeće funkcije: //
- //2. AddOstecenje :: dodaje podatke o ostecenom dijelu.
- //Svako ostecenje ne mora imati napomenu //u jednoj nezgodi mogu se desiti najviše dva ista oštećenja.
- //smatra se da je ostecenje isto ako ima isti naziv. za poredjenje naziva
- //implementirati vlastitu funkciju! /*
- //3. RemoveOstecenje::
- //uklanja podatke o svim ostecenjima na osnovu naziva ili dijela naziva
- //ostecenog dijela koji je primljen kao parametar */ }
- // Rekurzijom pronaći oštećenje čiji je zamjenski dio najskuplji u odnosu na originalni (najveca razlika u cijeni).
- //implementirati funkciju kao i poziv u main-u.
- bool AddOstecenje(Ostecenje *o,char *napomena="---")
- {
- int counter = 0;
- if (_brojOstecenja > 2)
- return false;
- for (size_t i = 0; i < _brojOstecenja; i++)
- {
- if (_listaOstecenja[i]->_nazivOstecenogDijela == o->_nazivOstecenogDijela)
- counter++;
- }
- _listaOstecenja[_brojOstecenja] = new Ostecenje;
- _listaOstecenja[_brojOstecenja] ->Unos(o->_nazivOstecenogDijela, o->_cijenaOriginalnogDijela, o->_cijenaZamjenskogDijela);
- _brojOstecenja++;
- return true;
- }
- int RemoveOstecenje(char *naziv)
- {
- char *p = NULL; int counter = 0;
- for (size_t i = 0; i < _brojOstecenja; i++)
- {
- p = strstr(_listaOstecenja[i]->_nazivOstecenogDijela, naziv);
- if (p != NULL)
- {
- for (size_t j = i; j < _brojOstecenja - 1; j++)
- {
- _listaOstecenja[j] = _listaOstecenja[j + 1];
- }
- --_brojOstecenja;
- }
- p = NULL;
- counter++;
- }
- return counter;
- }
- };
- int main() {
- Datum d;
- d.Unos(20, 1, 2013);
- d.Ispis();
- Ostecenje o1, o2;
- o1.Unos("Guma pukla", 100, 150);
- o2.Unos("Auspuh", 300, 230);
- o1.Ispis();
- Nezgoda n1; n1.
- Unos("Mostar", &d);
- n1.Ispis();
- //n1.Dealokacija();
- if (n1.AddOstecenje(&o1))
- {
- cout << "Ostecenje dodano!" << endl;
- }
- if (n1.AddOstecenje(&o2))
- {
- cout << "Ostecenje dodano!" << endl;
- }
- if (n1.AddOstecenje(&o1, "Opet pukla guma!"))
- {
- cout << "Ostecenje dodano!" << endl;
- }
- if (n1.AddOstecenje(&o1))
- {
- cout << "Ostecenje dodano!" << endl;
- }
- n1.Ispis();
- cout << endl << endl;
- int uklonjeno = n1.RemoveOstecenje("Guma");
- cout << "Uklonjeno: " << uklonjeno << endl;
- //if (n1._brojOstecenja>0)
- //{
- // float razlika = abs(n1._listaOstecenja[0]->_cijenaOriginalnogDijela - n1._listaOstecenja[0]->_cijenaZamjenskogDijela);
- // //Ostecenje * o5 = rekurzija(*n1._listaOstecenja,n1._brojOstecenja,razlika);
- // Ostecenje*niz;
- // niz = new Ostecenje[n1._brojOstecenja];
- // for (int i = 0; i < n1._brojOstecenja; i++)
- // {
- // niz[i].Unos(n1._listaOstecenja[i]->_nazivOstecenogDijela, n1._listaOstecenja[i]->_cijenaOriginalnogDijela, n1._listaOstecenja[i]->_cijenaZamjenskogDijela);
- // }
- // Ostecenje* x = rekurzija(niz, n1._brojOstecenja, razlika);
- // x->Ispis();
- //}
- //pozvati funkciju rekurzija, uz ispis pronađenog oštećenja //obavezno dealocirati alociranu memoriju.
- d.Dealociraj();
- o1.Dealokacija(); o2.Dealokacija();
- n1.Dealokacija();
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement