Advertisement
prostorijagaea

AV1

Apr 7th, 2020
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.65 KB | None | 0 0
  1. //Osnovne Funkcije povezane liste
  2. #include <iostream>
  3. #include "HeaderOsnovneFunkcijePP.h"
  4.  
  5.  
  6. Data* kreirajListu(int n)
  7. {
  8.     Data* t = NULL;
  9.     Data* h = NULL;
  10.  
  11.     for (int i = 0; i < n; i++)
  12.     {
  13.         if (i == 0)
  14.         {
  15.             h = new Data;
  16.             t = h;
  17.         }
  18.         else
  19.         {
  20.             t->next = new Data;
  21.             t = t->next;
  22.         }
  23.         t->x = i;
  24.     }
  25.     t->next = NULL;
  26.     return h;
  27. }
  28. void printListu(Data* head)
  29. {
  30.     Data* t = head;
  31.     while (t != NULL)
  32.     {
  33.         std::cout << t->x << "  ";
  34.         t = t->next;
  35.     }
  36.     std::cout << std::endl;
  37. }
  38. void dodajNakraj(Data* head, int x)
  39. {
  40.     Data* t = head;
  41.     while (t->next != NULL)t = t->next;
  42.     t->next = new Data;
  43.     t = t->next;
  44.     t->x = x;
  45.     t->next = NULL;
  46. }
  47. void obrisiSKraja(Data* head)
  48. {
  49.     Data* t = head;
  50.     Data* temp = NULL;
  51.     while (t->next->next != NULL)t = t->next;
  52.     temp = t->next;
  53.     free(temp);
  54.     t->next = NULL;
  55.  
  56. }
  57. double aritmetickaSredina(Data* head)
  58. {
  59.     double as = 0;
  60.     int counter(0);
  61.  
  62.     Data* t = head;
  63.     while (t != NULL)
  64.     {
  65.         counter++;
  66.         as += t->x;
  67.         t = t->next;
  68.     }
  69.     return as /= counter;
  70. }
  71. void ubaciElement(Data* head, int index, int x)
  72. {
  73.     Data* t = head;
  74.     Data* temp = NULL;
  75.     int counter(0);
  76.     while (true)
  77.     {
  78.         counter++;
  79.         if (counter == index + 1)break;
  80.         t = t->next;
  81.     }
  82.  
  83.     Data* novi = new Data;
  84.     novi->x = x;
  85.     novi->next = t->next;
  86.     t->next = novi;
  87. }
  88.  
  89. void Sortiraj(Data* head)
  90. {
  91.     Data* t1 = head;
  92.     Data* t2 = NULL;
  93.  
  94.     for (t1; t1 != NULL; t1 = t1->next)
  95.     {
  96.         for (t2 = t1->next; t2 != NULL; t2 = t2->next)
  97.         {
  98.             if (t1->x > t2->x)Zamjeni(&t1->x, &t2->x);
  99.         }
  100.     }
  101.  
  102. }
  103. void Zamjeni(int* d1, int* d2)
  104. {
  105.     int temp = *d1;
  106.     *d1 = *d2;
  107.     *d2 = temp;
  108. }
  109. ////////////////////////////////////////////////////////ZADACI
  110. #include <iostream>
  111. #include "HeaderOsnovneFunkcijePP.h"
  112. //Zadatak 1
  113. //Neka su zadana dva jednostruko povezana popisa s vise podataka.
  114. //Potrebno je napisati implementaciju funkcije u C++ jeziku koja spaja ta dva povezana popisa
  115. //na nacin da na kraj prvog doda drugi, s tim da pocetak dodavanja drugog mora početi parnim brojem.
  116.  
  117. //Rjesenje: 1. naci kraj prve liste
  118. //          2. naci prvi parni broj drugog
  119. //          3. spojiti liste
  120.  
  121. //1.
  122. Data* vratiZadnjiElement(Data* head)
  123. {
  124.     Data* t = head;
  125.     while (t->next != NULL)
  126.         t = t->next;
  127.    
  128.     return t;
  129. }
  130.  
  131. //2.
  132. Data* vratiAdresuPrvogParnog(Data* head)
  133. {
  134.     Data* t = head;
  135.     while (t != NULL)
  136.     {
  137.         if (t->x % 2 == 0)return t;
  138.        
  139.    
  140.         t = t->next;
  141.     }
  142.     return t;
  143. }
  144. //3.
  145. void spoji_t1_t2(Data* t1, Data* t2)
  146. {
  147.     Data* temp1 = t1;
  148.     while (temp1->next != NULL)temp1 = temp1 -> next;
  149.     temp1->next=t2;
  150. }
  151.  
  152. //Test
  153. int main()
  154. {
  155.     Data* lista1 = kreirajListu(10);
  156.     Data* lista2 = kreirajListu(5);
  157.     printListu(lista1);
  158.     printListu(lista2);
  159.    
  160.     spoji_t1_t2(vratiZadnjiElement(lista1), vratiAdresuPrvogParnog(lista2));
  161.     printListu(lista1);
  162. }
  163. ///////////////////////////////////////////////////////////////////ZADATAK 2
  164. #include <iostream>
  165. #include "HeaderOsnovneFunkcijePP.h";
  166. //Zadatak 2
  167. /*Neka su zadana dva povezana popisa P1 i P2 koji se sastoje od osnovnog elementa koji ima podatak X
  168. i pokazivača na sljedeći takav element NEXT. Također postoji i pokazivač FIRST na prvi element povezanog popisa.
  169. Svi elementi liste su zadani, zadnji element u listi ima vrijednost sljedećeg (NEXT) jednaku NULL.
  170. Dati algoritam koji će izračunati i ispisati:
  171. a) Koliko ima elemenata povezanog popisa.
  172. b) Koja je srednja vrijednost povezanog popisa.
  173. c) Koliko ima negativnih elemenata u povezanom popisu.
  174. d) Koliko ima pozitivnih elemenata većih od srednje vrijednosti u povezanom popisu.
  175. e) Svi elementi pozitivni elementi koji su veći od srednje vrijednosti u P1 dodati na kraj P2.
  176. Ukoliko nema takvih elemenata dodati element s vrijednosti X = 0 na početak liste P2. Isto vrijedi i za listu P2.*/
  177.  
  178. //a)
  179. int vratiBrojElemenata(Data* head)
  180. {
  181.     int counter(0);
  182.     Data* t = head;
  183.     while (t != NULL)
  184.     {
  185.         counter++;
  186.         t = t->next;
  187.     }
  188.     return counter;
  189. }
  190. //b)
  191. double vratiAS(Data* head)
  192. {
  193.     double as(0);
  194.     int counter(0);
  195.     Data* t = head;
  196.     while (t != NULL)
  197.     {
  198.         counter++;
  199.         as += counter;
  200.         t = t->next;
  201.     }
  202.     return as /= counter;
  203. }
  204. //c)
  205. int vratiCounterNegativnih(Data* head)
  206. {
  207.     int counter(0);
  208.     Data* t = head;
  209.     while (t != NULL)
  210.     {
  211.         if (t->x < 0)counter++;
  212.         t = t->next;
  213.     }
  214.     return counter;
  215. }
  216. //d)
  217. int vratiCounterVecihOdAs(Data * head, double as)
  218. {
  219.     int counter(0);
  220.     Data* t = head;
  221.     while (t != NULL)
  222.     {
  223.         if (static_cast<double>(t->x) > as)counter++;
  224.         t = t->next;
  225.     }
  226.     return counter;
  227. }
  228. //e)
  229. void eFunkcija(Data* P1, Data* P2)
  230. {
  231.     if (vratiCounterVecihOdAs(P1,vratiAS(P1)) == 0)             //ako nema brojeva u P1 vecih od AS-a
  232.     {
  233.         Data* p1_novi = new Data;           //dodajemo novi element na pocetak prve liste
  234.         p1_novi->x = 0;
  235.         p1_novi->next = P1;
  236.         P1 = p1_novi;
  237.  
  238.         Data* p2_novi = new Data;           //dodajemo novi element na pocetak druge liste
  239.         p2_novi->x = 0;
  240.         p2_novi->next = P2;
  241.         P2 = p1_novi;
  242.     }
  243.     else // ako ima
  244.     {
  245.         //nalazimo kraj druge liste
  246.         Data* temp2 = P2;
  247.         while (temp2->next != NULL)temp2 = temp2->next;
  248.  
  249.         double as = vratiAS(P1);
  250.         //prolazimo kroz prvu listu i za uspoređujemo iznos sa as-om i ak je veci dodajemo na kraj p2
  251.         Data* temp1 = P1;
  252.         while (temp1 != NULL)
  253.         {
  254.             if (static_cast<double>(temp1->x) > as)
  255.             {
  256.                 temp2->next = temp1;
  257.                 temp2 = temp2->next;
  258.                 //*UPOZORENJE*: mozda ste u iskusenju staviti temp2->next = NULL
  259.                 //Ali s tim bi promjenili temp1 indirektno na NULL
  260.             }
  261.             temp1 = temp1->next;
  262.         }
  263.     }
  264. }
  265.  
  266. //TEST
  267. int main()
  268. {
  269.     Data* P1 = kreirajListu(10);
  270.     Data* P2 = kreirajListu(6);
  271.    
  272.     std::cout << "P1: "; printListu(P1);
  273.     std::cout << "P2: "; printListu(P2);
  274.     //a)
  275.     std::cout << "a)" << std::endl;
  276.     std::cout << "Broj elemenata prve liste: " << vratiBrojElemenata(P1) << std::endl;
  277.     std::cout << "Broj elemenata druge liste: " << vratiBrojElemenata(P2)<<std::endl;
  278.     std::cout << std::endl;
  279.     //b)
  280.     std::cout << "b)" << std::endl;
  281.     std::cout << "Srednja vrijednost prve liste: " << vratiAS(P1) << std::endl;
  282.     std::cout << "Srednja vrijednost druge liste: " << vratiAS(P2) << std::endl;
  283.     std::cout << std::endl;
  284.     //c)
  285.     std::cout << "c)" << std::endl;
  286.     std::cout << "Broj negativnih elemenata prve liste: " << vratiCounterNegativnih(P1) << std::endl;
  287.     std::cout << "Broj negativnih elemenata druge liste: " << vratiCounterNegativnih(P2) << std::endl;
  288.     std::cout << std::endl;
  289.     //d)
  290.     std::cout << "d)" << std::endl;
  291.     std::cout << "Broj  elemenata vecih od AS prve liste: " << vratiCounterVecihOdAs(P1,vratiAS(P1)) << std::endl;
  292.     std::cout << "Broj elemenata vecih od AS druge liste: " << vratiCounterVecihOdAs(P2,vratiAS(P2)) << std::endl;
  293.     std::cout << std::endl;
  294.     //e)
  295.     std::cout << "e)" << std::endl;
  296.     eFunkcija(P1, P2);
  297.     printListu(P2);
  298. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement