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 3void 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!");
}}
-
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