Hallo zusammen.
Ich soll eine Funktion schreiben, die zu einer gegebenen Matrix die Transponierte bestimmt. Für die Transponierte soll dynamisch Speicher reserviert werden und der Zeiger auf diesen von der Funktion zurückgegeben werden. Die zweite Funktion soll zwei Matrizen(mxn und nxp) multiplizieren. Für die Produktmatrix soll in der Funktion wieder dynamisch Speicher reserviert werden und der Zeiger darauf zurückgegeben werden.
Dann soll alles im Hauptprogramm getestet werden. Es wird mir kein Fehler angezeigt, aber nach dem Einlesen der Matrizen passiert nichts mehr. Die Funktionen allocateMatrix, freematrix, readMatrix und printMatrix habe ich in der Übung entwickelt und sie funktionierten. Diese Funktionen sollten auch weiter verwendet werden.
Wäre für Hilfe sehr dankbar!
Ich soll eine Funktion schreiben, die zu einer gegebenen Matrix die Transponierte bestimmt. Für die Transponierte soll dynamisch Speicher reserviert werden und der Zeiger auf diesen von der Funktion zurückgegeben werden. Die zweite Funktion soll zwei Matrizen(mxn und nxp) multiplizieren. Für die Produktmatrix soll in der Funktion wieder dynamisch Speicher reserviert werden und der Zeiger darauf zurückgegeben werden.
Dann soll alles im Hauptprogramm getestet werden. Es wird mir kein Fehler angezeigt, aber nach dem Einlesen der Matrizen passiert nichts mehr. Die Funktionen allocateMatrix, freematrix, readMatrix und printMatrix habe ich in der Übung entwickelt und sie funktionierten. Diese Funktionen sollten auch weiter verwendet werden.
Wäre für Hilfe sehr dankbar!
C++:
#include <stdio.h>
#include <stdlib.h>
float** allocateMatrix(int m, int n){ //Speicherplatz reservieren
int i;
float **matrix=(float**)calloc(m,sizeof(float*));
for(i=0; i<m; i++){
matrix[i]=(float*)calloc(n, sizeof(float));
}
return matrix;
}
void freeMatrix(float **matrix, int m){ //Speicherplatz freigeben
int i;
for(i=0; i<m; i++){
free(matrix[i]);
}
free(matrix);
}
void readMatrix(float **matrix, int m, int n){ //Matrix eingeben
int i;
int j;
for(i=0; i<m; i++){
for(j=0; j<n;j++){
printf("Element a[%d][%d]: \n", i+1,j+1); //Eingabe des Elementes a an der Stelle i,j
scanf("%f", &matrix[i][j]);
}
}
}
void printMatrix(float **matrix, int m, int n){ //Matrix ausgeben
int i;
int j;
for(i=0; i<m; i++){ //Schleife durch die Zeilen
for(j=0; j<n; j++){ //Schleife durch die Spalten
printf("%.2f\t", matrix[i][j]);
}
printf("\n");
}
}
float** transposeMatrix(float **matrix, int m, int n){
int i;
int j;
float**matrixT;
matrixT=allocateMatrix(n, m); //Speicherplatzreservierung für die transponierte Matrix
for(i=0; i<m; i++){
for(j=0; j<n; j++){
matrixT[j][i]=matrix[i][j]; //Transponieren, Zeilenvektoren als Spaltenvektoren
}
}
return matrixT;
}
float** multiplyMatrices(float **matrix, int m, int n, float **matrix2, int o, int p){
int i;
int j;
int k;
float** matrixM;
if(n!=o){ //Fehler abfangen
printf("Matrizen können nicht multipliziert werden, Spaltenzahl von A stimmt nicht mit Zeilenzahl von B überein.\n");
return 0;
}
else{
matrixM=allocateMatrix(m, p);
for(i=0; i<m; i++){ //Multiplikation von zwei Matrizen
for(j=0; j<p; j++){
matrixM[i][j]=0;
for(k=0; k<n; k++){
matrixM[i][j]=matrixM[i][j]+((matrix[i][k])*(matrix2[k][j]));
}
}
}
return matrixM;
}
}
int main(){
float** M;
float** N;
float** T;
float** P;
int x=0;
while(x!=1 && x!=2){
printf("Was wollen Sie tun? (1) Matrix tranponieren (2) Zwei Matrizen multiplizieren\n"); //Benutzer einscheidet, was er tun möchte
scanf("%d", &x);
}
if(x==1){
M=allocateMatrix(2, 3); //Speicherplatz für M
printf("Bitte M eingeben:\n");
readMatrix(M, 2, 3); //Einlesen von M
T=transposeMatrix(M, 2, 3); //Transponieren von M
printf("M:\n");
printMatrix(M, 2, 3);
printf("T:\n");
printMatrix(T, 3, 2);
freeMatrix(T, 3);
freeMatrix(M, 2);
}
else if(x==2){
M=allocateMatrix(2, 3); //Speicherplatz für M
N=allocateMatrix(3, 5); //Speicherplatz für N
printf("Bitte erste Matrix eingeben:\n");
readMatrix(M, 2, 3); //Einlesen von M
printf("Bitte zweite Matrix eingeben:\n");
readMatrix(N, 3, 5); //Einlesen von N
P=multiplyMatrices(M, 2, 3, N, 3, 5);
printf("M:\n");
printMatrix(M, 2, 3);
printf("N:\n");
printMatrix(N, 3, 5);
printf("P: \n");
printMatrix(P, 2, 5);
freeMatrix(P, 2);
freeMatrix(N, 3);
freeMatrix(M, 2);
}
return 0;
}
Zuletzt bearbeitet: