Advertisement
Guest User

Ptaszek

a guest
Jan 17th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. int Random(int min, int max) {
  10. return rand() % max + min;
  11. }
  12.  
  13. class Figura {
  14. public:
  15. string nazwa = "";
  16. virtual int Pole() = 0;
  17. virtual int Obwod() = 0;
  18. virtual void Show() = 0;
  19. };
  20.  
  21. class Kwadrat : public Figura {
  22. public:
  23. int dlugosc = 0;
  24.  
  25. Kwadrat() {
  26. nazwa = "Kwadrat";
  27. dlugosc = Random(1,20);
  28. }
  29.  
  30. int Pole() {
  31. return dlugosc * dlugosc;
  32. }
  33. int Obwod() {
  34. return 4 * dlugosc;
  35. }
  36.  
  37. void Show() {
  38. cout << nazwa << " Pole=" << Pole() << ": a=" << dlugosc << " ob=" << Obwod() << endl;
  39. }
  40. };
  41.  
  42. class Prostokat : public Figura {
  43. public:
  44. int dlugosc = 0;
  45. int szerokosc = 0;
  46.  
  47. Prostokat() {
  48. nazwa = "Prostokat";
  49. dlugosc = Random(1,20);
  50. szerokosc = Random(1,20);
  51. }
  52. int Pole() {
  53. return dlugosc * szerokosc;
  54. }
  55. int Obwod() {
  56. return 2 * dlugosc + 2 * szerokosc;
  57. }
  58. void Show() {
  59. cout << nazwa << " Pole=" << Pole() << ": a=" << dlugosc << ": b=" << szerokosc << " ob=" << Obwod() << endl;
  60. }
  61. };
  62.  
  63. class Lista;
  64.  
  65. class Kolo : public Figura {
  66. public:
  67. int promien = 0;
  68.  
  69. Kolo() {
  70. promien = Random(1,20);
  71. nazwa = "Kolo";
  72. }
  73. int Pole() {
  74. return 3.14*promien*promien;
  75. }
  76. int Obwod() {
  77. return 2 * 3.14 * promien;
  78. }
  79.  
  80. void Show() {
  81. cout << nazwa << " Pole=" << Pole() << ": r=" << promien << " ob=" << Obwod()<<endl;
  82. }
  83. };
  84.  
  85. class ElementDrzewa {
  86. public:
  87. Figura * value = nullptr;
  88. ElementDrzewa* lewo = nullptr;
  89. ElementDrzewa* prawo = nullptr;
  90.  
  91. ElementDrzewa(Figura* value) {
  92. this->value = value;
  93. };
  94. };
  95.  
  96. class Drzewo {
  97. public:
  98. void Dodaj(Figura* figura) {
  99. Dodaj(GrubyKorzen, figura);
  100. }
  101. void Wyswietl() {
  102. Wyswietl(GrubyKorzen);
  103. }
  104. void DoListy(Lista &lista) {
  105. DoListy(GrubyKorzen, lista);
  106. }
  107. private:
  108. ElementDrzewa * GrubyKorzen = nullptr;
  109.  
  110. void Dodaj(ElementDrzewa* & korzen, Figura* figura) {
  111. if (korzen == nullptr) {
  112. korzen = new ElementDrzewa(figura);
  113. }
  114. else {
  115. if (figura->Pole() > korzen->value->Pole()) {
  116. Dodaj(korzen->prawo, figura);
  117. }
  118. else {
  119. Dodaj(korzen->lewo, figura);
  120. }
  121. }
  122. }
  123.  
  124. void Wyswietl(ElementDrzewa* korzen) {
  125. if (korzen != nullptr) {
  126. if (korzen->lewo) {
  127. Wyswietl(korzen->lewo);
  128. }
  129. if (korzen->prawo) {
  130. Wyswietl(korzen->prawo);
  131. }
  132. korzen->value->Show();
  133. }
  134. }
  135.  
  136. void DoListy(ElementDrzewa* korzen, Lista &lista);
  137. };
  138.  
  139. class ElementListy {
  140. public:
  141. Figura* value;
  142. ElementListy* next = nullptr;
  143.  
  144. ElementListy(Figura* value) {
  145. this->value = value;
  146. };
  147. };
  148.  
  149. class Lista {
  150. public:
  151. ElementListy * pierwszy = nullptr;
  152.  
  153. Lista() {};
  154.  
  155. Lista(int ilosc) {
  156. for (int i = 0; i < ilosc; i++)
  157. {
  158. Dodaj(Random(1, 3));
  159. }
  160. }
  161.  
  162. void Dodaj(Figura* & figura) {
  163.  
  164. if (pierwszy == nullptr) {
  165. pierwszy = new ElementListy(figura);
  166. }
  167. else {
  168. ElementListy* tmp = pierwszy;
  169.  
  170. while (tmp->next)
  171. {
  172. tmp = tmp->next;
  173. }
  174. tmp->next = new ElementListy(figura);
  175. }
  176. }
  177.  
  178. void Dodaj(int rodzaj) {
  179.  
  180. if (pierwszy == nullptr) {
  181. if (rodzaj == 1)
  182. pierwszy = new ElementListy(new Kwadrat());
  183. else if (rodzaj == 2)
  184. pierwszy = new ElementListy(new Prostokat());
  185. else if (rodzaj == 3)
  186. pierwszy = new ElementListy(new Kolo());
  187. else
  188. return;
  189. }
  190. else {
  191. ElementListy* tmp = pierwszy;
  192.  
  193. while (tmp->next)
  194. {
  195. tmp = tmp->next;
  196. }
  197.  
  198. if (rodzaj == 1)
  199. tmp->next = new ElementListy(new Kwadrat());
  200. else if (rodzaj == 2)
  201. tmp->next = new ElementListy(new Prostokat());
  202. else if (rodzaj == 3)
  203. tmp->next = new ElementListy(new Kolo());
  204. else
  205. return;
  206. }
  207. }
  208.  
  209. void Wyswietl() {
  210. ElementListy* temp = pierwszy;
  211. while (temp) {
  212. temp->value->Show();
  213. temp = temp->next;
  214. }
  215. }
  216.  
  217. float Srednia() {
  218. int suma = 0,licznik = 0;
  219.  
  220. ElementListy* temp = pierwszy;
  221. while (temp) {
  222. suma = suma + temp->value->Pole();
  223. licznik++;
  224. temp = temp->next;
  225. }
  226. if (licznik == 0)
  227. return 0;
  228. return suma / licznik;
  229. }
  230.  
  231.  
  232. void MniejszeWieksze() {
  233. float srednia = Srednia();
  234.  
  235. Lista mniejsze;
  236. Lista wieksze;
  237.  
  238. ElementListy* temp = pierwszy;
  239. while (temp) {
  240. if (temp->value->Pole() <= srednia) {
  241. mniejsze.Dodaj(temp->value);
  242. }
  243. else {
  244. wieksze.Dodaj(temp->value);
  245. }
  246. temp = temp->next;
  247. }
  248. cout << "Mniejsze: " << endl;
  249. mniejsze.Wyswietl();
  250. cout << "Wieksze: " << endl;
  251. wieksze.Wyswietl();
  252. }
  253.  
  254. void DoDrzewa() {
  255. ElementListy* temp = pierwszy;
  256. Drzewo kwadraty, prostokaty, kola;
  257. while (temp) {
  258. if (temp->value->nazwa == "Kwadrat") {
  259. kwadraty.Dodaj(temp->value);
  260. }
  261. else if (temp->value->nazwa == "Prostokat") {
  262. prostokaty.Dodaj(temp->value);
  263. }
  264. else if (temp->value->nazwa == "Kolo") {
  265. kola.Dodaj(temp->value);
  266. }
  267. temp = temp->next;
  268. }
  269. cout << "Kwadraty: " << endl;
  270. kwadraty.Wyswietl();
  271. cout << "Prostokaty: " << endl;
  272. prostokaty.Wyswietl();
  273. cout << "Kola: " << endl;
  274. kola.Wyswietl();
  275. }
  276.  
  277. Lista posortowane() {
  278.  
  279. Drzewo drzewo;
  280.  
  281. ElementListy* temp = pierwszy;
  282. while (temp) {
  283. drzewo.Dodaj(temp->value);
  284. temp = temp->next;
  285. }
  286.  
  287. Lista lista;
  288. drzewo.DoListy(lista);
  289.  
  290. return lista;
  291. }
  292. };
  293.  
  294. void Drzewo::DoListy(ElementDrzewa* korzen, Lista &lista) {
  295. if (korzen != nullptr) {
  296. if (korzen->lewo) {
  297. DoListy(korzen->lewo, lista);
  298. }
  299. lista.Dodaj(korzen->value);
  300. if (korzen->prawo) {
  301. DoListy(korzen->prawo, lista);
  302. }
  303. }
  304. }
  305.  
  306. int main() {
  307. srand(time(NULL));
  308.  
  309. Lista list(20);
  310.  
  311. list.Wyswietl();
  312. cout << "Srednia = " << list.Srednia()<<endl;
  313.  
  314. //list.MniejszeWieksze();
  315.  
  316. //list.DoDrzewa();
  317.  
  318. Lista posortowane;
  319.  
  320. posortowane = list.posortowane();
  321.  
  322. cout << endl<< "Posortowana lista: " << endl;
  323. posortowane.Wyswietl();
  324.  
  325. cin.ignore();
  326. return 0;
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement