Advertisement
Ahmet_Durmic

Priority Task Queues (FINISHED)

Aug 18th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. static int broj_elemenata;
  6. static int broj_prioriteta;
  7. static int broj_aktivnih_zadataka;
  8.  
  9. struct Element {
  10. char znak;
  11. int prioritet;
  12. void set() {
  13. cout << "Unesite zadatak: "; cin >> znak;
  14. cout << "Unesite prioritet: "; cin >> prioritet;
  15. }
  16. };
  17.  
  18. struct Queue {
  19. int size;
  20. int front;
  21. int rear;
  22. int *A;
  23. };
  24.  
  25. void create_queue(Queue *q) {
  26. for (int i = 0; i <broj_prioriteta; i++) {
  27. q[i].size = broj_elemenata;
  28. q[i].front = q[i].rear = -1;
  29. q[i].A = new int[q[i].size];
  30. }
  31. }
  32. void enqueue(Queue *q, Element *e, int i) {
  33. int j = e[i].prioritet;
  34. q[j -1].rear = q[j -1].rear + 1;
  35. q[j-1 ].A[q[j-1].rear] = j;
  36. }
  37. void enqueue_All_Priorities(Queue *q, Element *e) {
  38. for (int i = 0; i < broj_elemenata; i++) {
  39. e[i].set();
  40. if ((q[e[i].prioritet - 1].rear == q[e[i].prioritet - 1].size-1)) {
  41. cout << "Niz sa prioritetom " << e[i].prioritet << " je popunjen sa zadacima!" << endl;
  42. }
  43. else {
  44. enqueue(q, e, i);
  45. broj_aktivnih_zadataka++;
  46. }
  47. }
  48. }
  49. void dequeue(Queue *q, Element *e) {
  50. int br;
  51. cout << "Unesite koliko zelite obrisati aktivnih zadataka: "; cin >> br;
  52. while (br > broj_aktivnih_zadataka) {
  53. cout << "Pogresan unos!Nema toliko aktivnih zadataka za brisanje\n";
  54. cout << "Unesite koliko zelite obrisati aktivnih zadataka: "; cin >> br;
  55. }
  56. int j = 0;
  57. for (int i = 0; i < br; i++) {
  58. if(q[j].front != q[j].rear){
  59. broj_aktivnih_zadataka--;
  60. q[j].front = q[j].front + 1;
  61. cout << "Obrisan zadatak sa prioritetom " << q[j].A[q[j].front] << endl;
  62. q[j].A[q[j].front] = 0;
  63. q[j].front = -1;
  64. for (int k = 0; k < q[j].rear; k++) {
  65. q[j].A[k] = q[j].A[k + 1];
  66. }
  67. q[j].rear = q[j].rear - 1;
  68. i++;
  69. }
  70. else {
  71. j++;
  72. }
  73. i--;
  74. }
  75.  
  76.  
  77. }
  78. void print(Queue *q, Element *e) {
  79. int br = 0;
  80. for (int i = 0; i < broj_prioriteta; i++) {
  81. cout << "Broj aktivnih zadataka na prioritetu broj " << i + 1 << ": ";
  82. for (int j = q[i].front + 1; j <= q[i].rear; j++) {
  83. br++;
  84. }
  85. if (br == 0) {
  86. cout << "Nema aktivnih zadataka!" << endl;
  87. }
  88. else {
  89. cout << "[Trenutno su aktivna " << br << " zadataka]\n";
  90. }
  91. br = 0;
  92. }
  93. cout << "------------------------------------------\n";
  94. cout << "Ukupan broj trenutno aktivnih zadataka: " << broj_aktivnih_zadataka << endl;
  95. cout << "------------------------------------------\n";
  96. }
  97. int menu() {
  98. int izbor;
  99. do {
  100. cout << "-------------------------\n";
  101. cout << " PRIORITY TASK MENU \n";
  102. cout << "-------------------------\n";
  103. cout << "1) Unesi nove zadatke\n";
  104. cout << "2) Obrisi zadatke\n";
  105. cout << "3) Ispisi aktivne zadatke\n";
  106. cout << "4) Kraj\n";
  107. cout << "-------------------------\n";
  108. cout << "Unesite izbor: "; cin >> izbor;
  109. return izbor;
  110. system("pause"); system("cls");
  111. } while (1);
  112. }
  113.  
  114. int main() {
  115. cout << "Unesite koliko zelite unijeti zadataka: "; cin >> broj_elemenata;
  116. Element *e = new Element[broj_elemenata];
  117. cout << "Unesite broj prioriteta: "; cin >> broj_prioriteta;
  118. Queue *q = new Queue[broj_prioriteta];
  119. create_queue(q);
  120. enqueue_All_Priorities(q, e);
  121. system("pause"); system("cls");
  122. int izbor;
  123. do {
  124. izbor = menu();
  125. if (izbor < 1 || izbor>3) {
  126. break;
  127. }
  128. if (izbor == 1) {
  129. cout << "Unesite koliko zelite unijeti novih zadataka: "; cin >> broj_elemenata;
  130. enqueue_All_Priorities(q, e);
  131. system("pause"); system("cls");
  132. }
  133. if (izbor == 2) {
  134. dequeue(q, e);
  135. system("pause"); system("cls");
  136. }
  137. if (izbor == 3) {
  138. print(q, e);
  139. system("pause"); system("cls");
  140. }
  141.  
  142. } while (1);
  143.  
  144. delete[]q->A; q->A = nullptr;
  145. delete[]q; q = nullptr;
  146. delete[]e; e = nullptr;
  147. system("pause");
  148. return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement