Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- class Image
- {
- protected:
- char *ime;
- char sopstvenik[51];
- int w;
- int h;
- public:
- Image(char *ime="untitled",char *sopstvenik = "unknown",int w = 800,int h=800)
- {
- this->ime = new char [strlen(ime)+1];
- strcpy(this->ime,ime);
- strcpy(this->sopstvenik,sopstvenik);
- this->w = w;
- this->h = h;
- }
- Image(const Image &i)
- {
- this->ime = new char [strlen(i.ime)+1];
- strcpy(this->ime,i.ime);
- strcpy(this->sopstvenik,i.sopstvenik);
- this->w = i.w;
- this->h = i.h;
- }
- Image& operator=(const Image &i)
- {
- if(this!=&i)
- {
- delete []ime;
- this->ime = new char [strlen(i.ime)+1];
- strcpy(this->ime,i.ime);
- strcpy(this->sopstvenik,i.sopstvenik);
- this->w = i.w;
- this->h = i.h;
- }
- return *this;
- }
- friend ostream &operator <<(ostream &out,Image &img)
- {
- out<<img.ime<<" "<<img.sopstvenik<<" "<<img.fileSize()<<endl;
- return out;
- }
- virtual int fileSize()
- {
- return h*w*3;
- }
- bool operator > (Image &img)
- {
- return this->fileSize() > img.fileSize();
- }
- virtual ~Image()
- {
- delete []ime;
- }
- };
- class TransparentImage : public Image
- {
- protected:
- bool tran;
- public:
- TransparentImage(char *ime="untitled",char *sopstvenik = "unknown",int w = 800,int h=800,
- bool tran = false) : Image(ime,sopstvenik,w,h)
- {
- this->tran = tran;
- }
- int fileSize()
- {
- if(tran)
- {
- return w*h*4;
- }
- else
- {
- return Image::fileSize() + (w*h)/8;
- }
- }
- ~TransparentImage(){}
- };
- class Folder
- {
- protected:
- char imeFolder[256];
- char imeKorisnik[51];
- Image *img[100];
- int n;
- public:
- Folder(char *imeFolder="",char *imeKorisnik="unknown")
- {
- strcpy(this->imeFolder,imeFolder);
- strcpy(this->imeKorisnik,imeKorisnik);
- n=0;
- }
- Folder(const Folder &f)
- {
- strcpy(this->imeFolder,f.imeFolder);
- strcpy(this->imeKorisnik,f.imeKorisnik);
- n=f.n;
- for(int i=0;i<n;i++)
- {
- this->img[i] = f.img[i];
- }
- }
- Folder& operator=(const Folder &f)
- {
- if(this!=&f)
- {
- strcpy(this->imeFolder,f.imeFolder);
- strcpy(this->imeKorisnik,f.imeKorisnik);
- n=f.n;
- for(int i=0;i<n;i++)
- {
- this->img[i] = f.img[i];
- }
- return *this;
- }
- }
- int folderSize()
- {
- int suma=0;
- for(int i=0;i<n;i++)
- {
- suma = suma + img[i]->fileSize();
- }
- return suma;
- }
- Image* getMaxFile()
- {
- int max = img[0]->fileSize();
- int index=0;
- for(int i=1;i<n;i++)
- {
- if(img[i]->fileSize() > max)
- {
- index = i;
- max = img[i]->fileSize();
- }
- }
- return img[index];
- }
- Folder& operator +=(Image &nova)
- {
- if(n<100)
- {
- img[n] = &nova;
- n++;
- }
- }
- friend ostream& operator<<(ostream &out,Folder &f)
- {
- out<<f.imeFolder<<" "<<f.imeKorisnik<<" --"<<endl;
- for(int i=0;i<f.n;i++)
- {
- out<<i+1<<"."<<*f.img[i];
- }
- return out;
- }
- Image* operator[](int index)
- {
- if(index<0 && index>=n)
- return NULL;
- else
- return img[index];
- }
- ~Folder(){}
- };
- Folder& max_folder_size(Folder *dir_list, int folders_num)
- {
- int max = dir_list[0].folderSize();
- int index=0;
- for(int i=1;i<folders_num;i++)
- {
- if(dir_list[i].folderSize() > max)
- {
- max = dir_list[i].folderSize();
- index =i;
- }
- }
- return dir_list[index];
- }
- int main() {
- int tc; // Test Case
- char name[255];
- char user_name[51];
- int w, h;
- bool tl;
- cin >> tc;
- if (tc==1){
- // Testing constructor(s) & operator << for class File
- cin >> name;
- cin >> user_name;
- cin >> w;
- cin >> h;
- Image f1;
- cout<< f1;
- Image f2(name);
- cout<< f2;
- Image f3(name, user_name);
- cout<< f3;
- Image f4(name, user_name, w, h);
- cout<< f4;
- }
- else if (tc==2){
- // Testing constructor(s) & operator << for class TextFile
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- cin >> tl;
- TransparentImage tf1;
- cout<< tf1;
- TransparentImage tf4(name, user_name, w, h, tl);
- cout<< tf4;
- }
- else if (tc==3){
- // Testing constructor(s) & operator << for class Folder
- cin >> name;
- cin >> user_name;
- Folder f3(name, user_name);
- cout<< f3;
- }
- else if (tc==4){
- // Adding files to folder
- cin >> name;
- cin >> user_name;
- Folder dir(name, user_name);
- Image * f;
- TransparentImage *tf;
- int sub, fileType;
- while (1){
- cin >> sub; // Should we add subfiles to this folder
- if (!sub) break;
- cin >>fileType;
- if (fileType == 1){ // Reading File
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- f = new Image(name,user_name, w, h);
- dir += *f;
- }
- else if (fileType == 2){
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- cin >> tl;
- tf = new TransparentImage(name,user_name, w, h, tl);
- dir += *tf;
- }
- }
- cout<<dir;
- }
- else if(tc==5){
- // Testing getMaxFile for folder
- cin >> name;
- cin >> user_name;
- Folder dir(name, user_name);
- Image* f;
- TransparentImage* tf;
- int sub, fileType;
- while (1){
- cin >> sub; // Should we add subfiles to this folder
- if (!sub) break;
- cin >>fileType;
- if (fileType == 1){ // Reading File
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- f = new Image(name,user_name, w, h);
- dir += *f;
- }
- else if (fileType == 2){
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- cin >> tl;
- tf = new TransparentImage(name,user_name, w, h, tl);
- dir += *tf;
- }
- }
- cout<< *(dir.getMaxFile());
- }
- else if(tc==6){
- // Testing operator [] for folder
- cin >> name;
- cin >> user_name;
- Folder dir(name, user_name);
- Image* f;
- TransparentImage* tf;
- int sub, fileType;
- while (1){
- cin >> sub; // Should we add subfiles to this folder
- if (!sub) break;
- cin >>fileType;
- if (fileType == 1){ // Reading File
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- f = new Image(name,user_name, w, h);
- dir += *f;
- }
- else if (fileType == 2){
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- cin >> tl;
- tf = new TransparentImage(name,user_name, w, h, tl);
- dir += *tf;
- }
- }
- cin >> sub; // Reading index of specific file
- cout<< *dir[sub];
- }
- else if(tc==7){
- // Testing function max_folder_size
- int folders_num;
- Folder dir_list[10];
- Folder dir;
- cin >> folders_num;
- for (int i=0; i<folders_num; ++i){
- cin >> name;
- cin >> user_name;
- dir = Folder(name, user_name);
- Image* f;
- TransparentImage *tf;
- int sub, fileType;
- while (1){
- cin >> sub; // Should we add subfiles to this folder
- if (!sub) break;
- cin >>fileType;
- if (fileType == 1){ // Reading File
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- f = new Image(name,user_name, w, h);
- dir += *f;
- }
- else if (fileType == 2){
- cin >> name;
- cin >> user_name;
- cin >> w >> h;
- cin >> tl;
- tf = new TransparentImage(name,user_name, w, h, tl);
- dir += *tf;
- }
- }
- dir_list[i] = dir;
- }
- cout<<max_folder_size(dir_list, folders_num);
- }
- return 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement