Matrixaddition



  • Hallo,

    ich habe zur Übung ein Programm geschrieben, was erstmal eine Matrix einliest und dann entweder eine Skalarmultiplikation oder eine Matrixaddition durchführt (je nach Eingabe). Die Skalarmultiplikation funktioniert problemlos, allerdings stürzt das Programm bei der Matrixaddition ab und ich finde den Fehler leider nicht.
    Es wäre toll, wenn ihr mir helfen könntet.

    Liebe Grüße
    Benja

    #include <stdio.h>
    #define SPALTEN 3
    #define ZEILEN 3

    void Skalarmultiplikation(int feld[][SPALTEN], int multipliziere)
    {
    int x,y;
    int ergmatrix[ZEILEN][SPALTEN];

    for (x=0; x<ZEILEN; x++) {
    for (y=0; y<SPALTEN; y++) {
    ergmatrix[x][y]=multipliziere*feld[x][y];
    }
    }

    /*Nun sollen die Werte der Skalarmultiplikation wieder ausgegeben werden */

    printf("Das Ergebnis der Skalarmultiplikation lautet:\n");
    for (x=0; x<ZEILEN; x++) {
    for (y=0; y<SPALTEN; y++) {

    printf("\t%4d",ergmatrix[x][y]);
    }

    printf("\n");
    }
    }

    void Matrixaddition(int feld1[][SPALTEN],int feld2[][SPALTEN])

    {
    int i,j;
    int ergmatrix2[ZEILEN][SPALTEN];
    for (i=0; i<ZEILEN; i++) {
    for (j=0; j<SPALTEN; j++) {
    ergmatrix2[ZEILEN][SPALTEN]=feld1[i][j]+feld2[i][j];
    }
    }
    /*Ausgabe der Ergebnismatrix*/

    for (i=0; i<ZEILEN; i++) {
    for (j=0; j<SPALTEN; j++) {
    printf("\t%4d",ergmatrix2[i][j]);
    }
    printf("\n");
    }

    }

    int main ()
    {
    int i,j;
    int array[ZEILEN][SPALTEN];

    /* Nun sollen die Arraywerte eingelesen werden*/

    for (i=0; i<ZEILEN; i++) {
    for (j=0; j<SPALTEN; j++) {
    printf("Bitte geben sie den Wert für das Feld [%d][%d] ein:\n",i,j);
    scanf("%d",&array[i][j]);
    }
    }

    /* Nun soll die Matrix wieder ausgegeben werden */

    printf("Zur Überprüfung ihrer Eingabe wird die Matrix nun nochmals ausgegeben.\n");
    for (i=0; i<ZEILEN; i++) {
    for (j=0;j<SPALTEN; j++) {
    printf("\t%4d ",array[i][j]);
    }
    printf("\n");

    }

    /* Welche Operation? */
    int zahl;
    int skalar;
    printf("Bitte geben Sie an, welche Operation durchgeführt werden soll:\n");
    printf("Geben sie eine 1 ein für: Skalarmultiplikation\n Geben Sie eine 2 ein für: Matrixaddition\n");
    scanf("%d",&zahl);

    /*Skalarmultiplikation*/

    if (zahl==1)
    {
    printf("Bitte geben Sie den Skalar an, mit welchem Ihre Matrix multipliziert werden soll:\n");
    scanf("%d",&skalar);
    Skalarmultiplikation(array,skalar);

    }

    /* Matrixaddition*/

    if (zahl==2)
    {
    int i,j;
    int array2[ZEILEN][SPALTEN];
    printf("Bitte geben Sie eine weitere Matrix an:\n");
    for (i=0; i<ZEILEN; i++) {
    for (j=0; j<SPALTEN; j++) {
    printf("Bitte geben sie den Wert für das Feld [%d][%d] ein:\n",i,j);
    scanf("%d",&array2[i][j]);
    }
    }

    printf("Zur Überprüfung ihrer Eingabe wird die Matrix nun nochmals ausgegeben.\n");
    for (i=0; i<ZEILEN; i++) {
    for (j=0;j<SPALTEN; j++) {
    printf("\t%4d ",array2[i][j]);
    }
    printf("\n");

    }

    Matrixaddition(array,array2);

    }

    if (zahl>=3) {
    printf("Ungueltige Eingabe!");
    }

    }


  • Mod

    Benutze die cpp-Tags, dann liest das vielleicht auch jemand durch.

    #include <stdio.h>
    #define SPALTEN 3
    #define ZEILEN 3
    
    void Skalarmultiplikation(int feld[][SPALTEN], int multipliziere)
    {
    	int x,y;
    	int ergmatrix[ZEILEN][SPALTEN];
    
    	for (x=0; x<ZEILEN; x++) {
    		for (y=0; y<SPALTEN; y++) {
    			ergmatrix[x][y]=multipliziere*feld[x][y];
    		}
    	}
    
    	/*Nun sollen die Werte der Skalarmultiplikation wieder ausgegeben werden */
    
    	printf("Das Ergebnis der Skalarmultiplikation lautet:\n");
    	for (x=0; x<ZEILEN; x++) {
    		for (y=0; y<SPALTEN; y++) {
    
    			printf("\t%4d",ergmatrix[x][y]);
    		}
    
    		printf("\n");
    	}
    }
    
    void Matrixaddition(int feld1[][SPALTEN],int feld2[][SPALTEN])
    
    {
    	int i,j;
    	int ergmatrix2[ZEILEN][SPALTEN];
    	for (i=0; i<ZEILEN; i++) {
    		for (j=0; j<SPALTEN; j++) {
    			ergmatrix2[ZEILEN][SPALTEN]=feld1[i][j]+feld2[i][j];
    		}
    	}
    /*Ausgabe der Ergebnismatrix*/
    
    for (i=0; i<ZEILEN; i++) {
    	for (j=0; j<SPALTEN; j++) {
    		printf("\t%4d",ergmatrix2[i][j]);
    	}
    	printf("\n");
    }
    
    }
    
    int main ()
    {
    	int i,j;
    	int array[ZEILEN][SPALTEN];
    
    /* Nun sollen die Arraywerte eingelesen werden*/
    
    	for (i=0; i<ZEILEN; i++) {
    		for (j=0; j<SPALTEN; j++) {
    			printf("Bitte geben sie den Wert für das Feld [%d][%d] ein:\n",i,j);
    			scanf("%d",&array[i][j]);
    		}
    	}
    
    /* Nun soll die Matrix wieder ausgegeben werden */
    
    	printf("Zur Überprüfung ihrer Eingabe wird die Matrix nun nochmals ausgegeben.\n");
    	for (i=0; i<ZEILEN; i++) {
    		for (j=0;j<SPALTEN; j++) {
    			printf("\t%4d ",array[i][j]);		
    		}
    	printf("\n");
    
    	}
    
    /* Welche Operation? */
    	int zahl;
    	int skalar;
    	printf("Bitte geben Sie an, welche Operation durchgeführt werden soll:\n");
    	printf("Geben sie eine 1 ein für: Skalarmultiplikation\n Geben Sie eine 2 ein für: Matrixaddition\n");
    	scanf("%d",&zahl);
    
    /*Skalarmultiplikation*/
    
    	if (zahl==1)
    	{ 
    		printf("Bitte geben Sie den Skalar an, mit welchem Ihre Matrix multipliziert werden soll:\n");
    		scanf("%d",&skalar);
    		Skalarmultiplikation(array,skalar);
    
    	}
    
    /* Matrixaddition*/
    
    	if (zahl==2)
    	{
    		int i,j;
    		int array2[ZEILEN][SPALTEN];
    		printf("Bitte geben Sie eine weitere Matrix an:\n");
    		for (i=0; i<ZEILEN; i++) {
    			for (j=0; j<SPALTEN; j++) {
    				printf("Bitte geben sie den Wert für das Feld [%d][%d] ein:\n",i,j);
    				scanf("%d",&array2[i][j]);
    			}
    		}
    
    		printf("Zur Überprüfung ihrer Eingabe wird die Matrix nun nochmals ausgegeben.\n");
    		for (i=0; i<ZEILEN; i++) {
    			for (j=0;j<SPALTEN; j++) {
    				printf("\t%4d ",array2[i][j]);		
    			}
    			printf("\n");
    
    		}
    
    		Matrixaddition(array,array2);
    
    }
    
    	if (zahl>=3) {
    		printf("Ungueltige Eingabe!");
    	}
    
    }
    


  • Wie wäre es mit

    ergmatrix2[i][j]=feld1[i][j]+feld2[i][j];
    

    statt

    ergmatrix2[ZEILEN][SPALTEN]=feld1[i][j]+feld2[i][j];
    

    Das Element ergmatrix2[ZEILEN][SPALTEN] existiert nicht.

    Diese schöne Formatierung krigst du durch den C/C++ Button unter den 🙂 😃 hin.
    Test markieren und Button drücken.



  • Super 🙂 Danke für die schnelle Antwort.
    Ich werde deinen Tip mit der Formatierung für spätere Fragen beherzigen 🙂
    Gruß
    BEnja


Log in to reply