Untitled
unknown
plain_text
3 years ago
3.0 kB
3
Indexable
/* Zmieniając ostatnią literę w poniższej instrukcji na D (dodatkowe), lub P (podstawowe) * wybierasz aktywne zadanie. * * UWAGA: jeśli rozwiązanie zadań wymaga podziału programu na pliki to dodaj je wszystkie do * projektu, ale przy każdym zadaniu "includuj" tylko te, które jego dotyczą. * */ #define ZadanieD #ifdef ZadanieD #include <stdlib.h> #include <iostream> #include <time.h> #include <iomanip> using namespace std; void wypelnij(int** tab, const int W, const int K) { int wypelnienie = 1; for (int i = 0; i < W; i++) { for (int j = 0; j < K; j++) tab[i][j] = wypelnienie++; } } void wypisz(int** tab, const int W, const int K) { for (int i = 0; i < W; i++) { for (int j = 0; j < K; j++) cout << setw(3) << tab[i][j]; cout << endl; } cout << endl; } void zwolnienieTablicy(int*** tab, const int W, const int K) { bool jakaAlokacja; // 0 -> fragmentaryczna || 1 -> ciągła if (W == 1) { cerr << "Tablica ma jeden wiersz. " << endl; // dla tablicy o 1 wierszu zastosowana dealokacja ciagla delete[] tab[0]; delete[] tab; tab = nullptr; } else { for (int i = 0; i < (W - 1); i++) { if (tab[i] + K == tab[i + 1]) // sprawdzenie czy adresy wierszy są po kolei jakaAlokacja = 1; else jakaAlokacja = 0; } if (jakaAlokacja) { cerr << "Wykryty rodzaj alokacji: ciagla" << endl; // zwolnienie tablicy ciągłej delete[] tab[0]; delete[] tab; tab = nullptr; } else { cerr << "Wykryty rodzaj alokacji: fragmentaryczna" << endl; // zwolnienie tablicy fragmentarycznej for (int i = 0; i < W; i++) { delete[] tab[i]; } delete[] tab; tab = nullptr; } } } int main() { srand(time(NULL)); int rodzajAlokacji = (rand() % 2) + 1; //losowanie jaki rodzaj alokacji zostanie wysłany do funkcji int iloscWierszy = 10; int iloscKolumn = 6; int** tab2D = nullptr; if (rodzajAlokacji == 1) { cout << "Wylosowana alokacja: fragmentaryczna"; tab2D = new int* [iloscWierszy]; // alokacja fragmentaryczna for (int i = 0; i < iloscWierszy; i++) { tab2D[i] = new int[iloscKolumn]; } } else if (rodzajAlokacji == 2) { cout << "Wylosowana alokacja: ciagla"; tab2D = new int* [iloscWierszy]; cout << "orginalna 2D: " << tab2D;// alokacja ciągła tab2D[0] = new int[iloscWierszy * iloscKolumn]; for (int i = 1; i < iloscWierszy; i++) { tab2D[i] = &tab2D[0][i * iloscKolumn]; } } wypelnij(tab2D, iloscWierszy, iloscKolumn); // wypelnienie cout << endl << "Tablica: " << endl << endl; wypisz(tab2D, iloscWierszy, iloscKolumn); // wypisanie zwolnienieTablicy(&tab2D, iloscWierszy, iloscKolumn); // funkcja zwalniajaca tablic } #endif #ifdef ZadanieP // TU UMIEŚĆ KOD ROZWIAZANIA ZADANIA PODSTAWOWEGO #endif #ifdef ZadanieA // TU UMIEŚĆ KOD ROZWIAZANIA ZADANIA AMBITNEGO #endif
Editor is loading...