Sanady

Untitled

Oct 8th, 2019
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.28 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 = 1; i < length; 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 (lexikograficky).
  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} -> {"Peter", "Juraj", "Andrej", 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 insertionSort2(const char* data[]) {
  106. int i, j;
  107. i = 0;
  108. j = 0;
  109. while (data[i] != nullptr) {
  110. if (data[i][j] < data[i + 1][j])
  111. {
  112. data[i + 1] = data[i];
  113. }
  114. i++;
  115. }
  116. }
  117.  
  118. //-------------------------------------------------------------------------------------------------
  119. // ULOHA (0.2 boda)
  120. //-------------------------------------------------------------------------------------------------
  121. /*
  122. Usporiada zretazeny zoznam 'list' od najvacsieho po najmensi prvok.
  123. Pouzite algoritmus insertion sort.
  124. Usporiadanie je od najvacsieho po najmensi prvok!
  125.  
  126. PARAMETRE:
  127. [in, out] list - zretazeny zoznam, ktory funkcia usporiada
  128.  
  129. VSTUPNE PODMIENKY:
  130. 'list' obsahuje lubovolny pocet uzlov (moze byt prazdny)
  131. 'list' nie je 'nullptr'
  132.  
  133. PRIKLADY:
  134. vstup: 2->1->3, vystup: 3->2->1
  135. vstup: prazdny zoznam, vystup: prazdny zoznam
  136. */
  137. void insertionSort(List* list) {
  138. // TODO
  139. }
  140.  
  141. //-------------------------------------------------------------------------------------------------
  142. // ULOHA (0.2 boda)
  143. //-------------------------------------------------------------------------------------------------
  144. /*
  145. Vykona algoritmus merge (cast algoritmu merge sort).
  146. Kombinute dve susedne usporiadane casti v poli 'input' do jednej usporiadanej casti v poli 'output'
  147. Usporiadanie je od najvacsieho po najmensi prvok!
  148.  
  149. PARAMETRE:
  150. [out] 'output' - vystupne pole, ktoreho cast output[low]...output[high-1] bude po vykonani funkcie usporiadana
  151. [in] 'input' - vstupne pole, ktoreho casti input[low]...input[middle-1] a input[middle]...input[high-1]
  152. musia byt pri volani funkcie usporiadane od najvacsieho po najmensi prvok
  153. [in] 'low' - index 1. prvku lavej usporiadanej casti pola 'input'
  154. [in] 'middle' - index 1. prvku pravej usporiadanej casti pola 'input'
  155. [in] 'high' - index za poslednym prvkom pravej usporiadanej casti pola 'input'
  156.  
  157. VYSTUPNE PODMIENKY:
  158. output[low] ... output[high-1] obsahuje usporiadane prvky z input[low] ... input[high-1]
  159. obsah 'input' sa nemeni
  160. prvky s indexami mensimi ako 'low' sa nemenia (v obidvoch poliach)
  161. prvky s indexami vacsimi alebo rovnymi ako 'high' sa nemenia (v obidvoch poliach)
  162.  
  163. PRIKLAD:
  164. low: 4
  165. middle: 8
  166. hight: 12
  167. input: {10, 20, 30, 40, 7, 5, 2, 0, 8, 4, 2, 1, 10, 20, 30, 40}
  168. output: {10, 20, 30, 40, 8, 7, 5, 4, 2, 2, 1, 0, 10, 20, 30, 40}
  169. */
  170.  
  171. void merge(int* output, const int* input, const size_t low, const size_t middle, const size_t high)
  172. {
  173. // TODO
  174. }
  175.  
  176. //-------------------------------------------------------------------------------------------------
  177. // ULOHA (0.2 boda)
  178. //-------------------------------------------------------------------------------------------------
  179. /*
  180. Usporiada prvky v poli 'data' od najvacsieho po najmensi.
  181. Pouzite algoritmus merge sort.
  182. Usporiadanie je od najvacsieho po najmensi prvok!
  183.  
  184. PARAMETRE:
  185. [in, out] data - pole, ktore funkcia usporiada
  186. [int] length - pocet prvkov pola
  187.  
  188. VSTUPNE PODMIENKY:
  189. 'data' ukazuje na platne pole
  190.  
  191. PRIKLADY:
  192. {1,3,2} -> {3, 2, 1}
  193. {} -> {}
  194.  
  195. POZNAMKA:
  196. Pri implementacii top-down bude vhodne vytvorit a zavolat rekurzivnu funkciu.
  197. */
  198. void mergeSort(int* data, const size_t length) {
  199. // TODO
  200. }
  201.  
  202. //-------------------------------------------------------------------------------------------------
  203. // TESTOVANIE
  204. //-------------------------------------------------------------------------------------------------
  205.  
  206. // tu mozete doplnit pomocne funkcie a struktury
  207.  
  208. void printArray(int arr[], int n)
  209. {
  210. int i;
  211. for (i = 0; i < n; i++)
  212. cout << arr[i] << " ";
  213. cout << endl;
  214. }
  215.  
  216. int main() {
  217.  
  218. /*int arr[5] = { 2, 5, 1, 4, 3 };
  219. int n = sizeof(arr) / sizeof(arr[0]);
  220.  
  221. printArray(arr, n);
  222. insertionSort1(arr, n);
  223. printArray(arr, n);*/
  224.  
  225. const char* mena[] = { "Juraj", "Peter", "Andrej", nullptr };
  226. insertionSort2(mena);
  227. return 0;
  228. }
Advertisement
Add Comment
Please, Sign In to add comment