009
23.11.2008, 13:33 Uhr
KFC Embryo
Ein Huhn
|
Hi,
genau das war mein Problem. Schon ein wenig komisch dass die "Werte" aussahen wie Adressen.
Nun ja ich habe noch ein kleines Probleme. Ich versuche es einmal zu erläutern. Um die Methoden in der main() aufrufen zu können ist es notwendig ein Objekt zu erstellen.
Objekt erstellen: Matrix M1 Methode aufrufen: M1.Methode
Ich hab jetzt das Problem, dass ich im Konstruktor die Größe der Matrize generiere bzw. den Speicherplatz dafür frei mache, dynamisch versteht sich.
Das möchte ich allerdings dahingehend ändern, dass der Speicherplatz immer erst bei dem Aufruf einer Methode freigegeben wird. Damit man die Größe bei jeder Option die man wählt neu generieren kann sonst könnte man ja immer nur mit einer bestimmt großen Matrize arbeiten, in allen 3 Fällen.
Allerdings fragt er mich nach der Anzahl der Zeilen und Spalten immer auch dann wenn ich den Konstruktor aufrufe, ist dort ja so vereinbart. Das möchte ich nicht.
@whoo: Das bei einer Multiplikation die zu multiplizierende Matrizen nur gleich groß sind will ich damit sicher stellen das man genau die Größe einer Matrize eingibt diese aber 2mal initialisiert damit ist sicher gestellt das der Anwender gar nicht erst die Möglichkeit hat eine nicht berechenbare Matrize einzugeben.
So hier dann mal der Code:
Die matrix.h
Code: |
#ifndef _Matrix_ #define _Matrix_
class Matrix{ private: long zeilen; long spalten; long **matrix3; long **matrix; public: void transponieren(); void skalar(); void multiplikation(); void init(); Matrix(); ~Matrix(); };
#endif
|
Die matrix.cpp
Code: |
#include <iostream> #include "matrix.h"
using namespace std;
Matrix::Matrix(){ cout << "Bitte Anzahl der Zeilen angeben: "; cin >> zeilen; cout << endl; cout << "Bitte Anzahl der Spalten angeben: "; cin >> spalten; cout << endl; long c = spalten*zeilen; matrix = new long*[spalten*zeilen]; for(int i=0; i<c; i++){ matrix[i] = new long[spalten*zeilen]; }
matrix3 = new long*[spalten*zeilen]; for(int i=0; i<c; i++){ matrix3[i] = new long[spalten*zeilen]; }
for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ matrix3[i][j] = 0; } } }
void Matrix::init(){
int k; for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ cout << "Bitte den Wert an der stelle " << i <<"." << j << " angeben: "; cin >> k; cout << endl; matrix[i][j] = k; } }
for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ cout << matrix[i][j]; } cout << endl; } cout << endl; }
void Matrix::multiplikation(){ Matrix M1; Matrix M2;
M1.init(); M2.init(); for(int i=0; i < zeilen; i++){ for(int j = 0; j < spalten; j++){ for (long k = 0; k < spalten; k++){ matrix3[i][j] += M1.matrix[i][k] * M1.matrix[k][j]; } } }
cout << "Die Multiplikation 2er Matrizen: " << endl; for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ cout << matrix3[i][j]; } cout << endl; } cout << endl;
for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ matrix3[i][j] = 0; } } }
void Matrix::skalar(){
long n; long c = spalten*zeilen; cout << "Bitte Anzahl der Zeilen angeben: "; cin >> zeilen; cout << endl; cout << "Bitte Anzahl der Spalten angeben: "; cin >> spalten; cout << endl; matrix = new long*[spalten*zeilen]; for(int i=0; i<c; i++){ matrix[i] = new long[spalten*zeilen]; } init(); cout << "Bitte den Skalar Wert angeben: "; cin >> n; cout << endl; for(int i=0; i < zeilen; i++){ for(int j = 0; j < spalten; j++){ matrix3[i][j] += matrix[i][j] * n; } } cout << "Die Multiplikation der Matrix mit einem Skalar: " << n << endl; for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ cout << matrix3[i][j]; } cout << endl; } cout << endl;
for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ matrix3[i][j] = 0; } } }
void Matrix::transponieren(){ long c = spalten*zeilen; cout << "Bitte Anzahl der Zeilen angeben: "; cin >> zeilen; cout << endl; cout << "Bitte Anzahl der Spalten angeben: "; cin >> spalten; cout << endl; matrix = new long*[spalten*zeilen]; for(int i=0; i<c; i++){ matrix[i] = new long[spalten*zeilen]; } init();
for(int i=0; i < zeilen; i++){ for(int j = 0; j < spalten; j++){ matrix3[i][j] += matrix[i][j] * (-1); } }
cout << "Die Matrix Transponieren: " << endl; for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ cout << matrix3[i][j]; } cout << endl; } cout << endl;
for(int i=0; i<zeilen;i++){ for(int j=0; j<spalten;j++){ matrix3[i][j] = 0; } } }
Matrix::~Matrix(){
delete []matrix; delete []matrix3; }
|
Die main.cpp
Code: |
#include <iostream> #include "matrix.h"
using namespace std;
int main(){ Matrix M1; int e=0; start: cout << "Bitte wählen: " << endl; cout << "1. Matrizen Multiplikation " << endl; cout << "2. Matrix mit Skalar multiplizieren" << endl; cout << "3. Matrix Transponieren" << endl; cout << "4. Ende" << endl; cout << "Bitte Auswahl eingeben: "; cin >> e; cout << endl; if(e==1){ M1.multiplikation(); goto start; }else if(e==2){ M1.skalar(); goto start; }else if(e==3){ M1.transponieren(); goto start; }else if(e==4){ cout << "Programm wird beendet...." << endl; goto END; }else{ cout << "Falsche Eingabe" << endl; } END:
return 0; }
|
Sorry für die Aufsätze die ich immer schreibe ;-)
Danke. Gruß -- An nescis, mi fili, quantilla prudentia mundus regatur? |