Berechnung im Array?

1 Antwort

Von Experte Erzesel bestätigt

Ein zweidimensionales Array ist im Prinzip ein Array, welches selbst Arrays beinhaltet.

Beispiel:

int matrix[3][4] = {
  { 1, 2, 3, 4 },
  { 5, 6, 7, 8 },
  { 9, 10, 11, 12 }
};

Dieses Array beinhaltet drei Arrays. Jedes dieser drei Arrays beinhaltet Zahlen.

Um nun beispielsweise den Durchschnittswert der Zahlen des ersten inneren Arrays zu berechnen, musst du zuerst auf das erste innere Array zugreifen können. Erst danach kannst du dessen Elemente durchlaufen.

int numberOfColumns = 4;
float sum = 0;

for (int column = 0; column < numberOfColumns; ++column)
{
  sum += matrix[0][column];
}

float average = sum / numberOfColumns;
printf("Der Durchschnitt von Zeile 1 ist %f\n", average);

Dieser Snippet rechnet also erst die Zahlen 1, 2, 3 und 4 zusammen. Im Anschluss wird der Mittelwert berechnet. Der kann erst ermittelt werden, sobald die Summe der Zahlen bekannt ist, also nach Durchlauf der Schleife.

Bei deinem Programm ist aber noch mehr gefordert. Der Durchschnitt für jedes innere Array (= aller Zeilen) soll ermittelt werden. Du könntest das lösen, in dem du den obigen Code dreimal nacheinander schreibst und jeweils nur den Index anpasst, mit dem das innere Array bestimmt wird, auf welches zugegriffen werden soll.

// for first row
sum += matrix[0][column];

// for second row
sum += matrix[1][column];

// for third row
sum += matrix[2][column];

Eine Schleife erspart diesen Schreibaufwand. Sollte das Array je verändert werden, brauchst du nur wenige Änderungen am Code durchführen, um die Funktionalität zu erhalten.

Statt einem konstanten Wert für den Zeilenindex, wird nun der Schleifenzähler eingesetzt.

int numberOfRows = 3;
int numberOfColumns = 4;

for (int row = 0; row < numberOfRows; ++row)
{
  float sum = 0;
  
  for (int column = 0; column < numberOfColumns; ++column)
  {
    sum += matrix[row][column];
  }
  
  float average = sum / numberOfColumns;
  printf("Der Durchschnitt von Zeile %d ist %f\n", row + 1, average);
}