Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <cmath>
- using namespace std;
- class Bogatstvo
- {
- protected:
- char *adresa;
- char ime[100];
- int pocetna_vrednost;
- public:
- Bogatstvo(char* adresa, char* ime, int pocetna_vrednost)
- {
- this->adresa = new char[strlen(adresa) + 1];
- strcpy(this->adresa, adresa);
- strcpy(this->ime, ime);
- this->pocetna_vrednost = pocetna_vrednost;
- }
- Bogatstvo(Bogatstvo& b)
- {
- this->adresa = new char[strlen(b.adresa) + 1];
- strcpy(this->adresa, b.adresa);
- strcpy(this->ime, b.ime);
- this->pocetna_vrednost = b.pocetna_vrednost;
- }
- virtual ~Bogatstvo(){
- delete[]adresa;
- }
- virtual double proceneta_cena() = 0;
- //=0 znaci deka teloto ni e prazno vo ovaa funkcija
- friend ostream& operator << (ostream& o, Bogatstvo& b)
- {
- o << b.adresa << "-" << b.ime<<"-" << b.pocetna_vrednost << endl;
- return o;
- }
- Bogatstvo& operator=(Bogatstvo& b)
- {
- if (this != &b)
- {
- delete[]adresa;
- this->adresa = new char[strlen(b.adresa) + 1];
- strcpy(this->adresa, b.adresa);
- strcpy(this->ime, b.ime);
- this->pocetna_vrednost = b.pocetna_vrednost;
- }
- return *this;
- }
- };
- class Zlatnik : public Bogatstvo
- {
- private:
- char forma[50];
- public:
- Zlatnik(char* adresa, char* ime, int pocetna_vrednost, char* forma) :Bogatstvo(adresa, ime, pocetna_vrednost)
- {
- strcpy(this->forma, forma);
- }
- double proceneta_cena()
- {
- if (strcmp(forma, "krug") == 0)
- return 2 * pocetna_vrednost;
- if (strcmp(forma, "pravoagolnik") == 0)
- return pocetna_vrednost + 200;
- else
- return pocetna_vrednost + 100;
- }
- };
- class Dijamant :public Bogatstvo {
- private:
- float prodzirno;
- public:
- Dijamant(char* adresa, char* ime, int pocetna_vrednost, float prodzirno) :Bogatstvo(adresa, ime, pocetna_vrednost)
- {
- this->prodzirno = prodzirno;
- }
- double proceneta_cena()
- {
- if (prodzirno < 0,5)
- return prodzirno*(pocetna_vrednost+150);
- else
- return prodzirno*pocetna_vrednost-150;
- }
- };
- class Kolekcija {
- private:
- Bogatstvo** bog;
- int umetnicki_dela;
- public:
- Kolekcija(int umetnicki_dela = 0)
- {
- bog = new Bogatstvo * [umetnicki_dela];
- this->umetnicki_dela = umetnicki_dela;
- }
- ~Kolekcija()
- {}
- void dodadi_bogatstvo(Bogatstvo& b)
- {
- bog[umetnicki_dela] = b;
- umetnicki_dela++;
- }
- Bogatstvo& vratiNajbliskoSporednaCenaBogatstvo(int pocetna)
- {
- float razlika = fabs(bog[0]->proceneta_cena() - pocetna);
- int indeks;
- for (int i = 0; i < umetnicki_dela; i++)
- {
- if (fabs(umetnicki_dela[i]->proceneta_cena() - pocetna) < razlika)
- indeks = i;
- }
- return *bog[indeks];
- }
- };
- int main()
- {
- Kolekcija a;
- char ime[100];
- char adresa[100];
- char forma[100];
- int poc_vrednost;
- double prodzirnost;
- int n;
- cin >> n;
- for (int i = 0; i < n; i++) {
- int tip;
- cin >> tip;
- if (tip == 0) {
- cin >> adresa >> ime >> poc_vrednost >> forma;
- a.dodadi_bogatstvo(new Zlatnik(adresa, ime, poc_vrednost, forma));
- }
- else {
- cin >> adresa >> ime >> poc_vrednost >> prodzirnost;
- a.dodadi_bogatstvo(new Dijamant(adresa, ime, poc_vrednost, prodzirnost));
- }
- }
- int pocetna;
- cin >> pocetna;
- cout << a.vratiNajbliskoSporednaCenaBogatstvo(pocetna);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment