Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- //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
- //dynamicznie tablic:
- //a) dzielników liczby n z tablicy tab
- //b) liczb parzystych z tablicy tab,
- //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
- //odpowiedniego rodzaju (dzielnika/parzystej) należy zwiększyć jej rozmiar 2 razy.
- int** allocMatrix2D(int dim1, int dim2) {
- int** tabDwuWym = new int*[dim1];
- for (int i = 0; i < dim1; ++i)
- tabDwuWym[i] =new int [dim2];
- return tabDwuWym;
- }
- int * zmianaRozmiaru(int * staraTablica, int poczatkowaWielkosc)
- {
- int wiekszy = poczatkowaWielkosc *2;
- int* wiekszyArr = new int[wiekszy];
- for (int i = 0; i < poczatkowaWielkosc; i++)
- {
- wiekszyArr[i] = staraTablica[i];
- }
- //wiekszyArr[0] = wiekszy;
- delete[] staraTablica;
- return wiekszyArr;
- }
- //int * koncowyRozmiar(int * staraTablica, int koncowyRozmiar)
- //{
- // int koncowy = koncowyRozmiar;
- // int* koncowyArr = new int[koncowy];
- //
- // for (int i = 0; i < koncowyRozmiar; i++)
- // {
- // koncowyArr[i] = staraTablica[i];
- // }
- // koncowyArr[0] = koncowy;
- // delete[] staraTablica;
- // return koncowyArr;
- //}
- int ** test(int * tab, int n)
- {
- int countDziel = 0, countDod = 1,ilosc1 =0,ilosc2 =0;
- int poczatkowaWielkosc = 2;
- int rozmDod = poczatkowaWielkosc, rozmDziel = poczatkowaWielkosc;
- int ** tabDwuWym = allocMatrix2D(2, poczatkowaWielkosc);
- for (int i = 0; i <n; ++i)
- {
- if (n%tab[i] == 0) {
- if (countDziel < rozmDziel) {
- ilosc1++;
- tabDwuWym[0][countDziel++] = tab[i];
- }
- else {
- tabDwuWym[0] = zmianaRozmiaru(tabDwuWym[0], rozmDziel);
- rozmDziel *= 2;//tabDwuWym[0][0];
- ilosc1++;
- tabDwuWym[0][countDziel++] = tab[i];
- }
- }
- // if (tab[i] % 2 == 0) {
- // if (countDod < rozmDod) {
- //
- // ilosc2++;
- // tabDwuWym[1][countDod++] = tab[i];
- // }
- // else {
- // tabDwuWym[1] = zmianaRozmiaru(tabDwuWym[1], rozmDod);
- // rozmDod = tabDwuWym[1][0];
- //
- // ilosc2++;
- // tabDwuWym[1][countDod++] = tab[i];
- // }
- //
- // }
- //
- // cout<<"Tab ["<<i<<"]"<<" : "<<tab[i]<<" " <<ilosc1<<" "<< ilosc2<<" rozmiar dod : "<<rozmDod<<" rozmiardziel : "<<rozmDziel<<endl;
- }
- cout<<ilosc1<<endl;
- for (int i = 0; i<ilosc1; i++) {
- cout<<tabDwuWym[0][i]<<endl;
- }
- int* koncowa = new int [ilosc1+1];
- koncowa[0]=ilosc1;
- for (int i =0; i<ilosc1; i++) {
- koncowa[i+1]= tabDwuWym[0][i];
- }
- delete[] tabDwuWym[0];
- tabDwuWym[0] = koncowa;
- return tabDwuWym;
- }
- int main(int argc, char * argv[])
- {
- int tabN[20]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20 };
- int ** tabDwuWymPtr;
- tabDwuWymPtr = test(tabN, sizeof(tabN) / sizeof(int));
- for (int i = 0; i < tabDwuWymPtr[0][0]; i++)
- {
- cout << tabDwuWymPtr[0][i+1] << ' ';
- }
- cout << endl;
- //
- // for (int i = 0; i < tabDwuWymPtr[1][0]; i++)
- // {
- // cout << tabDwuWymPtr[1][i] << ' ';
- // }
- delete[] tabDwuWymPtr[1];
- delete[] tabDwuWymPtr[0];
- delete[] tabDwuWymPtr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement