Forum www.fizykah2.fora.pl Strona Główna www.fizykah2.fora.pl
PW Fizyka H
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy    GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Programy

 
Napisz nowy temat   Odpowiedz do tematu    Forum www.fizykah2.fora.pl Strona Główna -> JP
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
paluchr
Świeży Fizyk
Świeży Fizyk



Dołączył: 26 Lis 2008
Posty: 19
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

Płeć: Mężczyzna

PostWysłany: Wto 0:37, 01 Gru 2009    Temat postu: Programy

No dobra, ja wiem, że to forum ledwie egzystuje ale to nie znaczy, że tak ważny temat jak języki programowania ma być dziewiczo pusty. Bo na ten przykład ja mam problem trochę z tą klasą macierzy, którą Hania zadała do napisania. Program się kompiluje i ładnie się uruchamia ale gdy trzeba użyć przeciążonego operatora + albo operatora = to wysypuje się pamięć... Gdzie może być błąd ? Czy komuś to działa i czy ten ktoś udostępniłby na forum swój program albo chociaż te dwa operatory ? Operatory wczytywania i wypisywania śmigają mi aż miło a te dwa najważniejsze powodują u mnie ból głowy i zgrzytanie zębami.

Oto pliki :

1) matrix.h

#include <iostream>
using namespace std;

class Matrix{

int Size1, Size2; //Size1 to kolumny a Size2 to wiersze
double **V;
static int DefSize, Counter;

public:
Matrix();
Matrix(int);
Matrix(int, int);
Matrix(const Matrix &);
~Matrix();

Matrix& operator=(const Matrix&);
friend Matrix operator+(const Matrix& , const Matrix& );
friend Matrix operator-(const Matrix& , const Matrix& );

friend ostream& operator<<(ostream& out, const Matrix &);
friend istream& operator>>(istream& in, Matrix & );

};

2) matrix.cpp

#include "matrix.h"

int Matrix::DefSize=3;
int Matrix::Counter=0;

Matrix::Matrix(){}

Matrix::Matrix(int size1){

int i;

if(size1<=0){
Size1=DefSize;
}
else Size1=size1;

Size2=size1;

V=new double *[Size1];

for(i=0; i<Size1; i++)
V[i]=new double [Size2];
Counter++;
}

Matrix::Matrix(int size1, int size2){ //Size1 to kolumny a Size2 to wiersze!

int i;

if(size1<=0){
Size1=DefSize;
}
else Size1=size1;

if(size2<=0){
Size2=DefSize;
}
else Size2=size2;

V=new double *[Size1];

for(i=0; i<Size1; i++)
V[i]=new double [Size2];
Counter++;
}

Matrix::Matrix(const Matrix &tmp){

int i, j;

V=new double *[Size1];

for(i=0; i<Size1; i++)
V[i]=new double [Size2];

for(i=0; i<Size1; i++)

for(j=0; j<Size2; j++)

V[i][j]=tmp.V[i][j];
}

Matrix::~Matrix(){

int i;

for(i=0; i<Size1; i++)
delete [] V[i];
delete [] V;

}


Matrix& Matrix::operator=( const Matrix & tmp ){

int i , j;

if ( this != &tmp )
{

for(i=0; i<Size1; i++)
delete [] V[i];
delete []V;
V = 0;

Size1 = V ? tmp.Size1 : 0;
Size2 = V ? tmp.Size2 : 0;

V=new double *[Size1];
for(i=0; i<Size1; i++)
V[i]=new double [Size2];

for(i=0; i<Size1; i++)

for(j=0; j<Size2; j++)

V[i][j]=tmp.V[i][j];
}
return *this;
}


Matrix operator+( const Matrix& a, const Matrix& b ){

int i, j;

if(a.Size1==b.Size1 && a.Size2==b.Size2){

Matrix sum(a.Size1,a.Size2);

for (i=0; i<sum.Size1; i++ )

for(j=0; j<sum.Size2; j++)
{
if ( j < a.Size2 ) sum.V[i][j] = a.V[i][j];
if ( j < b.Size2 ) sum.V[i][j] += b.V[i][j];
}

return sum;
}
else return 0;
}
Matrix operator-(const Matrix& a, const Matrix& b){

int i, j;

if(a.Size1==b.Size1 && a.Size2==b.Size2){

Matrix dif(a.Size1, a.Size2 );


for (i=0; i<dif.Size1; ++i )

for(j=0; j<dif.Size2; j++)
{
if ( j < a.Size2 ) dif.V[i][j] = a.V[i][j];
if ( j < b.Size2 ) dif.V[i][j] -= b.V[i][j];
}

return dif;
}
else return 0;
}

ostream& operator<<(ostream& out, const Matrix & tmp){

int i, j;

for(i=0; i<tmp.Size1; i++){

for(j=0; j<tmp.Size2; j++)

cout<<tmp.V[i][j]<<" ";

cout<<"\n";
}

return out;
}

istream& operator>>( istream& in, Matrix & tmp ){

int i, j;

for(i=0; i<tmp.Size1; i++)

for(j=0; j<tmp.Size2; j++){

cout<<"a["<<i<<"]["<<j<<"]= ";
in>>tmp.V[i][j];
cout<<"\n";
}

return in;
}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.fizykah2.fora.pl Strona Główna -> JP Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin