Matrizen addieren
-
Hallöchen,
Ich hab hier ein Programm geschrieben, das zwei Matrizen Addieren soll.
Bei der Funktion init_matrix sollen die Werte einmal mit (matrix_1 = 1, 2, 3, ..., MAX_X * MAX_Y)
und bei der zweiten Matrix mit (matrix_2 = MAX_X * MAX_Y, ..., 3, 2, 1) initialisiert werden. Ich steh
da gerade auf dem Schlauch. Wie schaffe ich es, dass die zweite Matrix in umgekehrter Reihenfolge ausgegeben wird??Hier mein Code:
// Programm zur komponentenweisen Addition zweier (M x N)-Matrizen #include "stdafx.h" #include <stdio.h> // Definition der Matrix-Grenzen MAX_X = 15 und MAX_Y = 10 #define MAX_X 15 // Zeile (X-Achse) #define MAX_Y 10 // Spalte (Y-Achse) void init_matrix(int *x, int max_x, int max_y); void print_matrix(int *x, int max_x, int max_y); int add_matrix(int *matrix_1, int *matrix_2, int *matrix_3, int max_x, int max_y); // Funktion print_matrix, Ausgabe der Matrizen void print_matrix(int *x, int max_x, int max_y) { int i, j; for(i = 0; i < max_x; i++) { for(j = 0; j < max_y; j++) { printf(" %3d", *(x + (i * max_y) + j)); } printf("\n"); } } // Funktion add_matrix(), Addition beider Matrizen int add_matrix(int *matrix_1, int *matrix_2, int *matrix_3, int max_x, int max_y) { int i, j; for(i = 0; i < max_x; i++) { for(j = 0; j < max_y; j++) { *(matrix_3 + (i * max_y) + j) = *(matrix_1 + (i * max_y) + j) + *(matrix_2 + (i * max_y) + j); } } return 0; } void init_matrix(int *x, int max_x, int max_y) { // Initialisierung beider Matrizen mit den Werten // (matrix_1 = 1, 2, 3, ..., MAX_X * MAX_Y matrix_2 = MAX_X * MAX_Y, ..., 3, 2, 1) int matrix_3 = 1; int i, j; for(i = 0; i < max_x; i++) { for(j = 0; j < max_y; j++) { *(x + (i * max_y) + j) = matrix_3; matrix_3++; } } } int main() { // Test int matrix_1[MAX_X][MAX_Y], matrix_2[MAX_X][MAX_Y], matrix_3[MAX_X][MAX_Y]; // Matrizen initialisieren und mit Werten füllen init_matrix(&matrix_1[0][0], MAX_X, MAX_Y); init_matrix(&matrix_2[0][0], MAX_X, MAX_Y); // Matrizen "matrix_1" und "matrix_2" addieren und in "matrix_3" schreiben add_matrix(&matrix_1[0][0], &matrix_2[0][0], &matrix_3[0][0], MAX_X, MAX_Y); // Ausgabe der Matrizen "matrix_1", "matrix_2" und "matrix_3" printf("Matrix 1:\n\n"); print_matrix(&matrix_1[0][0], MAX_X, MAX_Y); printf("\nMatrix 2:\n\n"); print_matrix(&matrix_2[0][0], MAX_X, MAX_Y); printf("\nErgebnis der Addition:\n\n"); print_matrix(&matrix_3[0][0], MAX_X, MAX_Y); getchar(); return 0; }
-
Das Einfachste wäre, dir noch eine Funktion zu schreiben, die Matrizen rückwärts ausgibt. Einfach gleiches Muster wie jetzt, nur umgekehrt.
-
Oder du gibst deinem init_matrix() ein paar Parameter mehr mit.
void init_matrix(int *x, int max_x, int max_y, int start, int step) { int matrix_3 = start; int i, j; for(i = 0; i < max_x; i++) { for(j = 0; j < max_y; j++) { *(x + (i * max_y) + j) = matrix_3; matrix_3 +=step; } } } .... init_matrix(&matrix_1[0][0], MAX_X, MAX_Y, 1, 1); init_matrix(&matrix_2[0][0], MAX_X, MAX_Y, MAX_X * MAX_Y, -1);
So kannst du die Matrix auch leicht mit festen Werten initialisieren (step = 0).
-
SeppJ schrieb:
Das Einfachste wäre, dir noch eine Funktion zu schreiben, die Matrizen rückwärts ausgibt. Einfach gleiches Muster wie jetzt, nur umgekehrt.
thx.. wäre schön, wenn ich eine zweite funktion verwenden dürfte..
nur erlaubt mir das meine studiums hausaufgabe leider nicht.. :xmas1:
-
DirkB schrieb:
Oder du gibst deinem init_matrix() ein paar Parameter mehr mit.
void init_matrix(int *x, int max_x, int max_y, int start, int step) { int matrix_3 = start; int i, j; for(i = 0; i < max_x; i++) { for(j = 0; j < max_y; j++) { *(x + (i * max_y) + j) = matrix_3; matrix_3 +=step; } } } .... init_matrix(&matrix_1[0][0], MAX_X, MAX_Y, 1, 1); init_matrix(&matrix_2[0][0], MAX_X, MAX_Y, MAX_X * MAX_Y, -1);
So kannst du die Matrix auch leicht mit festen Werten initialisieren (step = 0).
thx.. werd ich gleich mal ausprobieren.. :xmas1:
-
12345..6789 schrieb:
thx.. wäre schön, wenn ich eine zweite funktion verwenden dürfte..
nur erlaubt mir das meine studiums hausaufgabe leider nicht.. :xmas1:
Das glaube ich nicht.