Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.86 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <iostream>
  4.  
  5. #define SIZE  2
  6.  
  7. class Macierz {
  8. public:
  9.     Macierz();
  10.     ~Macierz();
  11.     void wypisz() const; // skąd ten straszny CONST?! WTF?! ten const obok nazwy metody oznacza że ta metoda nie będzie
  12.  
  13. modyfikować pól tej klasy (czyli u nas macierzy :)
  14.     double getValue(const int posX, const int posY) const;
  15.     void setValue(const int posX, const int posY, double value); // to zmienia jakąś cyferkę z macierzy o podanych
  16.  
  17. koordynatach- easy (nie ma consta za metodą, a wiesz czemu? ... podejdź to Ci powiem... bo ta metoda modyfikuje macierz, dobre co?
  18.  
  19. xD)
  20.     friend std::ostream & operator<< (std::ostream &output, const Macierz& m); // jazda bez trzymanki xD funkcja
  21.  
  22. zaprzyjaźniona (NIE METODA!! xD) - dlaczego zaprzyjaźniona? bo to taka funkcyjka któa ma dostęp prywatnych danych klasy xD (zwróc
  23.  
  24. uwagę na definicję - nie ma tam "Macierz:: " <- jak wspomniałem to nie jest meotoda klasy macierz :) więcje niżej xD
  25.     bool operator== (const Macierz& m) const; // to będzie do porównań czy jedna macierz równa się drugiej ;p
  26.     Macierz & operator= (const Macierz &m); // to do przypisywania - zero filozofii
  27.     Macierz operator* (const Macierz &m) const; // a to to do mnożenia
  28. private:
  29.     double **macierz; // wskaźniczek do wskaźniczków ;p czyli tablica 2d
  30. };
  31.  
  32. //konstruktor alokuje pamiec dla dwuwymiarowej tablicy "macierz" oraz domyslnie wpisuje do niej same 0 by nie bylo tam krzakow xD
  33. Macierz::Macierz() {
  34.     macierz = new double * [SIZE]; najepierw tworzymy jednowymiarową tablicę wskaźników
  35.     for (int i = 0; i < SIZE; ++i) {
  36.         macierz[i] = new double[SIZE]; // teraz do każdej komórki wrzucamy tablicę już zwykłych wartości double - czyli
  37.  
  38. otrzymujemy tablicę 2d
  39.         for (int j = 0; j < SIZE; ++j) { // tutaj dodatkowo ustawiamy wartości na 0
  40.             macierz[i][j] = 0;
  41.         }
  42.     }
  43. }
  44.  
  45. Macierz::~Macierz() { // tutaj musimy posprzątać po sobie, czyli zwalniamy pamięć po tablicy 2d - jak by była 1d to easy -
  46.  
  47. wstarczy delete [] tab xD; ale to jest 2d :)
  48.  
  49.     for (int i = 0; i < SIZE; ++i) { //skoro w każdej komórce jest jakaś tablica wskaźników to musimy ją całą prze.jechać xD i
  50.  
  51. opróżnić  każdą
  52.         delete[] macierz[i];
  53.     }
  54.     delete[] macierz; // na końcu opróżniamy nadrzędną tablicę
  55.     std::cout << "Pamiec zwolniona\n"; // wypisuje coś :) :)
  56. }
  57.  
  58. // metoda wypisujaca macierz
  59. // no wiadomo o co biega, co ja się będę tutaj produkował xDD
  60. void Macierz::wypisz() const {
  61.     for (int i = 0; i < SIZE; ++i) {
  62.         for (int j = 0; j < SIZE; ++j) {
  63.             std::cout << macierz[i][j] << " ";
  64.         }
  65.         std::cout << "\n";
  66.     }
  67. }
  68.  
  69. double Macierz::getValue(const int posX, const int posY) const { // po co te consty przy tych intach? to informacja i jednocześnie
  70.  
  71. blokada, że nie będziemy w tej metodzie modyfikować posX oraz posY
  72.     return this->macierz[posX][posY];
  73. }
  74.  
  75. void Macierz::setValue(const int posX, const int posY, double value) {
  76.     if (posX * posY <= 0 || posX > SIZE || posY > SIZE) {
  77.         std::cout << "Nie można wstawić wartości.";
  78.         return;
  79.     }
  80.     macierz[posX][posY] = value;
  81. }
  82.  
  83. // sluzy wypisywaniu macierzy, dzieki temu możemy wypisywać macizerz w ten sposób : Macierz m; cout << m << endl;
  84. std::ostream & operator<< (std::ostream &output, const Macierz &m) {
  85.     return output << m.getValue(0, 0) << " " << m.getValue(0, 1) << "\n" << m.getValue(1, 0) << " " << m.getValue(1, 1);
  86. }
  87.  
  88. // to coś robi
  89. // wiadomo co
  90. bool Macierz::operator==(const Macierz& m) const {
  91.     for (int i = 0; i < SIZE; ++i) {
  92.         for (int j = 0; j < SIZE; ++j) {
  93.             if (this->macierz[i][j] != m.getValue(i, j)) {
  94.                 return false;
  95.             }
  96.         }
  97.     }
  98.     return true;
  99. }
  100.  
  101. Macierz & Macierz::operator= (const Macierz &m) {
  102.     return *this;
  103. }
  104.  
  105.  
  106. // to jeszcze dokoncze ;p
  107. // tą metodę do mnożenia znalazłem w necie bo Ty spałaś a ja się zbyt dobrze bawiłem xD zaraz ją przetestuję
  108. Macierz Macierz::operator* (const Macierz &m) const {
  109.     Macierz wynik;
  110.  
  111.     for (int i = 0; i < SIZE; i++) {
  112.         for (int j = 0; j < SIZE; j++) {
  113.             wynik.setValue(i, j, 0);
  114.             for (int k = 0; k < SIZE; k++)
  115.                 wynik.setValue(i, j, wynik.getValue(i, j) + (wynik.getValue(i, k) * m.getValue(k, j)));
  116.  
  117.         }
  118.     }
  119.  
  120.     return wynik;
  121. }
  122. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  123.  
  124. // Macierz.cpp : Defines the entry point for the console application.
  125. //
  126.  
  127. #include <iostream>
  128. #include "stdafx.h"
  129. #include <string>
  130. #include "Macierz.h"
  131.  
  132.  
  133. int main()
  134. {
  135.     try {
  136.         Macierz *m = new Macierz();
  137.         Macierz *m2 = new Macierz();
  138.         m->setValue(1, 1, 2.0);
  139.         m->wypisz();
  140.         std::cout << *m << std::endl;
  141.         m = m2;
  142.  
  143.         if (m == m2) {
  144.             std::cout << "Macierz m oraz m1 sa takie same\n";
  145.         }
  146.         else
  147.         {
  148.             std::cout << "Macierze sa rozne\n";
  149.         }
  150.  
  151.         delete m;
  152.        
  153.     }
  154.     catch (std::exception e) {
  155.         throw e.what();
  156.     }
  157.     getchar();
  158.     return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement