Variablenfelder (3)

Mehrdimensionale Felder

Felder können auch mehr als eine Dimension aufweisen. Das folgende Programm erzeugt eine Einmaleins-Tabelle und gibt sie anschließend auf dem Bildschirm aus.


public class Felder_4_mehrdimensional {

  public static void main(String[] args) {
    int[][] produkt = new int[21][21];        // Das zweidimensionale Feld "produkt" wird deklariert.

    System.out.println("Großes Einmaleins\n");
    for (int z=0;z<21;z++) {                     // Mit zwei verschachtelten Schleifen
      for (int s=0;s<21;s++) {                   // werden die Produkte von 0 mal 0
        produkt[z][s] = z*s;                     // bis 20 mal 20 berechnet.
      }
    }
    for (int n=1;n<20;n++) {                     // Aus Platzgründen werden nur die
      for (int m=1;m<20;m++) {                   // Ergebnisse von 1 mal 1
        System.out.format("%4d",produkt[n][m]);  // bis 19 mal 19 ausgegeben
      } // (4-stellig formatiert)
      System.out.println(); // Zeilenwechsel nach jeder Zeile
    }
  }
}


Das Pascalsche Dreieck

Als Beispiel für eine nützliche Anwendung eines zweidimensionalen Felds kann das Pascalsche Dreieck dienen:

Sie kennen (hoffentlich) die binomischen Formel (a+b)2 = 1a2 + 2a1b1 +1b2
Für die dritte Potenz lautet die Formel   (a+b)3 = 1a3 + 3a2b1 + 3a1b2 +1b3
und für die vierte Potenz           (a+b)4 = 1a4 +4a3b1 +6a2b2 + 4a1b3 + 1b4

Der französische Mathematiker Blaise Pascal (1623-1662) entdeckte, dass man die rot hervorgehobenen Binomialkoeffizienten mit dem nach ihm benannten Pascal’schen Dreieck ermitteln kann.

Dabei ergibt sich jede Zahl aus der Summe der beiden über ihr stehenden Zahlen.

                   1
                 1   1
               1   2   1
             1   3   3   1
           1   4   6   4   1
         1   5  10  10   5   1
       1   6  15  20  15   6   1
     1   7  21  35  35  21   7   1
   1   8  28  56  70  56  28   8   1   und so weiter

Man kann das Dreieck auch in Form einer Tabelle schreiben. Dann lautet die Regel:
- Schreibe in das erste Feld (Zeile 0, Spalte 0) eine 1.
- Schreibe in die erste Spalte jeder Zeile eine 1
- Schreibe in jedes weitere Feld die Summe aus dem über ihm stehenden Feld und dessen linkem Nachbarfeld.
Leere Felder werden dabei als Null interpretiert.
 

       0   1   2   3   4   5   6   7   8

   0   1   0   0   0   0   0   0   0   0

   1   1   1   0   0   0   0   0   0   0

   2   1   2   1   0   0   0   0   0   0

   3   1   3   3   1   0   0   0   0   0

   4   1   4   6   4   1   0   0   0   0

   5   1   5  10  10   5   1   0   0   0

   6   1   6  15  20  15   6   1   0   0

   7   1   7  21  35  35  21   7   1   0

   8   1   8  28  56  70  56  28   8   1  

  ...

Eine Anwendung dieser Tabelle ist die Kombinatorik. Wenn ein Beutel 8 nummerierte Kugeln enthält und ich nehme 3 davon heraus, so ergeben sich für diesen Griff 56 verschiedene Kombinationsmöglichkeiten.
(In mathematischer Schreibweise heißt das 3 über 8 = 56. Sie finden die Zahl in Zeile 8 Spalte 3.)

Aufgaben:

  1. Erweitern Sie das Programm so, dass der Benutzer aufgefordert wird, zwei Zahlen a und b <= 20 einzugeben und das Programm dann das entsprechende Produkt aus der Tabelle ausgibt.
  2. Erzeugen Sie eine Tabelle für die größten gemeinsamen Teiler aller Zahlen zwischen 1 und 20 und geben Sie sie aus.
  3. Erzeugen Sie eine Tabelle mit dem geometrischen Mittel (Wurzel aus a*b) aller Zahlenpaare von (1|1) bis (12|12) und geben Sie sie formatiert auf zwei Vorkomma- und zwei Nachkommstellen aus.
  4. Erzeugen Sie ein dreidimensionales Feld boolean pyt[101][101][101] Stellen Sie für alle Zahlentripel von (1|1|1) bis (100|100|100) fest, ob a^2 + b^2 = c^2 gilt. Drucken Sie dann eine Liste der Zahlentripel, bei denen dies der Fall ist.
    Eliminieren Sie Duplikate (3|4|5) = (4|3|5).
  5. Erzeugen Sie mithilfe von Java ein zweidimensionales Integer-Feld mit 10 Zeilen und 10 Spalten (Index jeweils 0 bis 9) und füllen Sie die Felder nach den Regeln des Pascalschen Dreiecks. Geben Sie die Tabelle zur Kontrolle auf dem Bildschirm aus.
  6. Ergänzen Sie einen Benutzerdialog der Form:
    Wie viele Kugeln sind im Beutel? 8
    Wie viele davon sollen gezogen werden? 3
    Dann gibt es 56 Kombinationsmöglichkeiten.
  7. Erweitern Sie die Tabelle auf 100 Zeilen und 100 Spalten.  
    Ermitteln Sie die Anzahl der möglichen Ankreuzkombinationen beim Lotto 6 aus 49.
    Wie viele Möglichkeiten, den Lottoschein auszufüllen, gäbe es bei einem Lotto 11 aus 81?
    Was läuft da falsch? Versuchen Sie zu reparieren!