Advertisement
EnsarMeskovic

[PRII] UnosSortIspis - Function templates

May 28th, 2016
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. /*Napisati predložak funkcije SortirajRastuci koja će omogućiti sortiranje niza u rastućem redoslijedu.
  2. Unutar main funkcije korisniku omogućiti korisniku da odredi veličinu niza i tip podatka, te da unutar
  3. template funkcije UnosClanovaNiza izvrši inicijalizaciju članova niza.Nakon unosa, a uz pomoć prethodno
  4. definiranog predloška funkcije SortirajRastuci, izvršiti sortiranje, te unutar main funkcije ispisati
  5. vrijednosti sortiranih članova niza.*/
  6. #include <iostream>
  7. using namespace std;
  8.  
  9. char greska[] = "\nGreska! Problem sa alokacijom memorije!\n";
  10.  
  11. template <class Tip>
  12. void SortirajRastuci(Tip *&niz, int max) {
  13.     Tip temp;
  14.     int brojac;
  15.     for (int j = max; j > 0; j--) {//najveci element niza, kroz svaki prolaz zavrsi na zadnjem mjestu
  16.         brojac = 0;
  17.         for (int i = 1; i < j; i++)//zbog gore navedene cinjenice nema potrebe da ide do kraja niza
  18.             if (niz[i] < niz[i - 1]) {
  19.                 temp = niz[i];
  20.                 niz[i] = niz[i - 1];
  21.                 niz[i - 1] = temp;
  22.                 brojac++;//broji 'swap'-ove u jednom prolazu kroz niz
  23.             }
  24.         if (brojac == 0)//kada u prolazu kroz elemente niza ne dodje do zamjene mjesta
  25.             return;//ne nasilno prekini petlju
  26.     }
  27. }
  28. template <class Tip>
  29. void ispisDealokacija(Tip *&niz, int max) {
  30.     cout << "\nRastuci Sortiran niz : ";
  31.     int i = 0;
  32.     while (i < max)
  33.         if (i < max - 1)
  34.             cout << niz[i++] << ", ";
  35.         else
  36.             cout << niz[i++] << ".\n";
  37.     cout << "\nOpadajuci Sortiran niz : ";
  38.     while (i--> 0)
  39.         if (i > 0)
  40.             cout << niz[i] << ", ";
  41.         else
  42.             cout << niz[i] << ".\n\n";
  43.     delete[] niz;
  44.     niz = nullptr;
  45. }
  46. template <class Tip>
  47. void UnosClanovaNiza(Tip *&niz) {
  48.     int max;
  49.     do {
  50.         cout << "Unesite broj elemenata niza : ";
  51.         cin >> max;
  52.         cin.ignore();
  53.     } while (max < 1);
  54.     try {
  55.         niz = new Tip[max];
  56.     } catch (bad_alloc) {
  57.         cout << greska;
  58.     }
  59.     cout << endl;
  60.     for (int i = 0; i < max; i++) {
  61.         cout << "[" << i + 1 << "] : ";
  62.         cin >> niz[i];
  63.     }
  64.     SortirajRastuci(niz, max);
  65.     ispisDealokacija(niz, max);
  66. }
  67. void main() {
  68.     int izbor;
  69.     bool vrti = true;
  70.     do {
  71.         system("cls");
  72.         cout << "..:: TIP PODATKA ::..\n\n";
  73.         cout << "1. char\n2. int\n3. short int\n4. long int\n5. signed int\n6. unsigned int\n7. float\n8. double\n9. long double\n10. Prekid programa\n\n";
  74.         do {
  75.             cout << "Odaberite Tip Podatka niza kojeg zelite kreirati : ";
  76.             cin >> izbor;
  77.             cin.ignore();
  78.         } while (izbor < 1 || izbor > 10);
  79.         switch (izbor) {
  80.         case 1: { char *p; UnosClanovaNiza(p); } break;
  81.         case 2: { int *p; UnosClanovaNiza(p); } break;
  82.         case 3: { short int *p; UnosClanovaNiza(p); } break;
  83.         case 4: { long int *p; UnosClanovaNiza(p); } break;
  84.         case 5: { signed int *p; UnosClanovaNiza(p); } break;
  85.         case 6: { unsigned int *p; UnosClanovaNiza(p); } break;
  86.         case 7: { float *p; UnosClanovaNiza(p); } break;
  87.         case 8: { double *p; UnosClanovaNiza(p); } break;
  88.         case 9: { long double *p; UnosClanovaNiza(p); } break;
  89.         case 10: vrti = false; break;
  90.         }
  91.         system("pause>0");
  92.     } while (vrti);
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement