Witam, jest sobie coś takiego...:
#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 b){ //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);
}
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 b) :MATRIX(a,b) {}
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;
}
Jak do 'tego' dorobić funkcję transponowania macierzy? moje żałosne próby j/w -
void trans(); 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];
}
}
Coś źle zadeklarowałem, podstawiłem, a może pętla nie taka? Z góry dzięki za pomoc