Advertisement
Guest User

Untitled

a guest
May 6th, 2015
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.14 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. class Macierz{
  4. private:
  5.     static int iloscMacierzy;
  6.     static const int bezpiecznaGranica = 15000;
  7.     int m; //kolumny
  8.     int n; //wiersze
  9.     double **t;
  10.     double wartosc; //gdy macierz jest 1x1
  11.  
  12. public:
  13.     //KONSTRUKTOR DOMYŚLNY
  14.     Macierz (): m(1), n(1), t(NULL), wartosc(0)
  15.     {
  16.         this->iloscMacierzy++;
  17.     }
  18.     //KONSTRUKTOR TWORZĄCY MACIERZ MxN
  19.     Macierz (int nowe_kolumny, int nowe_wiersze){
  20.         if (nowe_kolumny == 1 && nowe_wiersze == 1){
  21.             this->wartosc = 0;
  22.             this->iloscMacierzy++;
  23.         }
  24.         else{
  25.             nowe_kolumny > this->bezpiecznaGranica ? this->m = this->bezpiecznaGranica : this->m = nowe_kolumny;
  26.             nowe_wiersze > this->bezpiecznaGranica ? this->n = this->bezpiecznaGranica : this->n = nowe_wiersze;
  27.             this->t = new double *[this->m];
  28.             for(int i = 0; i<this->m; i++)
  29.                 this->t[i] = new double [this->n];
  30.  
  31.             for(int i = 0; i<this->m; i++)
  32.                 for(int j = 0; j<this->n; j++)
  33.                     this->t[i][j] = 0;
  34.             this->iloscMacierzy++;
  35.         }
  36.     }
  37.     //KONSTRUKTOR KOPIUJĄCY
  38.     Macierz (Macierz &mk){
  39.         this->m = mk.m;
  40.         this->n = mk.n;
  41.         this->t = new double *[this->m];
  42.         for(int i = 0; i<this->m; i++)
  43.             this->t[i] = new double [this->n];
  44.  
  45.         for(int i=0; i<this->m; i++)
  46.             for(int j=0; j<this->n; j++)
  47.                 this->t[i][j] = mk.t[i][j];
  48.         this->iloscMacierzy++;
  49.     }
  50.     //DESTRUKTOR
  51.     ~Macierz(){
  52.         if(t != NULL){
  53.             for(int i=0; i<this->m; i++)                    // usuwanie starej tablicy
  54.                 delete[] t[i];
  55.             delete[] t;
  56.         }
  57.         this->iloscMacierzy--;
  58.     }
  59.     //GET LICZNIK
  60.     int getLicznik(){ return this->iloscMacierzy; }
  61.  
  62.     //GETTER
  63.     double get(int kolumna, int wiersz){
  64.         if(kolumna <= this->m && wiersz <= this->n)
  65.             if(kolumna == 0 && wiersz == 0)
  66.                 return wartosc;
  67.             else
  68.                 return t[kolumna][wiersz];
  69.         else
  70.             printf("ZLE WSPOLRZEDNE\n");
  71.     }
  72.     //SETTER
  73.     void set(int kolumna, int wiersz, double liczba){
  74.         if(kolumna <= this->m && wiersz <= this->n){
  75.             if(kolumna == 0 && wiersz == 0)
  76.                 wartosc = liczba;
  77.             if(t != NULL)
  78.                 t[kolumna][wiersz] = liczba;
  79.         }
  80.         else
  81.             printf("ZLE WSPOLRZEDNE\n");
  82.     }
  83.     //POWIEKSZ MACIERZ
  84.     void powiekszMacierz(int nowe_kolumny, int nowe_wiersze){
  85.         if(nowe_kolumny > this->bezpiecznaGranica || nowe_wiersze > this->bezpiecznaGranica)
  86.             printf("Nie mozna zwiekszyc macierzy do %dx%d! Zmniejszono do bezpiecznej granicy\n", nowe_kolumny, nowe_wiersze);
  87.  
  88.         nowe_kolumny > this->bezpiecznaGranica ? nowe_kolumny = this->bezpiecznaGranica : nowe_kolumny;
  89.         nowe_wiersze > this->bezpiecznaGranica ? nowe_wiersze = this->bezpiecznaGranica : nowe_wiersze;
  90.  
  91.         int i, j;
  92.         double **buff = new double *[this->m];           // tworzenie tablicy buforu
  93.         for(i=0; i<this->m; i++)
  94.             buff[i] = new double [this->n];
  95.  
  96.         for(i=0; i<this->m; i++)                    // przepisywanie wartosci do buforu
  97.             for(j=0; j<this->n; j++)
  98.                 buff[i][j] = this->t[i][j];
  99.  
  100.         for(i=0; i<this->m; i++)                    // usuwanie starej tablicy
  101.             delete[] t[i];
  102.         delete[] t;
  103.  
  104.         this->t = new double *[nowe_kolumny];           // nowa "alokacja" pamięci dla wskaźnika klasy
  105.         for(i=0; i<nowe_kolumny; i++)
  106.             t[i] = new double [nowe_wiersze];
  107.            
  108.        
  109.  
  110.         for(i=0; i<nowe_kolumny; i++)               // przepisywanie wartości do nowej tablicy
  111.             for(j=0; j<nowe_wiersze; j++){
  112.                 if(j>= this->n || i>= this->m){
  113.                     this->t[i][j] = 0;
  114.                 }
  115.                 else
  116.                     this->t[i][j] = buff[i][j];
  117.             }
  118.  
  119.         for(i=0; i<this->m; i++)                    // usuwanie bufora
  120.                 delete[] buff[i];
  121.         delete[] buff;
  122.  
  123.         this->m = nowe_kolumny;
  124.         this->n = nowe_wiersze;
  125.     }
  126.     //ZMNIEJSZ MACIERZ
  127.     void zmniejszMacierz(int nowe_kolumny, int nowe_wiersze){
  128.         nowe_kolumny < 0 ? nowe_kolumny = 1 : nowe_kolumny;
  129.         nowe_wiersze < 0 ? nowe_wiersze = 1 : nowe_wiersze;
  130.  
  131.         double **buff = new double *[nowe_kolumny];         //tworzenie tablicy buforu
  132.         for(int i=0; i<nowe_kolumny; i++)
  133.             buff[i] = new double [nowe_wiersze];
  134.  
  135.         for(int i=0; i<nowe_kolumny; i++)               //przepisanie wartości ze starej tablicy
  136.             for(int j=0; j<nowe_wiersze; j++)
  137.                 buff[i][j] = t[i][j];
  138.  
  139.         for(int i=0; i<this->m; i++)                    // usuwanie starej tablicy
  140.             delete[] this->t[i];
  141.         delete[] this->t;
  142.  
  143.         this->t = buff;                             //bufor jako nowa tablica
  144.  
  145.         this->m = nowe_kolumny;
  146.         this->n = nowe_wiersze;
  147.  
  148.         if(this->m == 1 && this->n == 1)
  149.             wartosc = t[0][0];
  150.     }
  151. };
  152.  
  153. int Macierz::iloscMacierzy = 0;
  154.  
  155.  
  156. int main(){
  157.     double m = 10;
  158.     double n = 10;
  159.     //NOWE DWA OBIEKTY
  160.     Macierz *Macierz_1 = new Macierz();
  161.     Macierz *Macierz_2 = new Macierz(m, n);
  162.    
  163.  
  164.  
  165.     printf("Licznik z Macierz_1: %d\n", Macierz_1->getLicznik());
  166.     printf("Licznik z Macierz_2: %d\n", Macierz_2->getLicznik());
  167.  
  168.     Macierz_2->powiekszMacierz(15500, 15500);
  169.     printf("Powiekszono Macierz_2\n");
  170.     Macierz_2->set(0,0,1024.0);
  171.     printf("Pole (0,0) Macierz_2: %lf\n", Macierz_2->get(0,0));
  172.     Macierz_2->zmniejszMacierz(1,1);
  173.     printf("Zmniejszono Macierz_2 do rozmiaru 1x1\n");
  174.     printf("Pole (0,0) Macierz_2: %lf\n", Macierz_2->get(0,0));
  175.  
  176.     //KASOWANIE Z PAMIĘCI
  177.     delete Macierz_1;
  178.     printf("Usunieto Macierz_1\n");
  179.     printf("Licznik z Macierz_2: %d\n", Macierz_2->getLicznik());
  180.     delete Macierz_2;
  181.     printf("Usunieto Macierz_2\n");
  182.     printf("Licznik z Macierz_2: %d\n", Macierz_2->getLicznik());
  183.  
  184.     printf("Brawo, wszystko dziala\n");
  185.  
  186.     return 0;
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement