Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Matrizenrechnung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.01.2008, 01:51 Uhr
Krawall



Moin, sollen nen Programm für Matrizenberechnung schreiben, hab versucht alle Vorgaben in das Programm reinzuschreiben soweit ich das mit meinem Wissen konnte. Wollte nun erstmal kompiliern, fehler entfernen etc um es überhaupt mal zum laufen zu kriegen um zu sehn wo denkfehler sind etc, aber nun sitz ich hier seit fast ner halben stunde an der selben stelle und komm einfach nicht drauf...hilfe wäre nett. (wenn lust/zeit da ist, wäre es auch nett wenn einer mal grob drüberschaut und etwaige entdeckte denkfehler mitteilt) thx

ps...ja ich weiss die fehlermeldungen zeigen mir triviale fehler auf, aber ich kriegs net gebacken...irgendwie steh ich da aufm schlauch. n und m sollte der ja eigentlich kennen bzw auf "feld" sollte er zugreifen können, weil die friend funktion ja auf die klasse zugreifen kann.
das mit dem =-operator versteh ich auch nciht so ganz (bzw die funktion dafür ist auch noch nicht fertig gestellt)

code:


C++:

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;




class Matrix
    {
        private:
             int m;
             int n;
             double** feld;
        public:
            void mMatrix(int ndim, int mdim);
            ~Matrix();
            Matrix& operator = (Matrix& X);
            Matrix operator + (Matrix& X);
            Matrix operator * (Matrix& X);
            void transp(Matrix& C);
            friend istream& operator >> (istream& is, Matrix& X);
            friend ostream& operator << (ostream& os, Matrix& X);

            
    };


void Matrix::mMatrix(int ndim, int mdim) {
    n=ndim+1;
    m=mdim+1;
    feld = new double* [n];
    for (int i=0;i<n;i++) { feld[i] = new double [m]; }
    for (int j=0; j<n; j++) {
        for (int j=0; j<m; j++) {
            feld[i][j] = 0;
            }
        }
    }

    
Matrix::~Matrix() {
        for(int i=0; i<n; i++)
        {
        delete [] feld[i];
        
        }
    delete [] feld;
    }



istream& operator >> (istream& is, Matrix& X)
{

for (int i=1; i<n+1; i++)  {
    for (int j=1; j<m+1; j++) {
        is >> X.feld[i][j];
        }
    }
return is;
}

ostream& operator << (ostream& os, Matrix& X)
{

for (int i=1; i<n+1; i++)  {
    for (int j=1; j<m+1; j++) {
        os << setw(5) << X.feld[i][j];
                }
}

return os;
}


Matrix Matrix&::operator = (Matrix& X) {    
    return *this;
}



Matrix Matrix::operator + (Matrix& A) {
if(n==B.n && m==B.m) {
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            C.feld[i][j] = feld[i][j] + B.feld[i][j];
            }
        }
    } else {
        cout << "Matrizen haben nicht dieselbe Groesse" << endl;
    }
}

Matrix Matrix::operator * (Matrix& A) {
if (m == B.n) {
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            for (int k=0; k<n; k++) {
                C.feld[i][j] += feld[i][k] * B.feld[k][j];
                }
            }
        }
    } else {
        cout << "Dimensionen passen nicht zusammen" << endl;
        }
}

void Matrix::transp(Matrix& C) {
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            C.feld[i][j] = feld[j][i];
            }
        }
    }



int main() {
int n;
int m;

cout << "Dimensionen der 1. Matrix?" << endl;
cout << "Zeilenlaenge n: " << endl;
cin >> n;
cout << "Spaltenlaenge m: " << endl;
cin >> m;

Matrix A,B,C,D,E,F;
A.mMatrix(n,m);


cout << "Dimensionen der 2. Matrix?" << endl;
cout << "Zeilenlaenge n: " << endl;
cin >> n;
cout << "Spaltenlaenge m: " << endl;
cin >> m;


B.mMatrix(n,m);


cout << A; endl;
cout << B; endl;



C.mMatrix(n,m);
D.mMatrix(n,m);
E.mMatrix(n,m);
F.mMatrix(n,m);


D = A+B;
E = A*B;
F = transp(A);


cout << "\n\n" << endl;
cout << D; endl;
cout << E; endl;
cout << F; endl;


return 0;
}





errorlog:

--------------------Configuration: Matrixklasse - Win32 Debug--------------------
Compiling...
Matrixklasse.cpp
Matrixklasse.cpp(58) : error C2065: 'n' : undeclared identifier
Matrixklasse.cpp(59) : error C2065: 'm' : undeclared identifier
\Matrixklasse.cpp(60) : error C2248: 'feld' : cannot access private member declared in class 'Matrix'
CDokumente und Einstellungen\rita\Desktop\Matrixklasse.cpp(16) : see declaration of 'feld'
\Matrixklasse.cpp(71) : error C2248: 'feld' : cannot access private member declared in class 'Matrix'
Matrixklasse.cpp(16) : see declaration of 'feld'
Matrixklasse.cpp(79) : error C2143: syntax error : missing ';' before '&'
Matrixklasse.cpp(79) : error C2039: '=' : is not a member of '`global namespace''
Matrixklasse.cpp(79) : error C2061: syntax error : identifier 'Matrix'
Matrixklasse.cpp(79) : error C2501: '=' : missing storage-class or type specifiers
Matrixklasse.cpp(80) : error C2673: '=' : global functions do not have 'this' pointers
Matrixklasse.cpp(80) : warning C4508: '=' : function should return a value; 'void' return type assumed
Matrixklasse.cpp(85) : error C2143: syntax error : missing ';' before 'tag::id'
Matrixklasse.cpp(85) : error C2501: 'Matrix' : missing storage-class or type specifiers
Matrixklasse.cpp(85) : error C2371: 'Matrix' : redefinition; different basic types
Matrixklasse.cpp(79) : see declaration of 'Matrix'
Matrixklasse.cpp(85) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

Matrixklasse.exe - 13 error(s), 1 warning(s)

Dieser Post wurde am 20.01.2008 um 01:54 Uhr von Krawall editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2008, 16:58 Uhr
Kest
saint


Hi!

So in die Richtung

C++:
#include <iostream>
#include <iomanip>
using namespace std;




class Matrix
    {
        private:
             int m;
             int n;
             double** feld;

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

            Matrix& operator+=(const Matrix&);
            Matrix& operator*=(const Matrix&);

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


Matrix::Matrix(int ndim, int mdim)
: n(ndim), m(mdim)
{
    feld = new double*[n];

    for (int i=0; i<n; i++)
        feld[i] = new double[m];

    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            feld[i][j] = 0;
}


Matrix::Matrix(const Matrix& X)
: n(X.n), m(X.m)
{
    feld = new double*[n];

    for (int i=0; i<n; i++)
        feld[i] = new double[m];

    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            feld[i][j] = X.feld[i][j];
}



Matrix& Matrix::operator=(const Matrix& X){
    if(&X != this){
        // umkopieren, vorher Felder freigeben, dann neu belegen
    }
    return *this;
}



Matrix::~Matrix(){
    for(int i=0; i<n; i++)
        delete[] feld[i];

    delete[] feld;
}



istream& operator>> (istream& is, Matrix& X){
    for (int i=0; i<X.n; i++)
        for (int j=0; j<X.m; j++){
            //std::cout << "[" << i << "][" << j << "] : "; //i+1, j+1 wenn übersichtlicher
            is >> X.feld[i][j];
        }

    return is;
}

ostream& operator<< (ostream& os, const Matrix& X){
    for (int i=0, z=0; i<X.n; i++)
        for (int j=0; j<X.m; j++){
            if(z<i){
                os << endl;
                z=i;
            }
            os << setw(8) << X.feld[i][j];
        }

    return os;
}


Matrix& Matrix::operator+=(const Matrix& X){
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            feld[i][j] += X.feld[i][j];

    return *this;
    //aber darauf achten, dass "n" und "m" sich unterscheiden können !!!!
}

Matrix& Matrix::operator*=(const Matrix& X){
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            feld[i][j] *= X.feld[i][j];

    return *this;
    //aber darauf achten, dass "n" und "m" sich unterscheiden können !!!!
}




Matrix operator+(const Matrix& a, const Matrix& b){
    Matrix _t(a);
    return _t+=b;
}

Matrix operator*(const Matrix& a, const Matrix& b){
    Matrix _t(a);
    return _t*=b;
}

int main()
{
    int n;
    int m;


    cout << "Dimensionen der 1. Matrix?" << endl;
    cout << "Zeilenlaenge n: ";
    cin >> n;
    cout << "Spaltenlaenge m: ";
    cin >> m;

    Matrix A(n, m);
    cin >> A;

    Matrix  B(n, m);
    cin >> B;

    cout << endl;
    cout << A << endl << endl;
    cout << B << endl << endl;
    cout << A+B << endl << endl;
    
    Matrix C=A*B;
    cout << C;
}


?
Aber soweit ich mich entsinne: >Matrix = m (Zeilen) * n (Spalten)<.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 20.01.2008 um 17:08 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: