Skocz do zawartości


Zdjęcie

[c++] dodanie funkcji transponowania macierzy


  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 szewciu

szewciu

    Nowy

  • 1 postów

Napisano 20 04 2010 - 17:39

Mam następujący kod:
#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ę.

  • 0

Zobacz więcej tematów z tagiem: język C++



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych