Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. //Napisać i przetestować własną funkcję int** test(int* tab, int n), której parametrami są podana tablica liczb naturalnych tab i jej rozmiar n, a wynikiem jest tablica wskaźników do następujących, utworzonych
  6. //dynamicznie tablic:
  7. //a) dzielników liczby n z tablicy tab
  8. //b) liczb parzystych z tablicy tab,
  9. //przy czym, w każdej z tych tablic (a, b), pierwszy element zawsze oznacza liczbę elementów odpowiedniego rodzaju (dzielników/parzystych). Jeśli w roboczej tablicy nie ma miejsca dla kolejnej liczby
  10. //odpowiedniego rodzaju (dzielnika/parzystej) należy zwiększyć jej rozmiar 2 razy.
  11.  
  12. int** allocMatrix2D(int dim1, int dim2) {
  13. int** tabDwuWym = new int*[dim1];
  14.  
  15.  
  16. for (int i = 0; i < dim1; ++i)
  17. tabDwuWym[i] =new int [dim2];
  18.  
  19. return tabDwuWym;
  20. }
  21.  
  22. int * zmianaRozmiaru(int * staraTablica, int poczatkowaWielkosc)
  23. {
  24. int wiekszy = poczatkowaWielkosc *2;
  25. int* wiekszyArr = new int[wiekszy];
  26.  
  27. for (int i = 0; i < poczatkowaWielkosc; i++)
  28. {
  29. wiekszyArr[i] = staraTablica[i];
  30. }
  31. //wiekszyArr[0] = wiekszy;
  32. delete[] staraTablica;
  33. return wiekszyArr;
  34. }
  35.  
  36. //int * koncowyRozmiar(int * staraTablica, int koncowyRozmiar)
  37. //{
  38. // int koncowy = koncowyRozmiar;
  39. // int* koncowyArr = new int[koncowy];
  40. //
  41. // for (int i = 0; i < koncowyRozmiar; i++)
  42. // {
  43. // koncowyArr[i] = staraTablica[i];
  44. // }
  45. // koncowyArr[0] = koncowy;
  46. // delete[] staraTablica;
  47. // return koncowyArr;
  48. //}
  49.  
  50. int ** test(int * tab, int n)
  51. {
  52. int countDziel = 0, countDod = 1,ilosc1 =0,ilosc2 =0;
  53. int poczatkowaWielkosc = 2;
  54. int rozmDod = poczatkowaWielkosc, rozmDziel = poczatkowaWielkosc;
  55. int ** tabDwuWym = allocMatrix2D(2, poczatkowaWielkosc);
  56.  
  57.  
  58. for (int i = 0; i <n; ++i)
  59. {
  60. if (n%tab[i] == 0) {
  61. if (countDziel < rozmDziel) {
  62.  
  63. ilosc1++;
  64. tabDwuWym[0][countDziel++] = tab[i];
  65.  
  66. }
  67. else {
  68. tabDwuWym[0] = zmianaRozmiaru(tabDwuWym[0], rozmDziel);
  69. rozmDziel *= 2;//tabDwuWym[0][0];
  70.  
  71. ilosc1++;
  72. tabDwuWym[0][countDziel++] = tab[i];
  73. }
  74. }
  75. // if (tab[i] % 2 == 0) {
  76. // if (countDod < rozmDod) {
  77. //
  78. // ilosc2++;
  79. // tabDwuWym[1][countDod++] = tab[i];
  80. // }
  81. // else {
  82. // tabDwuWym[1] = zmianaRozmiaru(tabDwuWym[1], rozmDod);
  83. // rozmDod = tabDwuWym[1][0];
  84. //
  85. // ilosc2++;
  86. // tabDwuWym[1][countDod++] = tab[i];
  87. // }
  88. //
  89. // }
  90. //
  91. // cout<<"Tab ["<<i<<"]"<<" : "<<tab[i]<<" " <<ilosc1<<" "<< ilosc2<<" rozmiar dod : "<<rozmDod<<" rozmiardziel : "<<rozmDziel<<endl;
  92. }
  93.  
  94. cout<<ilosc1<<endl;
  95. for (int i = 0; i<ilosc1; i++) {
  96. cout<<tabDwuWym[0][i]<<endl;
  97.  
  98. }
  99. int* koncowa = new int [ilosc1+1];
  100. koncowa[0]=ilosc1;
  101. for (int i =0; i<ilosc1; i++) {
  102. koncowa[i+1]= tabDwuWym[0][i];
  103. }
  104.  
  105. delete[] tabDwuWym[0];
  106. tabDwuWym[0] = koncowa;
  107.  
  108.  
  109.  
  110. return tabDwuWym;
  111. }
  112.  
  113. int main(int argc, char * argv[])
  114. {
  115. int tabN[20]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20 };
  116. int ** tabDwuWymPtr;
  117. tabDwuWymPtr = test(tabN, sizeof(tabN) / sizeof(int));
  118.  
  119.  
  120. for (int i = 0; i < tabDwuWymPtr[0][0]; i++)
  121. {
  122. cout << tabDwuWymPtr[0][i+1] << ' ';
  123. }
  124. cout << endl;
  125. //
  126. // for (int i = 0; i < tabDwuWymPtr[1][0]; i++)
  127. // {
  128. // cout << tabDwuWymPtr[1][i] << ' ';
  129. // }
  130.  
  131. delete[] tabDwuWymPtr[1];
  132. delete[] tabDwuWymPtr[0];
  133. delete[] tabDwuWymPtr;
  134.  
  135.  
  136.  
  137.  
  138. return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement