Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Film {
- private:
- char * naslov;
- char * ime_prezime;
- int godina_na_izdavanje;
- int broj_sedista;
- int broj_na_bileti;
- float cena;
- public:
- Film() {}
- Film(const char *naslov, const char * ime_prezime, int godina_na_izdavanje, int broj_na_sedista, int broj_na_bileti, float cena) {
- this->godina_na_izdavanje = godina_na_izdavanje;
- this->broj_sedista = broj_na_sedista;
- this->broj_na_bileti = broj_na_bileti;
- this->cena = cena;
- this->naslov = new char[strlen(naslov)];
- strcpy(this->naslov, naslov);
- this->ime_prezime = new char[strlen(ime_prezime)];
- strcpy(this->ime_prezime, ime_prezime);
- }
- Film(const Film &tmp) {
- this->godina_na_izdavanje = tmp.godina_na_izdavanje;
- this->broj_sedista = tmp.broj_sedista;
- this->broj_na_bileti = tmp.broj_na_bileti;
- this->cena = tmp.cena;
- this->naslov = new char[strlen(tmp.naslov)];
- strcpy(this->naslov, tmp.naslov);
- this->ime_prezime = new char[strlen(tmp.ime_prezime)];
- strcpy(this->ime_prezime, tmp.ime_prezime);
- }
- Film & operator = (Film tmp) {
- this->godina_na_izdavanje = tmp.godina_na_izdavanje;
- this->broj_sedista = tmp.broj_sedista;
- this->broj_na_bileti = tmp.broj_na_bileti;
- this->cena = tmp.cena;
- this->naslov = new char[strlen(tmp.naslov)];
- strcpy(this->naslov, tmp.naslov);
- this->ime_prezime = new char[strlen(tmp.ime_prezime)];
- strcpy(this->ime_prezime, tmp.ime_prezime);
- return *this;
- }
- ~Film() {
- delete[] naslov;
- delete[] ime_prezime;
- }
- float get_cena() {
- return cena;
- }
- friend istream & operator >> (istream & stream, Film & f);
- bool operator >= (Film & f) {
- if(cena >= f.cena) {
- return true;
- }
- return false;
- }
- virtual float cena_na_bilet() {
- return cena;
- }
- int get_sedista() {
- return broj_sedista;
- }
- int get_bilet() {
- return broj_na_bileti;
- }
- virtual void print() {
- cout << naslov << " " << ime_prezime << " " << godina_na_izdavanje << " " << broj_sedista << " " << broj_na_bileti << " " << endl;
- cout << "Osnovna cena: " << cena << endl;
- }
- };
- istream & operator >> (istream & stream, Film & f) {
- char c[2000];
- stream >> c;
- f.naslov = new char[strlen(c)];
- strcpy(f.naslov, c);
- char c2[2000];
- stream >> c2;
- f.ime_prezime = new char[strlen(c2)];
- strcpy(f.ime_prezime, c2);
- stream >> f.godina_na_izdavanje >> f.broj_sedista >> f.broj_na_bileti >> f.cena;
- return stream;
- }
- class IgranFilm : public Film {
- private:
- bool promicija;
- float popust;
- public:
- IgranFilm() : Film() {}
- IgranFilm(const char *naslov, const char * ime_prezime, int godina_na_izdavanje, int broj_na_sedista, int broj_na_bileti, float cena, bool promocija, float popust) : Film(naslov, ime_prezime, godina_na_izdavanje, broj_na_bileti, broj_na_bileti, cena) {
- this->promicija = promocija;
- this->popust = popust;
- }
- IgranFilm(const IgranFilm & tmp) : Film(tmp) {
- this->promicija = tmp.promicija;
- this->popust = tmp.popust;
- }
- ~IgranFilm() {}
- virtual float cena_na_bilet() override {
- float c = Film::cena_na_bilet();
- if(promicija) {
- c = c - (popust / 100.0 * c);
- }
- if(get_sedista() - get_bilet() >= 50) {
- c = (c - 0.1*c);
- }
- return c;
- }
- virtual void print() override {
- Film::print();
- if(promicija) {
- cout << "PROMOCIJA: " << popust << endl;
- }
- cout << "MOMENTALNA CENA: " << cena_na_bilet() << endl;
- }
- };
- enum Nagrada {NEMA_NAGRADA, NACIONALNA_NAGRADA, MEGJUNARODNA};
- class DokumentarenFilm : public Film {
- private:
- Nagrada nagrada;
- public:
- DokumentarenFilm() : Film() {}
- DokumentarenFilm(const char *naslov, const char * ime_prezime, int godina_na_izdavanje, int broj_na_sedista, int broj_na_bileti, float cena, Nagrada nagrada) : Film(naslov, ime_prezime, godina_na_izdavanje, broj_na_bileti, broj_na_bileti, cena) {
- this->nagrada = nagrada;
- }
- DokumentarenFilm(const DokumentarenFilm & tmp) : Film(tmp) {
- this->nagrada = tmp.nagrada;
- }
- ~DokumentarenFilm () {}
- virtual float cena_na_bilet() override {
- float c = Film::cena_na_bilet();
- if(nagrada == NACIONALNA_NAGRADA) {
- c += (0.1 * c);
- }
- else if(nagrada == MEGJUNARODNA) {
- c += (0.2 * c);
- }
- return c;
- }
- virtual void print() override {
- Film::print();
- if(nagrada == NEMA_NAGRADA) {
- cout << "BEZ NAGRADA" << endl;
- }
- else if(nagrada == NACIONALNA_NAGRADA) {
- cout << "NACIONALNA NAGRADA" << endl;
- }
- else {
- cout << "MEGUNARODNA NAGRADA" << endl;
- }
- cout << "MOMENTALNA CENA " << cena_na_bilet() << endl;
- }
- };
- void film_so_najgolem_popust(Film ** niza, int n) {
- float najgolem_popust = -99999999.0;
- for(int i = 0; i < n; i++) {
- float momentalna_cena = niza[i]->cena_na_bilet();
- float osnovna_cena = niza[i]->get_cena();
- float popust = momentalna_cena - osnovna_cena;
- if(popust > najgolem_popust) {
- najgolem_popust = popust;
- }
- }
- for(int i = 0; i < n; i++) {
- float momentalna_cena = niza[i]->cena_na_bilet();
- float osnovna_cena = niza[i]->get_cena();
- float popust = momentalna_cena - osnovna_cena;
- if(popust == najgolem_popust) {
- niza[i]->print();
- }
- }
- }
- int main() {
- Film* filmovi[4];
- filmovi[0] = new IgranFilm("Inception", "Chris Nolan", 2010, 200, 40, 300, true, 20);
- filmovi[1] = new IgranFilm("Interstellar", "Chris NOlan", 2014, 200, 120, 350, false, 0);
- filmovi[2] = new DokumentarenFilm("Planet", "David", 2006, 150, 100, 250, MEGJUNARODNA);
- filmovi[3] = new DokumentarenFilm("Ocean", "David", 2017, 350, 100, 250, NACIONALNA_NAGRADA);
- film_so_najgolem_popust(filmovi, 4);
- cout << endl;
- for(int i = 0; i < 4; i++) {
- filmovi[i]->print();
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment