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;
    }
    

  • Mod

    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.


Anmelden zum Antworten