17

 avatar
gorazd
c_cpp
a month ago
4.3 kB
3
Indexable
1kolok_OOP
#include <iostream>
#include <cstring>
#include  <iomanip>
using namespace std;
enum osE{DEFAULT=-1,LINUX,UNIX,WINDOWS};
class OperativenSistem {
    char *name;
    float version;
    osE type;
    float size_gb;
public:
    OperativenSistem() {
        name = nullptr;
        version = 0;
        type = DEFAULT;
        size_gb = 0;
    }
    OperativenSistem(const char *_name,float _version, osE _type,float _size) {
        version = _version;
        type = _type;
        size_gb = _size;
        if (_name!=nullptr) {
            name = new char[strlen(_name)+1];
            strcpy(name,_name);
        }
        else
            name = nullptr;
    }
    ~OperativenSistem() {
        delete[] name;
    }
    OperativenSistem(const OperativenSistem &os) {
        version = os.version;
        type = os.type;
        size_gb = os.size_gb;
        if (os.name!=nullptr) {
            name = new char[strlen(os.name)+1];
            strcpy(name,os.name);
        }
        else name = nullptr;
    }
    OperativenSistem &operator=(const OperativenSistem &os) {
        if (this!=&os) {
            delete[] name;
            version = os.version;
            type = os.type;
            size_gb = os.size_gb;
            if (os.name!=nullptr) {
                name = new char[strlen(os.name)+1];
                strcpy(name,os.name);
            }
            else name = nullptr;
            return *this;
        }
    }
    float getVersion()const {return version;}
    void pecati() {
        cout<<"Ime: "<<name<<" Verzija: "<<version<<" Tip: "<<type<<" Golemina:"<<size_gb<<"GB"<<endl;
    }

    bool ednakviSe(const OperativenSistem &os) {
        return (strcmp(name,os.name)==0) and (version == os.version) and (type == os.type) and (size_gb == os.size_gb);
    }
    int sporediVerzija(const OperativenSistem &os) {
        if (version == os.version) return 0;
        else if (os.version>version) return -1;
        else return 1;
    }
    bool istaFamilija(const OperativenSistem &os) const {
        return (strcmp(name,os.name)==0)  and (type == os.type);
    }
};

class Repozitorium {
    char name[20];
    OperativenSistem *o;
    int n;
public:
    Repozitorium(const char *ime) {
        strcpy(name,ime);
        o = nullptr;
        n = 0;
    }
    ~Repozitorium(){delete[] o;}
    void pecatiOperativniSistemi() {
        cout<<"Repozitorium: "<<name<<endl;
        for (int i = 0; i<n; i++) {
            o[i].pecati();
        }
    }
    void izbrishi(const OperativenSistem &os) {
        for (int i = 0; i<n; i++) {
            if (o[i].ednakviSe(os)) {
                OperativenSistem *temp = new OperativenSistem[n-1];
                for (int j = 0; j < i; j++) {
                    temp[j] = o[j];
                }
                for (int j = i+1; j<n; j++) {
                    temp[j-1] = o[j];
                }
                delete[] o;
                o = temp;
                i--;
                n--;
            }
        }
    }
    void dodadi(const OperativenSistem &os) {
        for (int i = 0; i<n; i++) {
            if (os.istaFamilija(o[i]) and o[i].getVersion()<os.getVersion()) {
                o[i] = os;
                return;
            }
        }
            OperativenSistem *temp = new OperativenSistem[n+1];
            for (int j = 0; j<n; j++) {
                temp[j] = o[j];
            }
            temp[n] = os;
            delete[] o;
            o = temp;
            n++;

    }
};

int main() {
    char repoName[20];
    cin>>repoName;
    Repozitorium repozitorium=Repozitorium(repoName);
    int brojOperativniSistemi = 0;
    cin>>brojOperativniSistemi;
    char ime[20];
    float verzija;
    int tip;
    float golemina;
    for (int i = 0; i<brojOperativniSistemi; i++){
        cin>>ime;
        cin>>verzija;
        cin>>tip;
        cin>>golemina;
        OperativenSistem os = OperativenSistem(ime, verzija, (osE)tip, golemina);
        repozitorium.dodadi(os);
    }

    repozitorium.pecatiOperativniSistemi();
    cin>>ime;
    cin>>verzija;
    cin>>tip;
    cin>>golemina;
    OperativenSistem os = OperativenSistem(ime, verzija, (osE)tip, golemina);
    cout<<"=====Brishenje na operativen sistem====="<<endl;
    repozitorium.izbrishi(os);
    repozitorium.pecatiOperativniSistemi();
    return 0;
}
Editor is loading...
Leave a Comment