Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. class Image
  9. {
  10. protected:
  11.     char *ime;
  12.     char sopstvenik[51];
  13.     int w;
  14.     int h;
  15. public:
  16.    
  17.     Image(char *ime="untitled",char *sopstvenik = "unknown",int w = 800,int h=800)
  18.     {
  19.         this->ime = new char [strlen(ime)+1];
  20.         strcpy(this->ime,ime);
  21.         strcpy(this->sopstvenik,sopstvenik);
  22.         this->w = w;
  23.         this->h = h;
  24.     }
  25.     Image(const Image &i)
  26.     {
  27.         this->ime = new char [strlen(i.ime)+1];
  28.         strcpy(this->ime,i.ime);
  29.         strcpy(this->sopstvenik,i.sopstvenik);
  30.         this->w = i.w;
  31.         this->h = i.h;
  32.     }
  33.     Image& operator=(const Image &i)
  34.     {
  35.         if(this!=&i)
  36.         {
  37.             delete []ime;
  38.         this->ime = new char [strlen(i.ime)+1];
  39.         strcpy(this->ime,i.ime);
  40.         strcpy(this->sopstvenik,i.sopstvenik);
  41.         this->w = i.w;
  42.         this->h = i.h;
  43.         }
  44.        
  45.         return *this;
  46.     }
  47.     friend ostream &operator <<(ostream &out,Image &img)
  48.     {
  49.         out<<img.ime<<" "<<img.sopstvenik<<" "<<img.fileSize()<<endl;
  50.         return out;
  51.     }
  52.     virtual int fileSize()
  53.     {
  54.         return h*w*3;
  55.     }
  56.     bool operator > (Image &img)
  57.     {
  58.         return this->fileSize() > img.fileSize();
  59.     }
  60.     virtual ~Image()
  61.     {
  62.         delete []ime;
  63.     }
  64. };
  65. class TransparentImage : public Image
  66. {
  67. protected:
  68.     bool tran;
  69. public:
  70.     TransparentImage(char *ime="untitled",char *sopstvenik = "unknown",int w = 800,int h=800,
  71.                     bool tran = false) : Image(ime,sopstvenik,w,h)
  72.     {
  73.         this->tran = tran;
  74.     }
  75.     int fileSize()
  76.     {
  77.         if(tran)
  78.         {
  79. return w*h*4;
  80.         }
  81.         else
  82.         {
  83.             return Image::fileSize() + (w*h)/8;
  84.         }
  85.     }
  86.     ~TransparentImage(){}
  87. };
  88.  
  89. class Folder
  90. {
  91. protected:
  92.     char imeFolder[256];
  93.     char imeKorisnik[51];
  94.     Image *img[100];
  95.     int n;
  96. public:
  97.     Folder(char *imeFolder="",char *imeKorisnik="unknown")
  98.     {
  99.         strcpy(this->imeFolder,imeFolder);
  100.         strcpy(this->imeKorisnik,imeKorisnik);
  101.         n=0;
  102.     }
  103.     Folder(const Folder &f)
  104.     {
  105.         strcpy(this->imeFolder,f.imeFolder);
  106.         strcpy(this->imeKorisnik,f.imeKorisnik);
  107.         n=f.n;
  108.         for(int i=0;i<n;i++)
  109.         {
  110.             this->img[i] = f.img[i];
  111.         }
  112.        
  113.     }
  114.     Folder& operator=(const Folder &f)
  115.     {
  116.         if(this!=&f)
  117.         {
  118.             strcpy(this->imeFolder,f.imeFolder);
  119.             strcpy(this->imeKorisnik,f.imeKorisnik);
  120.             n=f.n;
  121.             for(int i=0;i<n;i++)
  122.             {
  123.                 this->img[i] = f.img[i];
  124.             }
  125.             return *this;
  126.         }
  127.     }
  128.     int folderSize()
  129.     {
  130.         int suma=0;
  131.         for(int i=0;i<n;i++)
  132.         {
  133.             suma = suma + img[i]->fileSize();
  134.         }
  135.         return suma;
  136.     }
  137.     Image* getMaxFile()
  138.     {
  139.         int max = img[0]->fileSize();
  140.         int index=0;
  141.         for(int i=1;i<n;i++)
  142.         {
  143.             if(img[i]->fileSize() > max)
  144.             {
  145.                 index = i;
  146.                 max = img[i]->fileSize();
  147.             }
  148.         }
  149.         return img[index];
  150.     }
  151.     Folder& operator +=(Image &nova)
  152.     {
  153.         if(n<100)
  154.         {
  155.             img[n] = &nova;
  156.             n++;
  157.         }
  158.     }
  159.     friend ostream& operator<<(ostream &out,Folder &f)
  160.     {
  161.         out<<f.imeFolder<<" "<<f.imeKorisnik<<" --"<<endl;
  162.         for(int i=0;i<f.n;i++)
  163.         {
  164.             out<<i+1<<"."<<*f.img[i];
  165.         }
  166.         return out;
  167.     }
  168.     Image* operator[](int index)
  169.     {
  170.         if(index<0 && index>=n)
  171.             return NULL;
  172.         else
  173.             return img[index];
  174.     }
  175.     ~Folder(){}
  176. };
  177.  
  178. Folder& max_folder_size(Folder *dir_list, int folders_num)
  179. {
  180.     int max = dir_list[0].folderSize();
  181.     int index=0;
  182.     for(int i=1;i<folders_num;i++)
  183.     {
  184.         if(dir_list[i].folderSize() > max)
  185.         {
  186.             max = dir_list[i].folderSize();
  187.             index =i;
  188.         }
  189.     }
  190.     return dir_list[index];
  191. }
  192. int main() {
  193.  
  194.     int tc; // Test Case
  195.  
  196.     char name[255];
  197.     char user_name[51];
  198.     int w, h;
  199.     bool tl;
  200.  
  201.     cin >> tc;
  202.  
  203.     if (tc==1){
  204.       // Testing constructor(s) & operator << for class File
  205.  
  206.       cin >> name;
  207.       cin >> user_name;
  208.       cin >> w;
  209.       cin >> h;
  210.  
  211.  
  212.       Image f1;
  213.  
  214.       cout<< f1;
  215.  
  216.       Image f2(name);
  217.       cout<< f2;
  218.  
  219.       Image f3(name, user_name);
  220.       cout<< f3;
  221.  
  222.       Image f4(name, user_name, w, h);
  223.       cout<< f4;
  224.     }
  225.     else if (tc==2){
  226.       // Testing constructor(s) & operator << for class TextFile
  227.       cin >> name;
  228.       cin >> user_name;
  229.       cin >> w >> h;
  230.       cin >> tl;
  231.  
  232.       TransparentImage tf1;
  233.       cout<< tf1;
  234.  
  235.       TransparentImage tf4(name, user_name, w, h, tl);
  236.       cout<< tf4;
  237.     }
  238.     else if (tc==3){
  239.       // Testing constructor(s) & operator << for class Folder
  240.       cin >> name;
  241.       cin >> user_name;
  242.  
  243.       Folder f3(name, user_name);
  244.       cout<< f3;
  245.     }
  246.     else if (tc==4){
  247.       // Adding files to folder
  248.       cin >> name;
  249.       cin >> user_name;
  250.  
  251.       Folder dir(name, user_name);
  252.  
  253.       Image * f;
  254.       TransparentImage *tf;
  255.  
  256.       int sub, fileType;
  257.  
  258.       while (1){
  259.         cin >> sub; // Should we add subfiles to this folder
  260.         if (!sub) break;
  261.  
  262.         cin >>fileType;
  263.         if (fileType == 1){ // Reading File
  264.           cin >> name;
  265.           cin >> user_name;
  266.           cin >> w >> h;
  267.           f = new Image(name,user_name, w, h);
  268.             dir += *f;
  269.         }
  270.         else if (fileType == 2){
  271.           cin >> name;
  272.           cin >> user_name;
  273.           cin >> w >> h;
  274.           cin >> tl;
  275.           tf = new TransparentImage(name,user_name, w, h, tl);
  276.             dir += *tf;
  277.         }
  278.       }
  279.       cout<<dir;
  280.     }
  281.     else if(tc==5){
  282.       // Testing getMaxFile for folder
  283.  
  284.       cin >> name;
  285.       cin >> user_name;
  286.  
  287.       Folder dir(name, user_name);
  288.  
  289.       Image* f;
  290.       TransparentImage* tf;
  291.  
  292.       int sub, fileType;
  293.  
  294.       while (1){
  295.         cin >> sub; // Should we add subfiles to this folder
  296.         if (!sub) break;
  297.  
  298.         cin >>fileType;
  299.         if (fileType == 1){ // Reading File
  300.           cin >> name;
  301.           cin >> user_name;
  302.           cin >> w >> h;
  303.           f = new Image(name,user_name, w, h);
  304.             dir += *f;
  305.         }
  306.         else if (fileType == 2){
  307.           cin >> name;
  308.           cin >> user_name;
  309.           cin >> w >> h;
  310.           cin >> tl;
  311.           tf = new TransparentImage(name,user_name, w, h, tl);
  312.             dir += *tf;
  313.         }
  314.       }
  315.       cout<< *(dir.getMaxFile());
  316.     }
  317.     else if(tc==6){
  318.       // Testing operator [] for folder
  319.  
  320.       cin >> name;
  321.       cin >> user_name;
  322.  
  323.       Folder dir(name, user_name);
  324.  
  325.       Image* f;
  326.       TransparentImage* tf;
  327.  
  328.       int sub, fileType;
  329.  
  330.       while (1){
  331.         cin >> sub; // Should we add subfiles to this folder
  332.         if (!sub) break;
  333.  
  334.         cin >>fileType;
  335.         if (fileType == 1){ // Reading File
  336.           cin >> name;
  337.           cin >> user_name;
  338.           cin >> w >> h;
  339.           f = new Image(name,user_name, w, h);
  340.             dir += *f;
  341.         }
  342.         else if (fileType == 2){
  343.           cin >> name;
  344.           cin >> user_name;
  345.           cin >> w >> h;
  346.           cin >> tl;
  347.           tf = new TransparentImage(name,user_name, w, h, tl);
  348.             dir += *tf;
  349.         }
  350.       }
  351.  
  352.       cin >> sub; // Reading index of specific file
  353.       cout<< *dir[sub];
  354.     }
  355.     else if(tc==7){
  356.       // Testing function max_folder_size
  357.       int folders_num;
  358.  
  359.       Folder dir_list[10];
  360.  
  361.       Folder dir;
  362.       cin >> folders_num;
  363.  
  364.       for (int i=0; i<folders_num; ++i){
  365.         cin >> name;
  366.         cin >> user_name;
  367.         dir = Folder(name, user_name);
  368.  
  369.  
  370.         Image* f;
  371.         TransparentImage *tf;
  372.  
  373.         int sub, fileType;
  374.  
  375.         while (1){
  376.           cin >> sub; // Should we add subfiles to this folder
  377.           if (!sub) break;
  378.  
  379.           cin >>fileType;
  380.           if (fileType == 1){ // Reading File
  381.             cin >> name;
  382.             cin >> user_name;
  383.             cin >> w >> h;
  384.             f = new Image(name,user_name, w, h);
  385.               dir += *f;
  386.           }
  387.           else if (fileType == 2){
  388.             cin >> name;
  389.             cin >> user_name;
  390.             cin >> w >> h;
  391.             cin >> tl;
  392.             tf = new TransparentImage(name,user_name, w, h, tl);
  393.               dir += *tf;
  394.           }
  395.         }
  396.         dir_list[i] = dir;
  397.       }
  398.  
  399.       cout<<max_folder_size(dir_list, folders_num);
  400.     }
  401.     return 0;
  402. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement