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[50];
- int visina;
- int sirina;
- public:
- Image(){
- this->ime=new char[8];
- strcpy(this->ime,"untitled");
- strcpy(this->sopstvenik,"unknown");
- visina=800;
- sirina=800;
- }
- Image(char *ime,char sopstvenik[],int sirina,int visina){
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- strcpy(this->sopstvenik,sopstvenik);
- this->visina=visina;
- this->sirina=sirina;
- }
- float fileSize(){
- return visina*sirina*3;
- }
- friend ostream &operator<<(ostream &out,Image &objekt){
- out<<objekt.ime<<"_"<<objekt.sopstvenik<<"_"<<objekt.fileSize()<<endl;
- return out;
- }
- bool operator>(Image &objekt){
- if(this->fileSize()>objekt.fileSize()){
- return true;
- }
- return false;
- }
- ~Image(){
- delete []ime;
- }
- };
- class TransparentImage:public Image{
- private:
- bool daliPoddrzuva;
- public:
- TransparentImage(){
- daliPoddrzuva=false;
- }
- TransparentImage(char *ime,char sopstvenik[],int sirina,int visina,bool daliPoddrzuva):Image(ime,sopstvenik,sirina,visina){
- this->daliPoddrzuva=daliPoddrzuva;
- }
- float fileSize(){
- if(daliPoddrzuva){
- return visina*sirina*4;
- }else{
- return visina*sirina*3 + (visina*sirina)/8;
- }
- }
- friend ostream &operator<<(ostream &out,TransparentImage &objekt){
- out<<objekt.ime<<"_"<<objekt.sopstvenik<<"_"<<objekt.fileSize()<<endl;
- return out;
- }
- bool operator>(TransparentImage &objekt){
- if(this->fileSize()>objekt.fileSize()){
- return true;
- }
- return false;
- }
- ~TransparentImage(){}
- };
- class Folder{
- protected:
- char imeFolder[255];
- char imeSopstvenik[50];
- Image niza*[100];
- public:
- Folder(){
- strcpy(this->imeSopstvenik,"unknown");
- }
- Folder(char imeFolder[],char imeSopstvenik[]){
- strcpy(this->imeSopstvenik,imeSopstvenik);
- strcpy(this->imeFolder,imeFolder);
- }
- float folderSize(){
- float suma=0;
- for(int i=0;i<100;i++){
- TransparentImage *ti=dynamic_cast<TransparentImage*>(niza[i]);
- if(ti!=0){
- suma+=ti->fileSize();
- }else{
- Image *i=dynamic_cast<Image*>(niza[i]);
- if(i!=0){
- suma+=niza[i]->fileSize();
- }else{
- break;
- }
- }
- }
- return suma;
- }
- ~Folder(){}
- };
- 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