Übergabe einer Matrix an eine Funktion
-
Hallo, wie der Titel bereits sagt, möchte ich eine Funktion schreiben, welche Matrizen als Argument bekommt, konkret: matrizenmultiplikation(A, B).
Nun weiß ich leider nicht, wie ich A und B definieren soll und wie ich diese Funktion aufrufen kann, damit es klappt. Wäre froh, wenn mir jemand weiterhelfen könnte.
mfG,
Matthias
-
Nabend,
MatthiasK schrieb:
Hallo, wie der Titel bereits sagt, möchte ich eine Funktion schreiben, welche Matrizen als Argument bekommt, konkret: matrizenmultiplikation(A, B).
Nun weiß ich leider nicht, wie ich A und B definieren soll und wie ich diese Funktion aufrufen kann, damit es klappt. Wäre froh, wenn mir jemand weiterhelfen könnte.
mfG,
Matthiasnehmen wir einmal an, du hast eine Klasse "Matrix", welche eine NxM-Matrix darstellt, dann sieht die
Signatur deiner Funktion z. B. folgendermassen aus:Matrix matrizenmultiplikation(const Matrix& a, const Matrix& b);mfg
v R
-
wenn du gerade am C++ lernen bist, dann kannst du dir gleich auch mal Operator Überladung angucken

dann kannst du so etwas Schreiben
M = A * B;google einfach mal danach bzw. guck in einem Buch nach
-
Danke erstmal, aber ich habe noch Fragen! Ich denke mal, eine kleine Klasse schreiben könnte ich mittlerweile, aber ich will hier was über Arrays lernen, was ich offensichtlich noch nicht weiß:
Ich möchte mein Ziel nämlich am liebsten folgendermaßen erreichen:void matrizenmultiplikation(? A,? B,? C, int k, int l, int m) { ... } int main() { int k = ..., l = ..., m = ...; double A[k][l] = ...; double B[l][m] = ...; double C[k][m]; matrizenmultiplikation(? A, ? B, ? C, k, l, m); return 0; }Kann ich das auf diese Art irgendwie hinkriegen?
mfG,
Matthias
-
kauf dir ein anständiges C++ Buch

aus dem C/C++ Kompendium:
"Wenn Sie aber eine generische Funktion programmieren wollen, die zweidimensionale Arrays mit beliebiger Anzahl von Elementen pro Dimension akzeptieren soll, müssen Sie
1. die Anzahl der Elemente pro Dimension irgendwie als Parameter an die Funktion übergeben,
2. das Array von Arrays (double [][]) in ein Array von Zeigern (int * []) umwandeln. Dieses kann man dann als Zeiger auf Zeiger (int **) übergeben.#include <iostream> using namespace std; int feld[20][4]; int *ptr[20]; void func(int **feld, int d1, int d2) { int i, j; for(i = 0; i < d1; i++) for(j = 0; j < d2; j++) { feld[i][j] = 23; } } int main() { int i; // Array ptr mit Zeigern auf Unter-Arrays initialisieren for(i=0; i<20; i++) ptr[i] = feld[i]; func(ptr,20,4); for(int x = 0; x < 20; x++) for(int y = 0; y < 4; y++) cout<<feld[x][y]<<endl; system("pause"); }"
Mach dir das Leben einfach leichter und definier eine Matrix einfach als eindimensionales Array - Beispiel:
http://turing.fh-landshut.de/~jamann/MatrixHtml/_matrix_8h-source.html
(kannst gleich noch etwas über Template lernen ;))
-
Am einfachsten ist es, wenn man in ner OO Sprache das als Klasse realisiert.
Ich persönlich hätte jetzt auch erst nachschlagen müssen um zu schauen wie ich beliebig große Arrays übergebe, aber andererseits ist das auch so gut wie nie notwendig.
Nen 2D Array ist bei mir vector< vector< Typ > >.
-
Vielen Dank, damit bin ich jetzt endgültig zufrieden.

-
nope. bastel dir einen generischen wrapper um vector<type>!