Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- enum Tip {LINUX=1, UNIX=2, WINDOWS=3};
- class OperativenSistem { //Во класата OperativenSistem
- private: //треба да се чуваат следниве податоци:
- char * ime; //име на оперативниот систем (динамички алоцирана низа од знаци)
- float verzija; //верзија (float)
- Tip vid; //тип (енумерација со можни вредности LINUX, UNIX, WINDOWS)
- float golemina; //големина (во GB) (float)
- public: //Дополнително, во рамките на класата потребно е да се дефинира:
- OperativenSistem() {
- this->ime = new char[0];
- strcpy(this->ime, "");
- this->verzija = 0.0;
- this->vid = (Tip)0;
- this->golemina = 0.0;
- } //конструктори со и без параметри
- OperativenSistem(char * ime, float verzija, Tip vid, float golemina) {
- this->ime = new char[strlen(ime)+1];
- strcpy(this->ime, ime);
- this->verzija = verzija;
- this->vid = vid;
- this-> golemina = golemina;
- }
- OperativenSistem(const OperativenSistem &os) {
- this->ime = new char[strlen(os.ime)+1];
- strcpy(this->ime, os.ime);
- this->verzija = os.verzija;
- this->vid = os.vid;
- this-> golemina = os.golemina;
- }// copy constructor
- ~OperativenSistem() {
- delete [] ime;
- } //destructor
- OperativenSistem &operator=(const OperativenSistem &os) { //преоптоварување на операторот =
- if(this!=&os) {
- this->ime = new char[strlen(os.ime)+1];
- strcpy(this->ime, os.ime);
- this->verzija = os.verzija;
- this->vid = os.vid;
- this-> golemina = os.golemina;
- }
- return *this;
- }
- float getverzija() {
- return this->verzija;
- }
- void pecati() { //метод за печатење на информациите - void pecati()
- cout<<"Ime: "<<this->ime<<" Verzija: "<<this->verzija;
- cout<<" Tip: "<<this->vid<<" Golemina:"<<this->golemina;
- cout<<"GB"<<endl;
- } //(видете го излезот од тест примерите за структурата)
- bool ednakviSe(const OperativenSistem &os) { //метод за проверка на еднаквост помеѓу два оперативни системи
- if((strcmp(this->ime, os.ime)==0)&&this->verzija==os.verzija&&this->vid == os.vid && this->golemina == os.golemina)
- //(два оперативни системи се еднакви ако имаат исто име, верзија, тип и големина) -
- return true;
- else return false;
- }//bool ednakviSe(const OperativenSistem &os)
- int sporediVerzija(const OperativenSistem &os) { //метод за споредба на верзии помеѓу два оперативни система -
- if(this->verzija == os.verzija) //int sporediVerzija(const OperativenSistem &os),
- return 0; //кој ќе враќа 0 доколку верзиите се исти,
- if(os.verzija > this->verzija)
- return -1; //-1 доколку верзијата на оперативниот систем од аргументот е поголема
- else return 1; //и 1 во преостанатиот случај.
- }
- bool istaFamilija(const OperativenSistem &sporedba) { //метод за проверка дали два оперативни системи
- if(strcmp(this->ime, sporedba.ime)==0 && this->vid == sporedba.vid) //се од иста фамилија.
- return true; //Два оперативни системи се од иста фамилија доколку имаат исто име и се од ист тип.
- else return false; //bool istaFamilija(const OperativenSistem &sporedba)
- }
- };
- class Repozitorium { //Repozitorium
- private: //Во класата Repozitorium треба да се чуваат следниве податоци:
- char ime[20]; //име на репозиториумот (низа од 20 знака)
- OperativenSistem * niza; // динамички алоцирана низа од OperativenSistem
- int broj; //број на оперативни системи кои моментално се наоѓаат во репозиториумот (int)
- public: //Дополнително, во рамките на класата потребно е да се дефинира:
- Repozitorium(){
- strcpy(this->ime, "");
- }
- Repozitorium (const char * ime) { //конструктор Repozitorium(const char *ime)
- strcpy(this->ime, ime);
- this->niza = new OperativenSistem[0];
- this->broj = 0;
- }
- ~Repozitorium(){
- delete [] niza;
- } //деструктор
- Repozitorium(const Repozitorium &rt) {
- strcpy(this->ime, rt.ime);
- this->broj = rt.broj;
- this->niza = new OperativenSistem[rt.broj];
- for(int i=0;i<rt.broj;i++)
- this->niza[i]=niza[i];
- }
- void pecatiOperativniSistemi() { //метод void pecatiOperativniSistemi() кој ќе ги печати сите
- cout<<"Repozitorium: "<<ime<<endl;
- for(int i=0; i<broj; i++)//оперативни системи кои се дел од репозиториумот
- niza[i].pecati();
- }
- void izbrishi(const OperativenSistem &operativenSistem) { //метод void izbrishi(const OperativenSistem &operativenSistem)
- int count = 0;
- for(int i=0; i<broj; i++) { //Да се користи методот ednakviSe за споредба на два оперативни система.
- if(niza[i].ednakviSe(operativenSistem)==false) { //fakticki site ce gi vrte so ne se ednakvi
- count++; // da dobie novbroj na operativni unikatni sistemi
- }//brr
- }
- OperativenSistem * tmp = new OperativenSistem[count]; // i sea nova lista so brojot na tia so se unikatni
- count = 0; // counter pak na 0
- for (int i = 0; i < broj; i++) { // vrti gi site od nizata
- if (niza[i].ednakviSe(operativenSistem)==false) { // e sea samo tia so se unikatni smeat da vlezat
- tmp[count++] = niza[i]; // site od orig niza da se staat u novata niza so novoto brojce++
- }
- }
- delete [] niza;
- niza = tmp;
- broj = count;
- }
- void dodadi(const OperativenSistem &nov){
- for(int i=0; i<broj; i++) { //кој ќе го има следново однесување:
- // Доколку веќе постои оперативен систем од иста фамилија
- if ((niza[i].istaFamilija(nov) == true) && niza[i].sporediVerzija(nov) == -1) {
- niza[i] = nov; // can i do this ne mi se cine bas legit
- return ;
- }
- }
- OperativenSistem * tmp = new OperativenSistem[broj+1];
- for(int i=0; i<broj; i++)
- tmp[i] = niza[i];
- tmp[broj++] = nov;
- delete [] niza;
- this->niza = new OperativenSistem[broj];
- for(int i=0; i<broj; i++)
- this->niza[i] = tmp[i];
- }// Во секој друг случај, проследениот оперативен систем се додава како дополнителен во репозиториумот.
- };
- 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, (Tip)tip, golemina);
- repozitorium.dodadi(os);
- }
- repozitorium.pecatiOperativniSistemi();
- cin>>ime;
- cin>>verzija;
- cin>>tip;
- cin>>golemina;
- OperativenSistem os = OperativenSistem(ime, verzija, (Tip)tip, golemina);
- cout<<"=====Brishenje na operativen sistem====="<<endl;
- repozitorium.izbrishi(os);
- repozitorium.pecatiOperativniSistemi();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement