Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.66 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Lista_oczekujaca{
  6. public:
  7. struct wezel_oczekujacy{
  8. string nazwa;
  9. int przesuniecie;
  10. int nowe_przesuniecie;
  11. };
  12. int ile;
  13. int roz_tab; // rozmiar tablicy
  14. int akt ; // aktualny numer tablicy liczony od 0
  15. // int skok; // oznacza o ile mamy sie przesunać
  16. wezel_oczekujacy * w2; // wezel oczekujacy ktory bedzie inicjalizowany tylko dla oczekujacych wartosci
  17.  
  18. Lista_oczekujaca(int p); // p - ilosc slow potrzebnych na dodanie
  19. ~Lista_oczekujaca();
  20. void dodaj_oczekujacy(string nazwa, int przesuniecie, int nowe_przesuniecie); // dodaje element na koniec
  21. void usun_oczekujacy(); // usuwa element o indeksie akt i inkrementuje akt
  22. bool empty(); // sprawdza czy pusty
  23. void wyswietl_oczekujacy();
  24. void wyswietl();
  25. };
  26. Lista_oczekujaca :: Lista_oczekujaca (int p){
  27. ile = 0;
  28. roz_tab = p;
  29. akt = 0;
  30. w2 = new wezel_oczekujacy[p];
  31. }
  32. Lista_oczekujaca ::~ Lista_oczekujaca (){
  33. delete [] w2;
  34. }
  35. void Lista_oczekujaca :: dodaj_oczekujacy(string nazwa, int przesuniecie, int nowe_przesuniecie){
  36. w2[ile].nazwa = nazwa;
  37. w2[ile].przesuniecie = przesuniecie;
  38. w2[ile].nowe_przesuniecie = nowe_przesuniecie;
  39. ile++;
  40. }
  41. void Lista_oczekujaca :: usun_oczekujacy(){
  42. for(int i = akt ; i <ile-1; i ++){
  43. w2[i].nazwa = w2[i+1].nazwa;
  44. w2[i].przesuniecie = w2[i+1].przesuniecie;
  45. w2[i].nowe_przesuniecie = w2[i+1].nowe_przesuniecie;
  46. }
  47. ile--;
  48. }
  49. bool Lista_oczekujaca :: empty (){
  50. if (ile ==0)
  51. return true ;
  52. else
  53. return false ;
  54. }
  55. void Lista_oczekujaca :: wyswietl_oczekujacy(){
  56. cout<< w2[akt].nazwa;
  57. }
  58. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  59. class Lista{
  60. public:
  61. struct wezel{
  62. string nazwa;
  63. int przesuniecie;
  64. };
  65. int tmp; // zluzy jako wartosc tymczasowa dla elementu przesun ktory bedziemy usuwac
  66. int reszta; // sluzy jako
  67. int ile; // oznacza ile elementow jest aktualnie w tablicy
  68. int roz_tab; // rozmiar tablicy
  69. int akt; // aktualny numer tablicy liczony od 0
  70. wezel * w1; // wskaznik na wezel ktory bedziemy inicjalizowac w konstruktorze
  71. // int skok; // oznacza o ile mamy sie przesunać
  72.  
  73.  
  74. Lista(int n, int s); // n - ilosc elementow, s - element od ktorego zaczynamy
  75. ~Lista();
  76. void dodaj(string nazwa, int przesuniecie); // dodaje element na koniec
  77. void usun(int tmp_akt); // usuwa element o indeksie akt
  78. bool empty(); // sprawdza czy pusty
  79. void wyswietl();
  80. void pokaz_liste();
  81. void przesun();
  82. int aktualny() { return akt;}
  83. void wstaw_w_luke(string nazwa, int przesuniecie, int nowe_przesuniecie);
  84. void licz_akt_poz();
  85. };
  86. Lista :: Lista (int n, int s){
  87. tmp =0;
  88. reszta = 0;
  89. ile=0;
  90. roz_tab = n;
  91. akt = s;
  92. w1 = new wezel[n];
  93. }
  94. Lista ::~ Lista (){
  95. delete [] w1;
  96. }
  97. void Lista :: dodaj(string nazwa, int przesuniecie){
  98. if(ile == roz_tab-1){
  99. roz_tab += 10;
  100. wezel * tab_pom = new wezel[roz_tab];
  101. for(int i=0; i<ile; i++){
  102. tab_pom[i].nazwa = w1[i].nazwa;
  103. tab_pom[i].przesuniecie = w1[i].przesuniecie;
  104. }
  105. delete [] w1;
  106. w1 = tab_pom;
  107. }
  108. w1[ile].nazwa = nazwa;
  109. w1[ile].przesuniecie = przesuniecie;
  110. ile++;
  111. }
  112. void Lista :: usun(int tmp_akt){
  113. tmp = w1[tmp_akt].przesuniecie;
  114. for(int i = tmp_akt ; i <ile; i++){
  115. w1[i].nazwa = w1[i+1].nazwa;
  116. w1[i].przesuniecie = w1[i+1].przesuniecie;
  117. }
  118. ile--;
  119. }
  120. bool Lista :: empty (){
  121. if (ile == 0)
  122. return true ;
  123. else
  124. return false ;
  125. }
  126. void Lista :: wyswietl(){
  127. cout<< w1[akt].nazwa << " ";
  128. }
  129. void Lista :: pokaz_liste(){
  130. for(int i=0; i< ile; i++){
  131. cout << w1[i].nazwa << w1[i].przesuniecie << endl;
  132. }
  133. }
  134. void Lista :: przesun(){
  135. // ile ++;
  136. // na poczatek trzeba przesunac cala liste do przodu by zrobic miejsce
  137. if(ile == roz_tab){
  138. roz_tab += 10;
  139. wezel * tab_pom = new wezel[roz_tab - akt +1];
  140. for(int i=0; i<akt; i++){
  141. tab_pom[i].nazwa = w1[i].nazwa;
  142. tab_pom[i].przesuniecie = w1[i].przesuniecie;
  143. }
  144. for(int i=akt; i<ile+1; i++){
  145. tab_pom[i+1].nazwa = w1[i].nazwa;
  146. tab_pom[i+1].przesuniecie = w1[i].przesuniecie;
  147. }
  148. delete [] w1;
  149. w1 = tab_pom;
  150. }else{
  151. for(int i = ile;i > akt ;i--){
  152. w1[i].nazwa = w1[i-1].nazwa;
  153. w1[i].przesuniecie = w1[i-1].przesuniecie;
  154. }
  155. }
  156. }
  157. void Lista :: wstaw_w_luke(string nazwa, int przesuniecie, int nowe_przesuniecie){
  158. cout << "akt : " << akt << endl;
  159. cout.flush();
  160. w1[akt].nazwa = nazwa;
  161. w1[akt].przesuniecie = przesuniecie;
  162. // cout<< endl<<w1[akt].nazwa<< " " << w1[akt].przesuniecie << endl;
  163. // akt++; // przesuwa sie by znowu wyladowac na elemencie ktory zmienialismy
  164. w1[akt].przesuniecie = nowe_przesuniecie;
  165. }
  166. void Lista :: licz_akt_poz(){
  167. if(ile == 1)
  168. akt = 0;
  169. else if(w1[akt].przesuniecie< 0){
  170. reszta = (-w1[akt].przesuniecie)%ile;
  171. if(reszta > akt)
  172. akt += (ile-reszta);
  173. else
  174. akt -= reszta;
  175. }else{
  176. int liczba = (w1[akt].przesuniecie + akt)%ile;
  177. if(liczba == 0)
  178. akt = ile;
  179. else
  180. akt = liczba;
  181. }
  182.  
  183. }
  184.  
  185. //#############################################################
  186. int main()
  187. {
  188. ios_base::sync_with_stdio(false);
  189.  
  190. int n,s,p;
  191. string nazwa;
  192. int przesuniecie;
  193. int nowe_przesuniecie;
  194. cin >> n >> s;
  195. Lista l1(n,s);
  196. for(int i=0; i<n; i++){
  197. cin >> nazwa >> przesuniecie;
  198. l1.dodaj(nazwa, przesuniecie);
  199. }
  200. cin >> p;
  201. static Lista_oczekujaca l2(p);
  202. for(int i=0; i<p; i++){
  203. cin >> nazwa >> przesuniecie >> nowe_przesuniecie;
  204. l2.dodaj_oczekujacy(nazwa,przesuniecie, nowe_przesuniecie);
  205. }
  206. int tmp_akt = 0;
  207. while(!l1.empty()){
  208. tmp_akt = l1.aktualny();
  209. if(l1.w1[tmp_akt].przesuniecie == 0){
  210. l1.przesun();
  211. // cout << endl << l2.w2[0].nazwa << " " << l2.w2[0].przesuniecie << " " << l2.w2[0].nowe_przesuniecie << endl;
  212. l1.wstaw_w_luke(l2.w2[0].nazwa,l2.w2[0].przesuniecie,l2.w2[0].nowe_przesuniecie);
  213. l2.usun_oczekujacy();
  214. l1.licz_akt_poz();
  215. }
  216. l1.wyswietl();
  217. cout.flush();
  218. l1.licz_akt_poz();
  219. l1.usun(tmp_akt);
  220. // cout << "@@@@@@@@@@" << endl;
  221. // l1.pokaz_liste();
  222. // cout << "@@@@@@@@@@" << endl;
  223.  
  224.  
  225. }
  226.  
  227.  
  228. return 0;
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement