Advertisement
Skylighty

lab12_pg

Jan 15th, 2019
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.50 KB | None | 0 0
  1. //------------PAWEŁ GĄSIEWSKI EIT 17/18 T1 135581---------------
  2. //Nie wiem czy wszystko zrealizowałem poprawnie, bo np. nie wiem czy prosił Pan,
  3. //by przepisać do drzewa też roota itp. w każdym razie przesyłam kod, który był
  4. //realizowany na zajęciach.
  5. #include <iostream>
  6. #include <ctime>
  7. #include <cstdlib>
  8. using namespace std;
  9.  
  10. class jablon {
  11. private:
  12.     int wiek, i_jablek, wysokosc;
  13. public:
  14.     jablon *left;
  15.     jablon *right;
  16.     jablon *next;
  17.     jablon();
  18.     ~jablon();
  19.     void wstaw_l(jablon *j);
  20.     void wstaw_d(jablon *j);
  21.     void wyswietl_l();
  22.     void wyswietl_d();
  23.     int return_wiek();
  24.     int return_ijablek();
  25.     int return_wysokosc();
  26.     int ilosc_l(int ct = 1);
  27.     int ilosc_d(int ct = 1);
  28.     int maxl(int value = 0);
  29.     int maxd(int value = 0);
  30.     int sumajablekd(int value = 0);
  31.     int sumajablekl(int value = 0);
  32.     int gapcountd(int gap, int value = 0);
  33.     int gapcountl(int gap, int value = 0);
  34.     void przepisanie(jablon *root);
  35. };
  36. jablon::jablon() {
  37.     wiek = (rand() % 21);
  38.     i_jablek = (rand() % 90) + 10;
  39.     wysokosc = (rand() % 5) + 1;
  40.     left = NULL;
  41.     right = NULL;
  42.     next = NULL;
  43. }
  44. jablon::~jablon() {
  45.     if (left)
  46.         delete left;
  47.     cout << "~d o wieku : " << wiek << " oraz wyokosci : " << wysokosc << endl;
  48.     if (right)
  49.         delete right;
  50. }
  51. int jablon::return_wiek() {
  52.     return wiek;
  53. }
  54. int jablon::return_ijablek() {
  55.     return i_jablek;
  56. }
  57. int jablon::return_wysokosc() {
  58.     return wysokosc;
  59. }
  60. void jablon::wstaw_l(jablon *j) {
  61.     if (next)
  62.     {
  63.         if (j->wiek < next->wiek)
  64.         {
  65.             j->next = next;
  66.             next = j;
  67.         }
  68.         else
  69.             next->wstaw_l(j);
  70.     }
  71.     else
  72.         next = j;
  73. }
  74. void jablon::wyswietl_l() {
  75.     cout << "{LISTA} : Jablon o wieku : " << wiek << " wysokosci : " << wysokosc << " ilosci jablek : " << i_jablek << endl;
  76.     if (next)
  77.         next->wyswietl_l();
  78. }
  79. int jablon::ilosc_l(int ct) {
  80.     if (next)
  81.         ct = next->ilosc_l(++ct);
  82.     return ct;
  83. }
  84. int jablon::maxl(int value) {
  85.     jablon *help = this;
  86.     while (help->next) {
  87.         if (help->next->i_jablek > value)
  88.             value = help->next->i_jablek;
  89.         else
  90.             help = help->next;
  91.     }
  92.     return value;
  93. }
  94. int jablon::sumajablekl(int value) {
  95.     value = i_jablek;
  96.     if (next)
  97.         value += next->sumajablekl(value);
  98.     return value;
  99. }
  100. int jablon::gapcountl(int gap, int value) {
  101.     if (i_jablek > gap)
  102.         value++;
  103.     if (next)
  104.         value = next->gapcountl(gap, value);
  105.     return value;
  106. }
  107. void jablon::wstaw_d(jablon *j) {
  108.     if (j->wiek < wiek)
  109.     {
  110.         if (left)
  111.             left->wstaw_d(j);
  112.         else
  113.             left = j;
  114.     }
  115.     else
  116.     {
  117.         if (right)
  118.             right->wstaw_d(j);
  119.         else
  120.             right = j;
  121.     }
  122. }
  123. void jablon::wyswietl_d() {
  124.     if (left)
  125.         left->wyswietl_d();
  126.     cout << "{DRZEWO} : Jablon o wieku : " << wiek << " wysokosci : " << wysokosc << " ilosci jablek : " << i_jablek << endl;
  127.     if (right)
  128.         right->wyswietl_d();
  129. }
  130. int jablon::ilosc_d(int ct) {
  131.     if (left)
  132.         ct = left->ilosc_d(++ct);
  133.     if (right)
  134.         ct = right->ilosc_d(++ct);
  135.     return ct;
  136. }
  137. int jablon::maxd(int value){
  138.     if (i_jablek > value)
  139.     {
  140.         value = i_jablek;
  141.         if (left)
  142.             value = left->maxd(value);
  143.         if (right)
  144.             value = right->maxd(value);
  145.     }
  146.     else {
  147.         if (left)
  148.             value = left->maxd(value);
  149.         if (right)
  150.             value = right->maxd(value);
  151.     }
  152.     return value;
  153. }
  154. int jablon::sumajablekd(int value) {
  155.     value = i_jablek;
  156.     if (left)
  157.         value += left->sumajablekd(value);
  158.     if (right)
  159.         value += right->sumajablekd(value);
  160.     return value;
  161. }
  162. int jablon::gapcountd(int gap, int value) {
  163.     if (i_jablek > gap)
  164.         value++;
  165.     if (left)
  166.         value = left->gapcountd(gap, value);
  167.     if (right)
  168.         value = right->gapcountd(gap, value);
  169.     return value;
  170. }
  171. void jablon::przepisanie(jablon *root)
  172. {
  173.     while (root->next)
  174.     {
  175.         jablon *help = root->next;
  176.         root->next = help->next;
  177.         this->wstaw_d(help);
  178.     }
  179. }
  180. int main() {
  181.     jablon *root_l = new jablon();
  182.     for (int i = 0; i < 50; i++)
  183.     {
  184.         jablon *nj = new jablon();
  185.         root_l->wstaw_l(nj);
  186.     }
  187.     root_l->wyswietl_l();
  188.     cout << endl;
  189.     cout << "Liczba obiektow na liscie : " << root_l->ilosc_l() << endl;
  190.     jablon *help = root_l;
  191.     while (help->next)
  192.     {
  193.         if ((help->next->return_ijablek() % 2) == 0)
  194.         {
  195.             jablon *pomoc = help->next;
  196.             if (pomoc->next)
  197.             {
  198.                 help->next = pomoc->next;
  199.                 pomoc->next = NULL;
  200.                 root_l->wstaw_d(pomoc);
  201.             }
  202.             else
  203.             {
  204.                 help->next = NULL;
  205.                 pomoc->next = NULL;
  206.                 root_l->wstaw_d(pomoc);
  207.             }
  208.         }
  209.         else
  210.             help = help->next;
  211.     }
  212.     cout << "Wyswietlam liste : " << endl;
  213.     root_l->wyswietl_l();
  214.     cout << endl;
  215.     cout << "Wyswietlam drzewko : " << endl;
  216.     root_l->wyswietl_d();
  217.     cout << endl;
  218.     cout << "Liczba elementow w liscie : " << root_l->ilosc_l() << endl;
  219.     cout << "Liczba elementow w drzewie : " << root_l->ilosc_d() << endl;
  220.     cout << "Drzewo o najwiekszej liczbie jablek w liscie : " << root_l->maxl() << endl;
  221.     cout << "Drzewo o najwiekszej liczbie jablek w BST : " << root_l->maxd() << endl;
  222.     cout << "Suma jablek na drzewach w liscie : " << root_l->sumajablekl() << endl;
  223.     cout << "Suma jablek na drzewach w BST : " << root_l->sumajablekd() << endl;
  224.     cout << "Liczba drzew, na ktorych jest wiecej niz 60 jablek w liscie : " << root_l->gapcountl(60) << endl;
  225.     cout << "Liczba drzew, na ktorych jest wiecej niz 60 jablek w drzewie : " << root_l->gapcountd(60) << endl;
  226.     cout << endl;
  227.     cout << "DOKONUJE PRZEPISANIA LISTY DO NOWEGO DRZEWA : " << endl;
  228.     jablon *root_d = new jablon();
  229.     root_d->przepisanie(root_l);
  230.     cout << "Wyswietlam liste z root_l po przepisaniu : " << endl;
  231.     root_l->wyswietl_l();
  232.     cout << endl;
  233.     cout << "Wyswietlam liste z root_d po przepisaniu : " << endl;
  234.     root_d->wyswietl_d();
  235.     system("pause");
  236.     return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement