Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.14 KB | None | 0 0
  1. // Proiect_IEP_2.cpp : This file contains the 'main' function. Program execution begins and ends there.
  2. //
  3. #include <iostream>
  4. #include <string>
  5. #include <list>
  6. #include <iterator>
  7. #include <assert.h>
  8.  
  9. using namespace std;
  10.  
  11. #define NR_MAX_GAINI 30
  12. bool one_instance_strut = false;
  13.  
  14. class Pasare
  15. {
  16. public:
  17. virtual void zboara() = 0;
  18. virtual void afisare_sunet() = 0;
  19. virtual void afisare_toti_parametrii() = 0;
  20. virtual string get_sunet() = 0;
  21. };
  22.  
  23. class Papagal:public Pasare
  24. {
  25. private:
  26. std::list<string> lista_cuvinte;
  27. string sunet;
  28. int distanta = 0;
  29. public:
  30. Papagal(list<string> lista_cuvinte_papagal, string sunet, int distanta_zboara)
  31. {
  32. list<string>::iterator it;
  33. for (it = lista_cuvinte_papagal.begin(); it!= lista_cuvinte_papagal.end(); it++)
  34. {
  35. lista_cuvinte.push_back(*it);
  36. }
  37. this->sunet = sunet;
  38. this->distanta = distanta_zboara;
  39. }
  40. void zboara()
  41. {
  42. std::cout << "Papagalul poate zbura la distanta de: " << this->distanta << endl;
  43. }
  44. void afisare_sunet()
  45. {
  46. std::cout << "Sunetul papagalului este: " << this->sunet << endl;
  47. }
  48. string get_sunet()
  49. {
  50. return this->sunet;
  51. }
  52. void afisare_lista_cuvinte()
  53. {
  54. list<string>::iterator it;
  55. for (it = lista_cuvinte.begin(); it != lista_cuvinte.end(); it++)
  56. {
  57. std::cout << *it << endl;
  58. }
  59. }
  60. void afisare_toti_parametrii()
  61. {
  62.  
  63. std::cout << "\nPAPAGAL\nCuvintele stiute de catre papagal sunt: \n";
  64. afisare_lista_cuvinte();
  65. afisare_sunet();
  66. zboara();
  67. }
  68. };
  69.  
  70. class Gaina :public Pasare
  71. {
  72. private:
  73. int distanta = 0;
  74. static int nr_instante_gaini;
  75. bool vandut = false;
  76. string sunet;
  77. public:
  78. Gaina(int distanta, string sunet)
  79. {
  80. this->distanta = distanta;
  81. this->sunet = sunet;
  82. Gaina::incrementare_nr_instante_gaini();
  83. }
  84. ~Gaina()
  85. {
  86. std::cout << "Obiect gaina distrus";
  87. }
  88. void zboara()
  89. {
  90. std::cout << "Gaina poate zbura la distanta de: " << this->distanta << endl;
  91. }
  92. void afisare_sunet()
  93. {
  94. std::cout << "Sunetul gainii este: " << this->sunet << endl;
  95. }
  96. string get_sunet()
  97. {
  98. return this->sunet;
  99. }
  100. void afisare_toti_parametrii()
  101. {
  102. std::cout << "\nGAINA\n";
  103. afisare_sunet();
  104. zboara();
  105. afisare_vandut();
  106. std::cout << "Nr instante gaini: " << get_instante() << "\n";
  107. }
  108. void vand_gaina()
  109. {
  110. vandut=true;
  111. scadere_nr_instante_gaini();
  112. }
  113. void afisare_vandut()
  114. {
  115. if (vandut == true)
  116. {
  117. cout << "Gaina vanduta" << endl;
  118. }
  119. else
  120. {
  121. cout << "Gaina nevanduta" << endl;
  122. }
  123. }
  124. static void scadere_nr_instante_gaini()
  125. {
  126. nr_instante_gaini--;
  127. }
  128. static void incrementare_nr_instante_gaini()
  129. {
  130. nr_instante_gaini++;
  131. }
  132. static int get_instante()
  133. {
  134. return nr_instante_gaini;
  135. }
  136. };
  137.  
  138. class Strut :public Pasare
  139. {
  140. private:
  141. static Strut* instance;
  142. int distanta=-1;
  143. string sunet;
  144. int nr_gaini;
  145.  
  146. public:
  147. static Strut* getInstance()
  148. {
  149. if (!instance)
  150. instance = new Strut();
  151. else
  152. return instance;
  153. }
  154. int get_nr_gaini_ale_strutului()
  155. {
  156. return this->nr_gaini;
  157. }
  158. void set_distanta(int distanta)
  159. {
  160. this->distanta = distanta;
  161. }
  162. void set_sunet(string sunet)
  163. {
  164. this->sunet = sunet;
  165. }
  166. string get_sunet()
  167. {
  168. return this->sunet;
  169. }
  170. int get_distanta()
  171. {
  172. return this->distanta;
  173. }
  174. void zboara()
  175. {
  176. std::cout << "Strutul poate zbura la distanta de: " << this->distanta << endl;
  177. }
  178. void afisare_sunet()
  179. {
  180. std::cout << "Sunetul strutului este: " << this->sunet << endl;
  181. }
  182. void afisare_toti_parametrii()
  183. {
  184. std::cout << "\STRUT\n";
  185. afisare_sunet();
  186. zboara();
  187. std::cout << "Nr gaini continute de strut: " << get_nr_gaini_ale_strutului() << "\n";
  188. }
  189. void operator+(Gaina* gaina)
  190. {
  191. this->nr_gaini++;
  192. Gaina::scadere_nr_instante_gaini();
  193. //gaina->~Gaina();
  194. }
  195. };
  196.  
  197. void afisare_meniu()
  198. {
  199. std::cout << "\n\n1. Adaugare papagal in lista";
  200. std::cout << "\n2. Adaugare gaina in lista";
  201. std::cout << "\n3. Setare parametrii obiectului strut";
  202. std::cout << "\n4. Afisare pasari";
  203. std::cout << "\n5. Vanzare gaina";
  204. std::cout << "\n6. Adunare gaina cu strut\n";
  205. }
  206. void do_action(int optiune, list<Pasare*> *lista_pasari)
  207. {
  208. switch (optiune)
  209. {
  210. case 1:
  211. {
  212. int nr_elemente_lista;
  213. int distanta;
  214. string cuvant;
  215. string sunet;
  216. list<string> lista;
  217.  
  218. std::cout << "Cate cuvinte stie papagalul? ";
  219. cin >> nr_elemente_lista;
  220. std::cout << "\nIntroduceti pe rand, cu enter intre ele, cuvintele stiute de papagal:\n";
  221. for (int i = 0; i < nr_elemente_lista; i++)
  222. {
  223. cin >> cuvant;
  224. lista.push_back(cuvant);
  225. }
  226. std::cout << "\nIntroduceti sunetul caracteristic papagalului: ";
  227. std::cin >> sunet;
  228. std::cout << "\nIntroduceti distanta la care poate sa zboare papagalul: ";
  229. std::cin >> distanta;
  230.  
  231. lista_pasari->push_back(new Papagal(lista, sunet, distanta));
  232. break;
  233. }
  234. case 2:
  235. {
  236. int distanta;
  237. string sunet;
  238.  
  239. if (Gaina::get_instante() == NR_MAX_GAINI)
  240. {
  241. std::cout << "S-a ajuns la nr maxim de gaini! NU se mai poate crea nicio gaina\n";
  242. return;
  243. }
  244. std::cout << "\nIntroduceti sunetul caracteristic gainii: ";
  245. std::cin >> sunet;
  246. std::cout << "\nIntroduceti distanta la care poate sa zboare gaina, MAI MICA DE 10 METRI: ";
  247. std::cin >> distanta;
  248. if (distanta > 10)
  249. {
  250. std::cout << "Ati introdus o distanta > 10m => Nu s-a putut crea obiectul gaina.\n";
  251. return;
  252. }
  253. lista_pasari->push_back(new Gaina(distanta, sunet));
  254. break;
  255. }
  256. case 3:
  257. {
  258. int distanta;
  259. string sunet;
  260. Strut* strut = strut->getInstance();
  261.  
  262. std::cout << "\nIntroduceti sunetul caracteristic strutului: ";
  263. std::cin >> sunet;
  264. std::cout << "\nIntroduceti distanta la care poate sa zboare strutul: ";
  265. std::cin >> distanta;
  266.  
  267. strut->set_distanta(distanta);
  268. strut->set_sunet(sunet);
  269.  
  270. if (one_instance_strut == false)
  271. {
  272. lista_pasari->push_back(strut);
  273. one_instance_strut = true;
  274. }
  275.  
  276. break;
  277. }
  278. case 4:
  279. {
  280. if (lista_pasari->empty())
  281. {
  282. std::cout << "\nLista de pasari este goala!\n";
  283. break;
  284. }
  285. std::cout << "\nPasarile sunt:\n";
  286. std::list<Pasare*>::iterator it;
  287. for (it = lista_pasari->begin(); it != lista_pasari->end(); it++)
  288. {
  289. (*it)->afisare_toti_parametrii();
  290. }
  291. break;
  292. }
  293. case 5:
  294. {
  295. string sunet;
  296. if (Gaina::get_instante()==0)
  297. {
  298. cout << "\nLista de gaini este goala!\n";
  299. break;
  300. }
  301.  
  302. std::list<Pasare*>::iterator it;
  303. for (it = lista_pasari->begin(); it != lista_pasari->end(); it++)
  304. {
  305. cout << "Introduceti sunetul al carei gaini vreti sa o vindeti: ";
  306. cin >> sunet;
  307. if((*it)->get_sunet()==sunet)
  308. {
  309. /* do a cast to Gaina class to be able to access its functions */
  310. Gaina* gainaPtr2 = dynamic_cast<Gaina*>(*it);
  311. gainaPtr2->vand_gaina();
  312. std::cout << "\nGaina vanduta!\n";
  313. }
  314. }
  315. break;
  316. }
  317. case 6:
  318. {
  319. string sunet;
  320. bool found = false;
  321. std::list<Pasare*>::iterator it;
  322.  
  323. if (lista_pasari->empty())
  324. {
  325. cout << "\nLista de pasari este goala!\n";
  326. break;
  327. }
  328. if (Gaina::get_instante() == 0)
  329. {
  330. cout << "\nLista de gaini este goala!\n";
  331. break;
  332. }
  333.  
  334. Strut* strut = strut->getInstance();
  335. if (strut->get_distanta() == -1)
  336. {
  337. cout << "\nSetati parametri strutului mai intai!\n";
  338. break;
  339. }
  340. cout << "Introduceti sunetul al carei gaini vreti sa o vindeti: ";
  341. cin >> sunet;
  342.  
  343. Gaina* gainaPtr2=NULL;
  344. for (it = lista_pasari->begin(); it != lista_pasari->end(); it++)
  345. {
  346. if ((*it)->get_sunet() == sunet)
  347. {
  348. /* do a cast to Gaina class to be able to access its functions */
  349. gainaPtr2 = dynamic_cast<Gaina*>(*it);
  350. found = true;
  351. }
  352. }
  353. if (found == false)
  354. {
  355. cout << "Nu s-a gasit gaina cu acest sunet" << endl;
  356. }
  357. else
  358. {
  359. lista_pasari->remove(gainaPtr2);
  360. strut->operator+(gainaPtr2);
  361. gainaPtr2->~Gaina();
  362. }
  363.  
  364. break;
  365. }
  366. }
  367. }
  368.  
  369. void citire_optiune(list<Pasare*> *lista_pasari)
  370. {
  371. int optiune;
  372. std::cout << "Introduceti optiunea: ";
  373. std::cin >> optiune;
  374. do_action(optiune,lista_pasari);
  375. }
  376.  
  377.  
  378.  
  379. Strut *Strut::instance = NULL;
  380. int Gaina::nr_instante_gaini = 0;
  381.  
  382. int main()
  383. {
  384. std::list<Pasare*> lista_pasari;
  385. while (1)
  386. {
  387. afisare_meniu();
  388. citire_optiune(&lista_pasari);
  389. }
  390.  
  391. return 0;
  392. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement