Advertisement
Guest User

Untitled

a guest
Jun 13th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <deque>
  5. #include <algorithm>
  6. #include <bitset>
  7. #include <math.h>
  8. #include <string>
  9. #include <set>
  10. #include <fstream>
  11. #include <valarray>
  12. #include <iomanip>
  13. #include <bitset>
  14. #include <random>
  15. #include <complex>
  16. #include <random>
  17. #include <unordered_map>
  18. #include <unordered_set>
  19. using namespace std;
  20. class apple {
  21. // пищевая ценность продукта
  22. protected: int value;
  23. private:
  24.  
  25. string color , type , country ;
  26. vector<string> clrs = {"red" , "blue" , "green" , "yellow" , "white" , "golden"};
  27. vector<string> ctrs = {"Russia" , "Ecuador" , "Columbia" , "Argentina" , "Brazil" , "Netherlands"};
  28. vector<string> tps = {"beutifull apple" , "apple" , "big apple" , "small apple" , "tasty apple" , "pineapple"};
  29. int weight , Fe , kcal , vitB , vitA , vitC , Mg ;
  30. // поменять содержание витаминов А и В
  31. void swap_A_B() { swap(vitA , vitB); }
  32. // поменять содержание железа и магния
  33. void swap_Fe_Mg(){ swap(Fe , Mg); }
  34. // перемешать порядок стран
  35. void shuffle_ctrs() {
  36. random_shuffle(ctrs.begin(), ctrs.end());
  37. }
  38. // перемешать порядок цветов
  39. void shuffle_clrs() {
  40. random_shuffle(clrs.begin(), clrs.end());
  41. }
  42. // перемешать порядок типов
  43. void shuffle_tps() {
  44. random_shuffle(tps.begin(), tps.begin());
  45. }
  46. // добавить еще одну страну происхождения
  47. void add_to_ctrs(string cnt) {
  48. ctrs.push_back(cnt);
  49. }
  50. // добавить еще один возможный цвет
  51. void add_to_clrs(string cnt) {
  52. clrs.push_back(cnt);
  53. }
  54. // добавить еще возможный тип
  55. void add_to_tps(string cnt) {
  56. tps.push_back(cnt);
  57. }
  58. public:
  59. void hello() { cout << "Объект класса яблоко\n"; }
  60. // конструктор по умлочанию
  61. apple() {
  62. cout << "сработал конструктор по умолчанию, данных нет\n";
  63. }
  64. // конструктор для всех начальных данных
  65. apple(string color , string type , string country , int weight ,int kcal , int Fe , int Mg , int vitA , int vitB , int vitC ) {
  66. cout << "сработал конструктор, установленны данные\n";
  67. set_apple(color, type , country , weight , kcal , Fe , Mg , vitA , vitB , vitC);
  68. }
  69. // конструктор для начальных данных цвет и тип, если вы только видете это яблоко
  70. apple(string color , string type ) {
  71. cout << "сработал конструктор с двумя изначальными параметрами, установленны данные\n";
  72. set_color(color);
  73. set_type(type);
  74. }
  75. // конструктор для начальных данных цвет
  76. apple(string color) {
  77. cout << "сработал конструктор, если известен только цвет\n";
  78. set_color(color);
  79. }
  80. // устанавливаем private параметрам новые данные
  81. friend const apple operator*(const apple& left, const apple& right);
  82. friend const apple operator+(const apple& left, const apple& right);
  83. friend ostream& operator<<(ostream& os, const apple& app);
  84. // все страны которые есть в базе
  85. void get_ctrs() {
  86. cout << "текущий список возможных стран: \n";
  87. for(int i = 0; i < ctrs.size(); i++) {
  88. cout << ctrs[i] << " ";
  89. }
  90. cout << "\n";
  91. }
  92. // все цвета которые есть в базе
  93. void get_clrs() {
  94. cout << "текущий список возможных цветов: \n";
  95. for(int i = 0; i < clrs.size(); i++) {
  96. cout << clrs[i] << " ";
  97. }
  98. cout << "\n";
  99. }
  100. // все типы которые есть в базе
  101. void get_tps() {
  102. cout << "текущий список возможных типов: \n";
  103. for(int i = 0; i < tps.size(); i++) {
  104. cout << tps[i] << " ";
  105. }
  106. cout << "\n";
  107. }
  108. // дополнение словаря стран + использование приватного метода
  109. void to_ctrs(vector<string> &to_add) {
  110. for(int i = 0; i < to_add.size(); i++) {
  111. add_to_ctrs(to_add[i]);
  112. }
  113. }
  114. // дополнение словаря цветов + использование приватного метода
  115. void to_clrs(vector<string> &to_add) {
  116. for(int i = 0; i < to_add.size(); i++) {
  117. add_to_clrs(to_add[i]);
  118. }
  119. }
  120. // дополнение словаря типов + использование приватного метода
  121. void to_tps(vector<string> &to_add) {
  122. for(int i = 0; i < to_add.size(); i++) {
  123. add_to_tps(to_add[i]);
  124. }
  125. }
  126. // очистить словарь стран
  127. void clear_countries() { ctrs.clear(); }
  128. // очистить словарь цветов
  129. void clear_colors() { clrs.clear(); }
  130. // очистить словарь типов
  131. void clear_types() { tps.clear(); }
  132. // передать и заменить новый словарь стран
  133. void new_countries(vector<string> &to_add) {
  134. clear_countries();
  135. to_ctrs(to_add);
  136. }
  137. // передать и заменить новый словарь стран
  138. void new_colors(vector<string> &to_add) {
  139. clear_colors();
  140. to_clrs(to_add);
  141. }
  142. // передать и заменить новый словарь типов
  143. void new_types(vector<string> &to_add) {
  144. clear_types();
  145. to_tps(to_add);
  146. }
  147. // установка яблока со всеми параметрами
  148. void set_apple(string new_color , string new_type , string new_country , int new_weight ,int new_kcal , int new_Fe , int new_Mg , int new_vitA , int new_vitB , int new_vitC ) {
  149. cout << "все свойства установлены \n";
  150. color = new_color;
  151. type = new_type;
  152. country = new_country;
  153. weight = new_weight;
  154. kcal = new_kcal;
  155. Fe = new_Fe;
  156. Mg = new_Mg;
  157. vitA = new_vitA;
  158. vitB = new_vitB;
  159. vitC = new_vitC;
  160. }
  161. // делаем случайное яблоко
  162. void set_rand_apple() {
  163. cout << "случайная инициализация: ";
  164. int num_con = rand() % ctrs.size();
  165. int num_col = rand() % clrs.size();
  166. int num_type = rand() % tps.size();
  167. string clr = clrs[num_col];
  168. string cnt = ctrs[num_con];
  169. string tpe = tps[num_type];
  170. int F = rand() % 100 + 1;
  171. int M = rand() % 100 + 1;
  172. int wei = rand() % 100 + 1;
  173. int cal = rand() % 100 + 1;
  174. int vA = rand() % 100;
  175. int vB = rand() % 100;
  176. int vC = rand() % 100;
  177. set_apple(clr , tpe , cnt , wei , cal , F , M , vA , vB , vC);
  178. }
  179. // получаем данные о нашем объекте
  180. void get_all_info() {
  181. cout << "--------------------------------\n";
  182. cout << "актуальная информация: \n";
  183. cout << "color: " << color << "\n";
  184. cout << "type: " << type << "\n";
  185. cout << "country: " << country << "\n";
  186. cout << "weight: " << weight << "\n";
  187. cout << "kcal: " << kcal << "\n";
  188. cout << "Fe: " << Fe << "\n";
  189. cout << "Mg: " << Mg << "\n";
  190. cout << "vitA: " << vitA << "\n";
  191. cout << "vitB: " << vitB << "\n";
  192. cout << "vitC: " << vitC << "\n";
  193. cout << "--------------------------------\n";
  194. // to add other parameters;
  195. }
  196. // устанливаем цвет объекта
  197. void set_color(string cl) {
  198. cout << "тип объекта установлен\n";
  199. color = cl;
  200. }
  201. // устанливаем тип объекта
  202. void set_type(string tp) {
  203. cout << "тип объекта установлен\n";
  204. type = tp;
  205. }
  206. // устанливаем страну объекта
  207. void set_country(string count) {
  208. cout << "страна происхождения объекта установлена\n";
  209. country = count;
  210. }
  211. // устанливаем массу объекта
  212. void set_weight(int wei) {
  213. cout << "вес объекта установлен\n";
  214. weight = wei;
  215. }
  216. // устанливаем калории объекта
  217. void set_kcal(int cal) {
  218. cout << "число калорий объекта установлен\n";
  219. kcal = cal;
  220. }
  221. // устанливаем содержание железа в объекте
  222. void set_Fe(int F) {
  223. cout << "содержание железа в объекте установлено\n";
  224. Fe = F;
  225. }
  226. // устанливаем содержание магния в объекте
  227. void set_Mg(int M) {
  228. cout << "содержание магния в объекте установлено\n";
  229. Mg = M;
  230. }
  231. // устанливаем содержание витамина А в объекте
  232. void set_vitA(int A) {
  233. cout << "содержание витамина А в объекте установлено\n";
  234. vitA = A;
  235. }
  236. // устанливаем содержание витамина B в объекте
  237. void set_vitB(int B) {
  238. cout << "содержание витамина B в объекте установлено\n";
  239. vitB = B;
  240. }
  241. // устанливаем содержание витамина C в объекте
  242. void set_vitC(int C) {
  243. cout << "содержание витамина C в объекте установлено\n";
  244. vitC = C;
  245. }
  246. // получаем только тип
  247. void get_type() {
  248. cout << "тип объекта\n";
  249. cout << "type: " << type << "\n";
  250. }
  251. // получаем только цвет
  252. void get_color() {
  253. cout << "цвет объекта\n";
  254. cout << "color: " << color << "\n";
  255. }
  256. // получаем только страну
  257. void get_country() {
  258. cout << "страна происхождения\n";
  259. cout << "country: " << country << "\n";
  260. }
  261. // получаем только массу
  262. void get_weight() {
  263. cout << "масса объекта\n";
  264. cout << "weight: " << weight << "\n";
  265. }
  266. // получаем только калории
  267. void get_kcal() {
  268. cout << "калории в объекте\n";
  269. cout << "kcal: " << kcal << "\n";
  270. }
  271. // получаем только содержание железа
  272. void get_Fe() {
  273. cout << "содержание железа в объекте\n";
  274. cout << "Fe: " << Fe << "\n";
  275. }
  276. // получаем только содержание магния
  277. void get_Mg() {
  278. cout << "содержание магния в объекте\n";
  279. cout << "Mg: " << Mg << "\n";
  280. }
  281. // получаем только содержание витамина А
  282. void get_vitA() {
  283. cout << "содержание витамина А в объекте\n";
  284. cout << "vitA: " << vitA << "\n";
  285. }
  286. // получаем только содержание витамина B
  287. void get_vitB() {
  288. cout << "содержание витамина B в объекте\n";
  289. cout << "vitB: " << vitB << "\n";
  290. }
  291. // получаем только содержание витамина C
  292. void get_vitC() {
  293. cout << "содержание витамина C в объекте\n";
  294. cout << "vitC: " << vitC << "\n";
  295. }
  296. // выводит всю информацию о классе в файлик с соответствующим именем объекта класса
  297. void to_xml(string name) {
  298. ofstream fout;
  299. name += ".xml";
  300. fout.open(name);
  301. fout << "--------------------------------\n";
  302. fout << "актуальная информация: \n";
  303. fout << "color: " << color << "\n";
  304. fout << "type: " << type << "\n";
  305. fout << "country: " << country << "\n";
  306. fout << "weight: " << weight << "\n";
  307. fout << "kcal: " << kcal << "\n";
  308. fout << "Fe: " << Fe << "\n";
  309. fout << "Mg: " << Mg << "\n";
  310. fout << "vitA: " << vitA << "\n";
  311. fout << "vitB: " << vitB << "\n";
  312. fout << "vitC: " << vitC << "\n";
  313. fout << "--------------------------------\n";
  314. fout.close();
  315. }
  316. // деструктор
  317. ~apple() {
  318. cout << "деструктор сработал!\n";
  319. }
  320.  
  321. };
  322. // дочерний класс ананас
  323. class pineapple : public apple {
  324. private: int *x;
  325. public:
  326. pineapple() : apple() {
  327. // выделили память!
  328. x = new int;
  329. }
  330. void increase_value() {
  331. value++;
  332. // благодаря protected теперь дочерний класс pineapple имеет право доступа к value из apple
  333. }
  334. ~pineapple() {
  335. // очистили память!
  336. delete x;
  337. cout << "pineapple was destructed\n";
  338. }
  339. // установить загадочное х в ананасе
  340. void set_x(int p) {
  341. *x = p;
  342. }
  343. // получить загадочное х в ананасе
  344. void get_x() {
  345. cout << *x << ": current value\n";
  346. }
  347. };
  348. const apple operator+(const apple& left, const apple& right) {
  349. string coun = min(left.country, right.country) + " or " + max(left.country , right.country);
  350. string clr = min(left.color, right.color) + " or " + max(left.color , right.color);
  351. string type = min(left.type, right.type) + " or " + max(left.type , right.type);
  352. int F = left.Fe + right.Fe;
  353. int M = left.Mg + right.Mg;
  354. int wei = left.weight + right.weight;
  355. int cal = left.kcal + right.kcal;
  356. int vA = left.vitA + right.vitA;
  357. int vB = left.vitB + right.vitB;
  358. int vC = left.vitC + right.vitC;
  359. return apple(clr , type , coun , wei , cal , F , M , vA , vB , vC);
  360. }
  361. const apple operator*(const apple& left, const apple& right) {
  362. string coun = min(left.country, right.country) + " and " + max(left.country , right.country);
  363. string clr = min(left.color, right.color) + " and " + max(left.color , right.color);
  364. string type = min(left.type, right.type) + " and " + max(left.type , right.type);
  365. int F = left.Fe * right.Fe;
  366. int M = left.Mg * right.Mg;
  367. int wei = left.weight * right.weight;
  368. int cal = left.kcal * right.kcal;
  369. int vA = left.vitA * right.vitA;
  370. int vB = left.vitB * right.vitB;
  371. int vC = left.vitC * right.vitC;
  372. return apple(clr , type , coun , wei , cal , F , M , vA , vB , vC);
  373. }
  374. ostream& operator<<(ostream& os, const apple& app) {
  375. os << "--------------------------------\n";
  376. os << "актуальная информация: \n";
  377. os << "color: " << app.color << "\n";
  378. os << "type: " << app.type << "\n";
  379. os << "country: " << app.country << "\n";
  380. os << "weight: " << app.weight << "\n";
  381. os << "kcal: " << app.kcal << "\n";
  382. os << "Fe: " << app.Fe << "\n";
  383. os << "Mg: " << app.Mg << "\n";
  384. os << "vitA: " << app.vitA << "\n";
  385. os << "vitB: " << app.vitB << "\n";
  386. os << "vitC: " << app.vitC << "\n";
  387. os << "--------------------------------\n";
  388. return os;
  389. }
  390. int main() {
  391. ios_base::sync_with_stdio(false);
  392. cin.tie(0); cout.tie(0);
  393. setlocale(LC_ALL, "rus");
  394. srand(time(0));
  395. string cl, tp, ctr;
  396. int Fe, Mg, kcal, weight, vitA, vitB, vitC;
  397. cl = "red";
  398. tp = "apple";
  399. ctr = "Russia";
  400. weight = 10;
  401. kcal = 34;
  402. Fe = 23;
  403. Mg = 24;
  404. vitA = 14;
  405. vitB = 98;
  406. vitC = 67;
  407. apple x;
  408. // удобная инициализация нового яблока случайным образом
  409. x.set_rand_apple();
  410. // вывсести актулальную информацию
  411. x.get_all_info();
  412. // вывод той же информации непосредственно через перегрузку операции '<<'
  413. cout << x;
  414. // пример для конструктора с двумя начальными данными
  415. apple app(cl , tp);
  416. // пример для конструктора если известен только цвет
  417. apple app_clr(cl);
  418. // пример для конструктора по умолчанию
  419. apple st;
  420. // перегрузка сложения
  421. cout << app + x;
  422. // перегрузка умножения
  423. cout << app * x << "\n";
  424. // проверка всех set/get
  425. //цвет
  426. st.set_color(cl);
  427. st.get_color();
  428. //тип
  429. st.set_type(tp);
  430. st.get_type();
  431. // страна производства
  432. st.set_country(ctr);
  433. st.get_country();
  434. // вес
  435. st.set_weight(weight);
  436. st.get_weight();
  437. // калории
  438. st.set_kcal(kcal);
  439. st.get_kcal();
  440. // содержание железа
  441. st.set_Fe(Fe);
  442. st.get_Fe();
  443. // содержание магния
  444. st.set_Mg(Mg);
  445. st.get_Mg();
  446. // содержание витамина А
  447. st.set_vitA(vitA);
  448. st.get_vitA();
  449. // содержание витамина B
  450. st.set_vitB(vitB);
  451. st.get_vitB();
  452. // содержание витамина C
  453. st.set_vitC(vitC);
  454. st.get_vitC();
  455. //(список стран, откуда происходит рандомное распределение)
  456. st.get_ctrs();
  457. //(список цветов, откуда происходит рандомное распределение)
  458. st.get_clrs();
  459. //(список типов, откуда происходит рандомное распределение)
  460. st.get_tps();
  461. // чтобы отчистить словарь стран цветов или типов st.clear_countries() st.clear_colors() st.clear_types()
  462. st.clear_types();
  463. vector<string> to_add;
  464. cout << "введите размер словаря стран,на который вы хотите заменить старый словарь и затем введите n стран \n";
  465. int n;
  466. cin >> n;
  467. for(int i = 0; i < n; i++) {
  468. string cur;
  469. cin >> cur;
  470. to_add.push_back(cur);
  471. }
  472. st.new_countries(to_add);
  473. to_add.clear();
  474. cout << "введите размер словаря цветов,на который вы хотите заменить старый словарь и затем введите n цветов \n";
  475. cin >> n;
  476. for(int i = 0; i < n; i++) {
  477. string cur;
  478. cin >> cur;
  479. to_add.push_back(cur);
  480. }
  481. st.new_colors(to_add);
  482. to_add.clear();
  483. cout << "введите размер словаря типов,на который вы хотите заменить старый словарь и затем введите n типов \n";
  484. cin >> n;
  485. for(int i = 0; i < n; i++) {
  486. string cur;
  487. cin >> cur;
  488. to_add.push_back(cur);
  489. }
  490. st.new_types(to_add);
  491. // вывод существующего объекта класса и информации о нем с соответвующий файлик .xml
  492. st.to_xml("st");
  493. pineapple piney ;
  494. piney.set_x(123);
  495. piney.get_x();
  496. return 0;
  497. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement