Advertisement
rozman50

uredi s prameni

Mar 15th, 2019
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.15 KB | None | 0 0
  1. /*
  2.  *  PROSTOR ZA GLAVO
  3.  * (ime in priimek avtorja, identifikacijska stevilka, besedilo naloge)
  4.  --- --- --- --- --- --- ---
  5.  * <ime_datoteke>.<koncnica>
  6.  *
  7.  *       Ustvarjeno: <datum>
  8.  *            Avtor: <ime> <priimek>
  9.  *  Identifikacijska stevilka: <IDUM>
  10.  *  Besedilo naloge:
  11.  *  <navodilo>
  12.  */
  13.  //privzete vkljucitve
  14. #include "pch.h"
  15. #include <iostream>
  16. #include <ctime>
  17. #include <string>
  18.  
  19.  
  20. // definicija imenskega prostora(/podrocja)
  21. namespace naloga1 {
  22.  
  23.     // uporabljeni imenski prostori
  24.     using namespace std;
  25.  
  26.     void sort(int* arr1, int s1, int* arr2, int s2, int *merg, int m) {
  27.  
  28.         int i = 0, j = 0, k = 0;
  29.         while (i < s1 && j < s2) {
  30.             if (arr1[i] < arr2[j]) {
  31.                 merg[k] = arr1[i];
  32.                 i++;
  33.                 k++;
  34.             }
  35.             else {
  36.                 merg[k] = arr2[j];
  37.                 j++;
  38.                 k++;
  39.             }
  40.         }
  41.  
  42.         while (i < s1) {
  43.             merg[k] = arr1[i];
  44.             k++;
  45.             i++;
  46.         }
  47.         while (j < s2) {
  48.             merg[k] = arr2[j];
  49.             k++;
  50.             j++;
  51.         }
  52.     }
  53.  
  54.     // a predstavlja polje (celostevilskih) elementov, ki ga urejamo
  55.     // n pa stevilo elementov polja
  56.     int* urediSPrameni(int* a, int n)
  57.     {
  58.         // TUKAJ VSTAVI SVOJO KODO
  59.  
  60.         // vasa funkcija naj NE vraca NULL, pac pa
  61.         // polje urejenih vrednosti
  62.         int* pramen = new int[n];
  63.         int* merge = new int[n];
  64.         int pramenCounter = 0;
  65.         int mergeCounter = 0;
  66.         bool firstRun = true;
  67.         int k = 0;
  68.         int velikostPolja = n;
  69.         int* tmpArr = new int[n];
  70.        
  71.         while (n > 0) {
  72.             pramenCounter = 0;
  73.             int primerjalni = a[0];
  74.             for (int i = 0; i < n; i++) {
  75.                 if (primerjalni <= a[i]) {
  76.                     primerjalni = a[i];
  77.                     pramen[pramenCounter] = a[i];
  78.                     pramenCounter++;
  79.  
  80.                     for (int j = i; j < n; j++) {
  81.                         a[j] = a[j + 1];
  82.                     }
  83.                     i--;
  84.  
  85.                 }
  86.             }
  87.             n -= pramenCounter;
  88.  
  89.             if (firstRun) {
  90.                 for (int i = 0; i < pramenCounter; i++) {
  91.                     merge[mergeCounter] = pramen[i];
  92.                     mergeCounter++;
  93.                 }
  94.                 firstRun = false;
  95.             }
  96.             else {
  97.  
  98.                 int tmpV = mergeCounter + pramenCounter;
  99.                 int *tmp = new int[tmpV];
  100.                 sort(merge, mergeCounter, pramen, pramenCounter, tmp, tmpV);
  101.                 mergeCounter += pramenCounter;
  102.  
  103.                 for (int i = 0, j = 0; i < mergeCounter && j <tmpV; i++, j++) {
  104.                     merge[i] = tmp[j];
  105.                 }
  106.  
  107.             }
  108.  
  109.         }
  110.         return merge;
  111.     }
  112.  
  113.  
  114.  
  115.     //el predstavlja element, ki ga iscemo,
  116.     //a predstavlja polje,
  117.     //n pa stevilo elementov polja
  118.     int poisci(int el, int* a, int n)
  119.     {
  120.         //TUKAJ VSTAVI SVOJO KODO
  121.         int najdenIndeks = -1;
  122.         for (int i = 0; i < n; i++) {
  123.             if (a[i] == el) {
  124.                 najdenIndeks = i;
  125.             }
  126.         }
  127.         /*vasa funkcija naj NE vraca -2, pac pa
  128.          indeks najdenega elementa (ce ga ne najde,
  129.          naj vrne -1)*/
  130.  
  131.         if (najdenIndeks == -1) return -1;
  132.         else return najdenIndeks;
  133.  
  134.     }
  135.  
  136.     //el predstavlja element, ki ga iscemo,
  137.     //a predstavlja polje,
  138.     //n pa stevilo elementov polja
  139.     int poisciZBisekcijo(int el, int* a, int n)
  140.     {
  141.         //TUKAJ VSTAVI SVOJO KODO
  142.  
  143.         /*vasa funkcija naj NE vraca -2, pac pa
  144.          index najdenega elementa (ce ga ne najde,
  145.          naj vrne -1)*/
  146.        
  147.         int l = 0;
  148.         int h = n;
  149.  
  150.         while (true) {
  151.             int m = (l + h) / 2;
  152.  
  153.             if (el == a[m]) return m;
  154.             else if (el > a[m]) {
  155.                 l = m + 1;
  156.             }
  157.             else {
  158.                 h = m - 1;
  159.             }
  160.  
  161.         }
  162.  
  163.         return -1;
  164.     }
  165. }
  166.  
  167. using namespace naloga1;
  168.  
  169. int main(int argn, char** args)
  170. {
  171.     //zastavica uspesnosti testiranja
  172.     bool uspesno = true;
  173.  
  174.     //priprava
  175.     //int vhod[] = { 10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10 };
  176.      int vhod[] = { 5, 3, 4, 7, 9, 8, 1, 10, 6 };
  177.      const int velikost = 9; //sizeof(vhod) / sizeof(int);
  178.      //const int velikost = 11; //sizeof(vhod) / sizeof(int);
  179.     int pricakovan_izhod[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10 };
  180.  
  181.     //klic testirane metode
  182.     int* dobljen_izhod = urediSPrameni(vhod, velikost);
  183.     cout << endl;
  184.     //preverjanje, če se kateri element iz dobljen_izhod ne sklada z elementom v pricakovan_izhod
  185.     if (dobljen_izhod != NULL)
  186.     {
  187.         for (int i = 0; i < velikost; i++)
  188.         {
  189.             if (pricakovan_izhod[i] != dobljen_izhod[i])
  190.             {
  191.                 cout << "Metoda urediSPrameni() ni vrnila pravilno urejenega polja." << endl;
  192.                 uspesno = false;
  193.                 break;
  194.             }
  195.         }
  196.     }
  197.     else //ko je dobljen_izhod == NULL
  198.     {
  199.         cout << "Metoda urediSPrameni() ni vrnila polja, pac pa NULL." << endl;
  200.         uspesno = false;
  201.     }
  202.  
  203.     //cout << poisci(-6, vhod, velikost) << endl;
  204.     cout << poisciZBisekcijo(2, pricakovan_izhod, velikost) << endl;
  205.  
  206.     // TUKAJ VSTAVI SVOJE PRIMERE
  207.     // npr. ce poisci() in poisciZBisekcijo() res vrneta indeks elementa,
  208.     // ki je skrajno desno v polju (torej zadnje pojavljanje).
  209.     // Če poisci() in poisciZBisekcijo() pri praznem polju res vrne -1.
  210.     // Če urediSPrameni() res naraščajoče uredi polje in če so se pri tem vsi elementi ohranili.
  211.     // Če poisci() in poisciZBisekcijo() vračata pravilni indeks iskanega elementa v polju.
  212.     // Če se poisciZBisekcijo() pri večjem stevilu elementov res hitreje izvede kot poisci().
  213.     // Če poisci() in poisciZBisekcijo() med iskanjem ne spreminja polja.
  214.     // ...
  215.  
  216.     //po vseh testnih scenarijih
  217.     cout << "Povzetek: Program ";
  218.     if (uspesno)
  219.         cout << "JE ";
  220.     else
  221.         cout << "ni ";
  222.     cout << "uspesno prestal vaša testiranja." << endl;
  223.  
  224.     //ciscenje spomina
  225.     if (dobljen_izhod != NULL)
  226.         delete[] dobljen_izhod;
  227.  
  228.     return 0;
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement