Advertisement
borisdexter

Folder

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