Sanady

Untitled

Oct 8th, 2019
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.07 KB | None | 0 0
  1. /*
  2. Meno a priezvisko:
  3.  
  4. POKYNY:
  5. (1)  Subor premenujte na Priezvisko_Meno_ID_du03.cpp (pouzite vase udaje bez diakritiky).
  6. (2)  Implementujte funkcie tak, aby splnali popis pri ich deklaraciach.
  7. (3)  Cela implementacia musi byt v tomto jednom subore.
  8. (4)  Odovzdajte len tento (spravne premenovany) zdrojovy subor.
  9. (5)  Program musi byt kompilovatelny.
  10. (6)  Globalne a staticke premenne su zakazane.
  11. (7)  V ziadnom pripade nemente deklaracie funkcii, ktore mate za ulohu naprogramovat
  12.      (nemente nazvy, navratove hodnoty ani typ a pocet parametrov v zadanych funkciach).
  13.      Nemente implementacie hotovych pomocnych funkcii, ani implementacie zadanych datovych typov.
  14. (8)  V pripade potreby mozete kod doplnit o dalsie pomocne funkcie alebo struktury.
  15. (9)  Vase riesenie otestujte (vo funkcii 'main' a pomocou doplnenych pomocnych funkcii alebo struktur).
  16.      Testovaci kod ale nebude hodnoteny.
  17. (10) Funkcia 'main' musi byt v zdrojovom kode posledna.
  18. */
  19.  
  20. #include <iostream>
  21. #include <cstring>
  22.  
  23. using namespace std;
  24.  
  25. //-------------------------------------------------------------------------------------------------
  26. // DATOVE TYPY
  27. //-------------------------------------------------------------------------------------------------
  28.  
  29. // Uzol zretazeneho zoznamu
  30. struct Node {
  31.     int data; // hodnota uzla
  32.     Node* next; // smernik na dalsi uzol zoznamu
  33. };
  34.  
  35. // Zretazeny zoznam
  36. struct List {
  37.     Node* first; // smernik na prvy uzol zoznamu
  38. };
  39.  
  40. //-------------------------------------------------------------------------------------------------
  41. // ULOHA (0.2 boda)
  42. //-------------------------------------------------------------------------------------------------
  43. /*
  44.     Usporiada pole 'data' od najvacsieho po najmensi prvok.
  45.     Pouzite algoritmus insertion sort.
  46.     Usporiadanie je od najvacsieho po najmensi prvok (opacne ako na tutorialy)!
  47.  
  48.     PARAMETRE:
  49.         [in, out] data - pole, ktore funkcia usporiada
  50.         [in] length - pocet prvkov pola
  51.  
  52.     VSTUPNE PODMIENKY:
  53.         'length' moze mat lubovolnu hodnotu
  54.         'data' ukazuje na platne pole
  55.  
  56.     PRIKLADY:
  57.         {1,3,2} -> {3, 2, 1}
  58.         {} -> {}
  59. */
  60.  
  61. void insertionSort1(int* data, const size_t length) {
  62.     int i, key, j;
  63.     for (i = length-1; i >= 0; i--)
  64.     {
  65.         key = data[i];
  66.         j = i - 1;
  67.  
  68.         while (j > 0 && data[j] > key)
  69.         {
  70.             data[j - 1] = data[j];
  71.             j = j - 1;
  72.         }
  73.         data[j - 1] = key;
  74.     }
  75. }
  76.  
  77. //-------------------------------------------------------------------------------------------------
  78. // ULOHA (0.2 boda)
  79. //-------------------------------------------------------------------------------------------------
  80. /*
  81.     Usporiada textove retazce v poli 'data' od najvacsieho po najmensi prvok (podla alfanumerckeho poradia).
  82.     Pouzite algoritmus insertion sort.
  83.     Usporiadanie je od najvacsieho po najmensi prvok!
  84.  
  85.      PARAMETRE:
  86.         [in, out] data - pole, ktore funkcia usporiada.
  87.                 Pole obsahuje smerniky na textove retazce.
  88.                 Kazdy textovy retazec je ukonceny '\0'.
  89.                 Posledny smernik ma hodnotu 'nullptr'. Podla toho urcite pocet prvkov pola (pocet textovych retazcov).
  90.  
  91.     VSTUPNE PODMIENKY:
  92.         'data' obsahuje minimalne jeden smernik.
  93.         Posledny smernik ma hodnotu 'nullptr'.
  94.  
  95.     PRIKLADY:
  96.         {"Juraj", "Peter", "Andrej", nullptr} -> {"Andrej", "Juraj", "Peter", nullptr}
  97.         {nullptr} -> {nullptr}
  98.  
  99.     POZNAMKY:
  100.         Pri testovani mozete jednoducho pole vytvorit nasledovnym sposobom:
  101.         const char *mena[] = {"Juraj", "Peter", "Andrej", nullptr};
  102.  
  103.         Na porovnanie obsahu textovych retazcov vyuzite prislusnu funkciu zo standardnej kniznice.
  104. */
  105. void insertionSort(const char* data[]) {
  106.     // TODO
  107. }
  108.  
  109. //-------------------------------------------------------------------------------------------------
  110. // ULOHA (0.2 boda)
  111. //-------------------------------------------------------------------------------------------------
  112. /*
  113.     Usporiada zretazeny zoznam 'list' od najvacsieho po najmensi prvok.
  114.     Pouzite algoritmus insertion sort.
  115.     Usporiadanie je od najvacsieho po najmensi prvok!
  116.  
  117.     PARAMETRE:
  118.         [in, out] list - zretazeny zoznam, ktory funkcia usporiada
  119.  
  120.     VSTUPNE PODMIENKY:
  121.         'list' obsahuje lubovolny pocet uzlov (moze byt prazdny)
  122.         'list' nie je 'nullptr'
  123.  
  124.     PRIKLADY:
  125.         vstup: 2->1->3, vystup: 3->2->1
  126.         vstup: prazdny zoznam, vystup: prazdny zoznam
  127. */
  128. void insertionSort(List* list) {
  129.     // TODO
  130. }
  131.  
  132. //-------------------------------------------------------------------------------------------------
  133. // ULOHA (0.2 boda)
  134. //-------------------------------------------------------------------------------------------------
  135. /*
  136.     Vykona algoritmus merge (cast algoritmu merge sort).
  137.     Kombinute dve susedne usporiadane casti v poli 'input' do jednej usporiadanej casti v poli 'output'
  138.     Usporiadanie je od najvacsieho po najmensi prvok!
  139.  
  140.     PARAMETRE:
  141.         [out] 'output' - vystupne pole, ktoreho cast output[low]...output[high-1] bude po vykonani funkcie usporiadana
  142.         [in] 'input'   - vstupne pole, ktoreho casti input[low]...input[middle-1] a input[middle]...input[high-1]
  143.                          musia byt pri volani funkcie usporiadane od najvacsieho po najmensi prvok
  144.         [in] 'low'     - index 1. prvku lavej usporiadanej casti pola 'input'
  145.         [in] 'middle'  - index 1. prvku pravej usporiadanej casti pola 'input'
  146.         [in] 'high'    - index za poslednym prvkom pravej usporiadanej casti pola 'input'
  147.  
  148.     VYSTUPNE PODMIENKY:
  149.         output[low] ... output[high-1] obsahuje usporiadane prvky z input[low] ... input[high-1]
  150.         obsah 'input' sa nemeni
  151.         prvky s indexami mensimi ako 'low' sa nemenia (v obidvoch poliach)
  152.         prvky s indexami vacsimi alebo rovnymi ako 'high' sa nemenia (v obidvoch poliach)
  153.  
  154.     PRIKLAD:
  155.         low: 4
  156.         middle: 8
  157.         hight: 12
  158.         input:  {10, 20, 30, 40, 7, 5, 2, 0, 8, 4, 2, 1, 10, 20, 30, 40}
  159.         output: {10, 20, 30, 40, 8, 7, 5, 4, 2, 2, 1, 0, 10, 20, 30, 40}
  160. */
  161.  
  162. void merge(int* output, const int* input, const size_t low, const size_t middle, const size_t high)
  163. {
  164.     // TODO
  165. }
  166.  
  167. //-------------------------------------------------------------------------------------------------
  168. // ULOHA (0.2 boda)
  169. //-------------------------------------------------------------------------------------------------
  170. /*
  171.     Usporiada prvky v poli 'data' od najvacsieho po najmensi.
  172.     Pouzite algoritmus merge sort.
  173.     Usporiadanie je od najvacsieho po najmensi prvok!
  174.  
  175.     PARAMETRE:
  176.         [in, out] data - pole, ktore funkcia usporiada
  177.         [int]   length - pocet prvkov pola
  178.  
  179.     VSTUPNE PODMIENKY:
  180.         'data' ukazuje na platne pole
  181.  
  182.     PRIKLADY:
  183.         {1,3,2} -> {3, 2, 1}
  184.         {} -> {}
  185.  
  186.     POZNAMKA:
  187.         Pri implementacii top-down bude vhodne vytvorit a zavolat rekurzivnu funkciu.
  188. */
  189. void mergeSort(int* data, const size_t length) {
  190.     // TODO
  191. }
  192.  
  193. //-------------------------------------------------------------------------------------------------
  194. // TESTOVANIE
  195. //-------------------------------------------------------------------------------------------------
  196.  
  197. // tu mozete doplnit pomocne funkcie a struktury
  198.  
  199. void printArray(int arr[], int n)
  200. {
  201.     int i;
  202.     for (i = 0; i < n; i++)
  203.         cout << arr[i] << " ";
  204.     cout << endl;
  205. }
  206.  
  207. int main() {
  208.  
  209.     int arr[5] = { 2, 5, 1, 4, 3 };
  210.     int n = sizeof(arr) / sizeof(arr[0]);
  211.    
  212.     printArray(arr, n);
  213.     insertionSort1(arr, n);
  214.     printArray(arr, n);
  215.     return 0;
  216. }
Advertisement
Add Comment
Please, Sign In to add comment