Probleme mit Array
-
Hallo,
ich soll mal wieder ein kleines Programm in C für die FH schreiben.
Es sollen zwei Matrizen die maximal 5X5 groß seien sollen miteinander multipliziert werden. Der Bentzer soll halt die Dimension der beiden Matrizen eingeben dann die Werte und dann soll die Ergebnismatrix ausgegeben werden.
Mein Problem ist nun die Größe des Arrays festzulegen für die Matrix.
Man kann ja leider in C nicht zur Lufzeit festlegen wie groß das Array werden soll, wie kann ich das lösen das, wenn der Benutzer eine 2X3 Matrix haben will er die auch bekommt?
Ich hoffe ihr versteht mein Problem
In der FH wurde mir heute nur noch Zeiger an den Kopf geknallt
-
Hiho,
Das sollte dir weiterhelfen können:
http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_016_000.htm#Xxx999328mFg
-
mlc-hamster schrieb:
Man kann ja leider in C nicht zur Lufzeit festlegen wie groß das Array werden soll, wie kann ich das lösen das, wenn der Benutzer eine 2X3 Matrix haben will er die auch bekommt?
Du musst dann den Speicer mit man: malloc(3) dynamisch reservieren, z.b:
int **create_matrix(int spalten, int zeilen) { int i, **matrix; matrix = malloc(sizeof(int*) * zeilen); if(matrix == NULL) return NULL; for(i=0; i < zeilen; ++i) matrix[i] = NULL; /* Hilfsmittel bei der Freigabe ;) */ for(i=0; i < zeilen; ++i) { matrix[i] = malloc(sizeof(int) * spalten); if(matrix[i] == NULL) { free_matrix(matrix, zeilen); return NULL; } } return matrix; } void free_matrix(int **matrix, int zeilen) { int i; for(i=0; i < zeilen; ++i) { free(matrix[i]); } free(matrix); }
Dann kannst du sowas machen
int **matrix = create_matrix(2, 3); matrix[0][2] = 7; /* setze Werte an der Stelle 0 x 2 */ matrix[1][2] = 8; /* setze Wert an der Stelle 1 x 2 */ free_matrix(matrix, 2);
Eine andere Möglichkeit wäre z.B. die Matrix 1-dimensional darzustellen:
#define INDEX(anz_spalten, zeile, spalte) (zeile*anz_spalten+spalte) int zeilen = 2, spalten = 3; int *matrix = malloc(sizeof(int)* zeilen * spalten); if(matrix == NULL) { FEHLER BEHANDLUNG } matrix[INDEX(spalten, 0, 2)] = 7; /* setze Werte an der Stelle 0 x 2 */ matrix[INDEX(spalten, 1,2)] = 8; /* setze Wert an der Stelle 1 x 2 */ ... free(matrix);
-
Wenn die Matrizen max. 5x5 groß sein sollen, dann kannst du auch ein statisches Array nehmen und zusätzlich die Anzahl der Spalten und Zeilen speichern:
#define MAXMATRIX 5 struct Matrix { double matrix[MAXMATRIX][MAXMATRIX]; int nSpalten, nZeilen; };
-
Th schrieb:
Wenn die Matrizen max. 5x5 groß sein sollen, dann kannst du auch ein statisches Array nehmen und zusätzlich die Anzahl der Spalten und Zeilen speichern:
#define MAXMATRIX 5 struct Matrix { double matrix[MAXMATRIX][MAXMATRIX]; int nSpalten, nZeilen; };
Daran hatte ich auch schon gedacht
Sonst aber erstmal vielen Dank werds dann dieses WE mal probieren (*ichhasseC* :))