Problem mit Übergabe eines 2D-Arrays



  • Hi,
    bin da an nem C Programm was 2 Matrizen addieren soll.
    Habe die 2 Matrizen statisch festgelegt und hab halt 3 Funktionen geschrieben:

    init_matrix();
    add_matrix();
    print_matrix();

    Hab das nun alles mal mit einer Matrize versucht, also anlegen und ausgeben. Nun hab ich das prob,dass ich nicht weiss,wie ich die angelegten Matrize der Funktion print_matrix() richtig übergeben soll damit der sie richtig ausgibt. Bekomme da immer "unbehandelte Ausnahme", weil ich irgendwie für die richtige Formatierung der Matrize eine Berechnung hab die ich net übergeben kann.

    Wenn ich die 2d arrays global deklariere geht es das ist klar aber auch nicht Sinn der Sache.

    Hier mein Code:

    #include <stdio.h>
    
    #define MAX_X 15
    #define MAX_Y 10
    
    int i, j;
    
    int init_matrix();
    int print_matrix();
    int add_matrix();
    
    int main()
    {
    
       int matrix_1[MAX_X] [MAX_Y];
       int matrix_2[MAX_Y] [MAX_X];
       int sum_matrix[MAX_X] [MAX_Y];
    
       init_matrix();
       print_matrix();
    
    return 0;
    }
    
    int init_matrix(int matrix_1[MAX_X] [MAX_Y])
    {
    
    	for (j=0; j < MAX_Y; j++) 
    	{
    		for (i=0; i < MAX_X; i++) 
    		{
    
    			matrix_1[i] [j] = (i + 1) + (MAX_X * j) ;
    
    		}
    	}
    
    return 0;
    }
    
    int add_matrix()
    {
    
              for (i = 0; i < MAX_X; i++) 
              {
    
                    for (j = 0; j < MAX_Y; j++) 
    	      {
                        //        matrix_3[i][j] = matrix_1 [i][j] + matrix_2 [i][j];
                    }
                }
    
    	return 0;
    }
    
    int print_matrix(int matrix_1[i] [j])
    {
    
    	for (j=0; j < MAX_Y; j++)
             {
    		for (i=0; i < MAX_X; i++)
                       {
    			printf("%3d ",matrix_1[i] [j] );
    		}
    		printf("\n");
    	}
    
       return 0;
    }
    


  • #include <stdio.h>
    
    #define MAX_X 15
    #define MAX_Y 10
    
    int i, j;
    
    int init_matrix(int matrix[MAX_X][MAX_Y]); 
    int print_matrix(int matrix[MAX_X][MAX_Y]);
    int add_matrix(int matrix[MAX_X][MAX_Y]);
    
    int main()
    {
    
       int matrix_1[MAX_X] [MAX_Y];
       int matrix_2[MAX_Y] [MAX_X];
       int sum_matrix[MAX_X] [MAX_Y];
    
       init_matrix(matrix_1);
       print_matrix(matrix_1);
    
    return 0;
    }
    
    int init_matrix(int matrix[MAX_X][MAX_Y])
    {
    
        for (j=0; j < MAX_Y; j++)
        {
            for (i=0; i < MAX_X; i++)
            {
    
                matrix[i] [j] = (i + 1) + (MAX_X * j) ;
    
            }
        }
    
    return 0;
    }
    
    int add_matrix()
    {
    
              for (i = 0; i < MAX_X; i++)
              {
    
                    for (j = 0; j < MAX_Y; j++)
              {
                        //        matrix_3[i][j] = matrix_1 [i][j] + matrix_2 [i][j];
                    }
                }
    
        return 0;
    }
    
    int print_matrix(int matrix[MAX_X][MAX_Y])
    {
    
        for (j=0; j < MAX_Y; j++)
             {
            for (i=0; i < MAX_X; i++)
                       {
                printf("%3d ",matrix[i][j] );
            }
            printf("\n");
        }
    
       return 0;
    }
    

    Hast bestimmt noch fragen dazu oder???



  • Hi!!
    Danke für den Tipp.. hab ich heute morgen selber rausgefunden 😉
    aber nun gibt er die Matrix falsch aus. Ich will 15 Zeilen und 10 Spalten, hab aber nu bei der Ausgabe 15 Zeilen und 10 Spalten.

    Ja Frage schon: Warum brauchen die Funktionen 2 mal einen Übergabewert?

    Danke für Hilfe.



  • Noch ein Nachtrag:

    hab ja 2 Matrizen.
    Wenn ich jetzt matrix_1[MAX_Y] [MAX_X] noch an die Funktionen übergebe...kommt wieder die unbehandelte Ausnahme. Hab ich was übersehen?

    #include <stdio.h>
    
    #define MAX_X 15
    #define MAX_Y 10
    
    int init_matrix();
    int print_matrix();
    int add_matrix();
    
    int main()
    {
    
       int matrix_1[MAX_X ] [MAX_Y];
       int matrix_2[MAX_Y] [MAX_X];
       int sum_matrix[MAX_X] [MAX_Y];
    
       init_matrix(matrix_1);
    	init_matrix(matrix_2);
    
      printf("\nAusgabe der ersten Matrix:\n\n");
       print_matrix(matrix_1);
    
       print_matrix(matrix_2);
    
    return 0;
    }
    
    int init_matrix(int matrix_1[MAX_X] [MAX_Y], int matrix_2[MAX_Y] [MAX_X])
    {
    	int i,j;
    	for (j=0; j < MAX_Y; j++) 
    	{
    		for (i=0; i < MAX_X; i++) 
    		{
    			matrix_1[i] [j] = (i + 1) + (MAX_X * j) ;
    		}
    	}
    
                      for (j=0; j < MAX_Y; j++) 
    		{
    		for (i=0; i < MAX_X; i++) 
    		{
    			matrix_2[i][j] = MAX_X * MAX_Y - (i + (MAX_X * j));
    		}
    	}
    return 0;
    }
    
    int add_matrix()
    {
    
        	int i,j;
              for (i = 0; i < MAX_Y; i++) 
              {
    
                    for (j = 0; j < MAX_X; j++) 
    	      {
                        //        matrix_3[i][j] = matrix_1 [i][j] + matrix_2 [i][j];
                    }
                }
    
    	return 0;
    }
    
    int print_matrix(int matrix_1[MAX_X] [MAX_Y], int matrix_2[MAX_Y] [MAX_X])
    {
    	int i,j;
    	for (j=0; j < MAX_Y; j++)
             {
    		for (i=0; i < MAX_X; i++)
                       {
    			printf("%3d ",matrix_1[i] [j] );
    		}
    
    		printf("\n");
    	}
    
    	for (j=0; j < MAX_Y; j++) 
    	{
    		for (i=0; i < MAX_X; i++) 
    		{
    			printf("%3d ",matrix_2[i][j]);
    		}
    		printf("\n");
    	}
    
       return 0;
    }
    


  • Noch ein Nachtrag:

    hab ja 2 Matrizen.
    Wenn ich jetzt matrix_1[MAX_Y] [MAX_X] noch an die Funktionen übergebe...kommt wieder die unbehandelte Ausnahme. Hab ich was übersehen?

    #include <stdio.h>
    
    #define MAX_X 15
    #define MAX_Y 10
    
    int init_matrix();
    int print_matrix();
    int add_matrix();
    
    int main()
    {
    
       int matrix_1[MAX_X ] [MAX_Y];
       int matrix_2[MAX_Y] [MAX_X];
       int sum_matrix[MAX_X] [MAX_Y];
    
       init_matrix(matrix_1);
    	init_matrix(matrix_2);
    
      printf("\nAusgabe der ersten Matrix:\n\n");
       print_matrix(matrix_1);
    
       print_matrix(matrix_2);
    
    return 0;
    }
    
    int init_matrix(int matrix_1[MAX_X] [MAX_Y], int matrix_2[MAX_Y] [MAX_X])
    {
    	int i,j;
    	for (j=0; j < MAX_Y; j++) 
    	{
    		for (i=0; i < MAX_X; i++) 
    		{
    			matrix_1[i] [j] = (i + 1) + (MAX_X * j) ;
    		}
    	}
    
                      for (j=0; j < MAX_Y; j++) 
    		{
    		for (i=0; i < MAX_X; i++) 
    		{
    			matrix_2[i][j] = MAX_X * MAX_Y - (i + (MAX_X * j));
    		}
    	}
    return 0;
    }
    
    int add_matrix()
    {
    
        	int i,j;
              for (i = 0; i < MAX_Y; i++) 
              {
    
                    for (j = 0; j < MAX_X; j++) 
    	      {
                        //        matrix_3[i][j] = matrix_1 [i][j] + matrix_2 [i][j];
                    }
                }
    
    	return 0;
    }
    
    int print_matrix(int matrix_1[MAX_X] [MAX_Y], int matrix_2[MAX_Y] [MAX_X])
    {
    	int i,j;
    	for (j=0; j < MAX_Y; j++)
             {
    		for (i=0; i < MAX_X; i++)
                       {
    			printf("%3d ",matrix_1[i] [j] );
    		}
    
    		printf("\n");
    	}
    
    	for (j=0; j < MAX_Y; j++) 
    	{
    		for (i=0; i < MAX_X; i++) 
    		{
    			printf("%3d ",matrix_2[i][j]);
    		}
    		printf("\n");
    	}
    
       return 0;
    }
    


  • Ich hab jetzt nich so viel Zeit um das mal alles durchzugucken, aber guck dir mal die Zeilen 6-8 an. In den Funktions-Prototypen müssen die Datentypen der Parameter auch angeben werden, sonst stimmt das nicht mit den eigentlichen Funktionsdefinitionen nicht überein...


Log in to reply