#include<iostream> #include<stdlib.h> using namespace std; class MATRIX{ protected: int rows, columns; float **A, **B; //protected zamiast private-dla main jest jak private a dla klasy pochodnej jak public; zmienna jest adresem wskazujacym na zmienna w ktorej jest wskaznik public: MATRIX(int, int); //prototyp konstruktora MATRIX(const MATRIX& );// k.kopiujacy //przy kopiujacym const ~MATRIX(); //destruktor float get(int, int); //prototyp void set(int, int, float); void set(float); //dwa sety-przeciazenie void print(); void trans(); int getrows(){ return rows; } int getcolumns(){ return columns; } }; MATRIX::MATRIX(int a, int <img src='http://www.forum.tweaks.pl/public/style_emoticons/<#EMO_DIR#>/sad.png' class='bbc_emoticon' alt=';)' />{ //definicja konstruktora-gdy metoda jest konstruktorem musi sie nazywac jak klasa rows=a; columns=b; if(rows<1) rows=1; if(columns<1) columns=1; A=new float *[rows]; //zamiast malloc jest new for(int i=0;i<rows;i++) A[i]=new float[columns]; set(0); B=new float *[columns]; //zamiast malloc jest new for(int i=0;i<columns;i++) B[i]=new float[rows]; set(0); } MATRIX::MATRIX(const MATRIX &m){ //przy kopiujacym const rows=m.rows; columns=m.columns; A=new float *[rows]; for(int i=0;i<rows;i++) A[i]=new float[columns]; for(int i=0;i<rows;i++) for(int j=0;j<columns;j++) this->A[i][j]=m.A[i][j]; } MATRIX::~MATRIX(){ for(int i=0;i<rows;i++) delete[] A[i]; delete[] A; } void MATRIX::set(float a){ for(int j=0;j<columns;j++) for(int i=0;i<rows;i++) A[i][j]=a; } void MATRIX::trans(){ for(int i = 0; i < rows; i++) //transponowanie macierzy for(int j = 0;j < columns; j++) B[j][i]=A[i][j]; } void MATRIX::set(int w, int k, float a){ if(w<1||w>rows||k<1||k>columns){ cout << "przekroczony zakres!!!\n"; abort(); } A[w-1][k-1]=a; } float MATRIX::get(int w, int k){ if(w<1||w>rows||k<1||k>columns){ cout << "przekroczony zakres!!!\n"; abort(); } return A[w-1][k-1]; } void MATRIX::print(){ for(int i=0;i<rows;i++){ for(int j=0;j<columns;j++) cout << A[i][j] << "\t"; cout << "\n"; } cout << "\n"; } class matrix :public MATRIX{ //klasą bazową jest klasa MATRIX public: matrix(int a, int <img src='http://www.forum.tweaks.pl/public/style_emoticons/<#EMO_DIR#>/sad.png' class='bbc_emoticon' alt=';)' /> :MATRIX(a,<img src='http://www.forum.tweaks.pl/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' /> {} matrix(const matrix& m) :MATRIX(m) {} //wywolanie konstruktora klasy bazowej matrix operator+(float); //do macierzy dodaje liczbe // matrix operator+(const matrix&); void operator=(const matrix&); }; matrix matrix::operator+(float a){ matrix wynik(rows,columns); for(int i=0;i<rows;i++) for(int j=0;j<columns;j++) wynik.A[i][j]=A[i][j]+a; return wynik; } void matrix::operator=(const matrix& m){ rows=m.rows; columns=m.columns; } int main(){ matrix M1(3,4); // M2(5,6); M1.set(-8); M1.set(2,2,7); M1.print(); //(M1+3).print(); matrix M2(5,6); M2=(M1+3); M2.set(1,1,-1); M2.print(); matrix M3(3,4); M3.set(7); M3.set(1,2,3); M3.trans(); M3.print(); system("pause"); return 0; }Dlaczego macierz trzecia nie jest transponowana? Popełniłem jakiś błąd w funkcji trans(), coś z pętlą nie tak? Proszę o pomoc, z góry dziękuję.

[c++] dodanie funkcji transponowania macierzy
Rozpoczęty przez
szewciu
, 20 04 2010 17:39
Brak odpowiedzi do tego tematu
#1
Napisano 20 04 2010 - 17:39
Mam następujący kod:
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych