Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- class Macierz{
- private:
- static int iloscMacierzy;
- static const int bezpiecznaGranica = 15000;
- int m; //kolumny
- int n; //wiersze
- double **t;
- double wartosc; //gdy macierz jest 1x1
- public:
- //KONSTRUKTOR DOMYŚLNY
- Macierz (): m(1), n(1), t(NULL), wartosc(0)
- {
- this->iloscMacierzy++;
- }
- //KONSTRUKTOR TWORZĄCY MACIERZ MxN
- Macierz (int nowe_kolumny, int nowe_wiersze){
- if (nowe_kolumny == 1 && nowe_wiersze == 1){
- this->wartosc = 0;
- this->iloscMacierzy++;
- }
- else{
- nowe_kolumny > this->bezpiecznaGranica ? this->m = this->bezpiecznaGranica : this->m = nowe_kolumny;
- nowe_wiersze > this->bezpiecznaGranica ? this->n = this->bezpiecznaGranica : this->n = nowe_wiersze;
- this->t = new double *[this->m];
- for(int i = 0; i<this->m; i++)
- this->t[i] = new double [this->n];
- for(int i = 0; i<this->m; i++)
- for(int j = 0; j<this->n; j++)
- this->t[i][j] = 0;
- this->iloscMacierzy++;
- }
- }
- //KONSTRUKTOR KOPIUJĄCY
- Macierz (Macierz &mk){
- this->m = mk.m;
- this->n = mk.n;
- this->t = new double *[this->m];
- for(int i = 0; i<this->m; i++)
- this->t[i] = new double [this->n];
- for(int i=0; i<this->m; i++)
- for(int j=0; j<this->n; j++)
- this->t[i][j] = mk.t[i][j];
- this->iloscMacierzy++;
- }
- //DESTRUKTOR
- ~Macierz(){
- if(t != NULL){
- for(int i=0; i<this->m; i++) // usuwanie starej tablicy
- delete[] t[i];
- delete[] t;
- }
- this->iloscMacierzy--;
- }
- //GET LICZNIK
- int getLicznik(){ return this->iloscMacierzy; }
- //GETTER
- double get(int kolumna, int wiersz){
- if(kolumna <= this->m && wiersz <= this->n)
- if(kolumna == 0 && wiersz == 0)
- return wartosc;
- else
- return t[kolumna][wiersz];
- else
- printf("ZLE WSPOLRZEDNE\n");
- }
- //SETTER
- void set(int kolumna, int wiersz, double liczba){
- if(kolumna <= this->m && wiersz <= this->n){
- if(kolumna == 0 && wiersz == 0)
- wartosc = liczba;
- if(t != NULL)
- t[kolumna][wiersz] = liczba;
- }
- else
- printf("ZLE WSPOLRZEDNE\n");
- }
- //POWIEKSZ MACIERZ
- void powiekszMacierz(int nowe_kolumny, int nowe_wiersze){
- if(nowe_kolumny > this->bezpiecznaGranica || nowe_wiersze > this->bezpiecznaGranica)
- printf("Nie mozna zwiekszyc macierzy do %dx%d! Zmniejszono do bezpiecznej granicy\n", nowe_kolumny, nowe_wiersze);
- nowe_kolumny > this->bezpiecznaGranica ? nowe_kolumny = this->bezpiecznaGranica : nowe_kolumny;
- nowe_wiersze > this->bezpiecznaGranica ? nowe_wiersze = this->bezpiecznaGranica : nowe_wiersze;
- int i, j;
- double **buff = new double *[this->m]; // tworzenie tablicy buforu
- for(i=0; i<this->m; i++)
- buff[i] = new double [this->n];
- for(i=0; i<this->m; i++) // przepisywanie wartosci do buforu
- for(j=0; j<this->n; j++)
- buff[i][j] = this->t[i][j];
- for(i=0; i<this->m; i++) // usuwanie starej tablicy
- delete[] t[i];
- delete[] t;
- this->t = new double *[nowe_kolumny]; // nowa "alokacja" pamięci dla wskaźnika klasy
- for(i=0; i<nowe_kolumny; i++)
- t[i] = new double [nowe_wiersze];
- for(i=0; i<nowe_kolumny; i++) // przepisywanie wartości do nowej tablicy
- for(j=0; j<nowe_wiersze; j++){
- if(j>= this->n || i>= this->m){
- this->t[i][j] = 0;
- }
- else
- this->t[i][j] = buff[i][j];
- }
- for(i=0; i<this->m; i++) // usuwanie bufora
- delete[] buff[i];
- delete[] buff;
- this->m = nowe_kolumny;
- this->n = nowe_wiersze;
- }
- //ZMNIEJSZ MACIERZ
- void zmniejszMacierz(int nowe_kolumny, int nowe_wiersze){
- nowe_kolumny < 0 ? nowe_kolumny = 1 : nowe_kolumny;
- nowe_wiersze < 0 ? nowe_wiersze = 1 : nowe_wiersze;
- double **buff = new double *[nowe_kolumny]; //tworzenie tablicy buforu
- for(int i=0; i<nowe_kolumny; i++)
- buff[i] = new double [nowe_wiersze];
- for(int i=0; i<nowe_kolumny; i++) //przepisanie wartości ze starej tablicy
- for(int j=0; j<nowe_wiersze; j++)
- buff[i][j] = t[i][j];
- for(int i=0; i<this->m; i++) // usuwanie starej tablicy
- delete[] this->t[i];
- delete[] this->t;
- this->t = buff; //bufor jako nowa tablica
- this->m = nowe_kolumny;
- this->n = nowe_wiersze;
- if(this->m == 1 && this->n == 1)
- wartosc = t[0][0];
- }
- };
- int Macierz::iloscMacierzy = 0;
- int main(){
- double m = 10;
- double n = 10;
- //NOWE DWA OBIEKTY
- Macierz *Macierz_1 = new Macierz();
- Macierz *Macierz_2 = new Macierz(m, n);
- printf("Licznik z Macierz_1: %d\n", Macierz_1->getLicznik());
- printf("Licznik z Macierz_2: %d\n", Macierz_2->getLicznik());
- Macierz_2->powiekszMacierz(15500, 15500);
- printf("Powiekszono Macierz_2\n");
- Macierz_2->set(0,0,1024.0);
- printf("Pole (0,0) Macierz_2: %lf\n", Macierz_2->get(0,0));
- Macierz_2->zmniejszMacierz(1,1);
- printf("Zmniejszono Macierz_2 do rozmiaru 1x1\n");
- printf("Pole (0,0) Macierz_2: %lf\n", Macierz_2->get(0,0));
- //KASOWANIE Z PAMIĘCI
- delete Macierz_1;
- printf("Usunieto Macierz_1\n");
- printf("Licznik z Macierz_2: %d\n", Macierz_2->getLicznik());
- delete Macierz_2;
- printf("Usunieto Macierz_2\n");
- printf("Licznik z Macierz_2: %d\n", Macierz_2->getLicznik());
- printf("Brawo, wszystko dziala\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement