ASCII-Zeichnungen

ASCII1-Zeichnungen sind eine ausgezeichnete Möglichkeit, um Programmieranfängern auf relativ einfache Weise das Prinzip algorithmischen Denkens zu vermitteln.

Der Quelltext eines Programms sollte i.A. so einfach, allgemein und universell wie möglich gehalten sein und sein Aufbau sowie der Verlauf des Programms selbst sollten so erfolgen, dass Erweiterungen und Varianten möglichst einfach zu implementieren sind und dabei eine einfache Lesbarkeit des Quelltextes gewährleistet bleibt.

Anhand von ASCII-Zeichnungen lässt sich dies gut demonstrieren bzw. üben. Hierbei handelt es sich um kleine Zeichnungen, die aus Tastatur-Zeichen1 bestehen und dadurch auf einer Konsole ausgegeben werden können. Die hier gezeigten Beispiele bestehen aus der gleichen Anzahl an Spalten und Zeilen und stellen somit Quadrate2 dar, bei denen die Anzahl der Zeichen pro Zeile gleich der Anzahl an Zeilen ist. Sie bestehen aus den beiden Zeichen '+' und '-' in einer jeweils durch die Programmierung vorgegebenen Ordnung.
Hierauf basieren die folgenden Vorüberlegungen:

Gib dort ein '+' aus, wo der Zeilenindex gleich dem Spaltenindex ist, ansonsten gib ein '-' aus.

private void diagLinks() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j) {
                System.out.print("+");
            } else {
                System.out.print("-");
            }
        }
        System.out.println();
    }
}
+----
-+---
--+--
---+-
----+

Gib dort ein '+' aus, wo die um 1 und den Zeilenindex verminderte Spaltenzahl gleich dem Spaltenindex ist, ansonsten gib ein '-' aus.

private void diagRechts() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (j == n-1-i) {
                System.out.print("+");
            } else {
                System.out.print("-");
            }
        }
        System.out.println();
    }
}
----+
---+-
--+--
-+---
+----

Gib dort ein '+' aus, wo der Zeilenindex oder wo der Spaltenindex jeweils der Hälfte der Spaltenzahl entspricht, ansonsten gib ein '-' aus.
Man beachte, dass die Berechnung der jeweiligen Position des '+' 2.5 ergibt, durch die Speicherung als int die Nachkommastelle jedoch fortfällt.

private void kreuzOrtho() {
        int n = 5;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if(i==n/2 || j==n/2)
                    System.out.print("+");
                else
                    System.out.print("-");
            }
            System.out.println();
        }
    }
--+--
--+--
+++++
--+--
--+--

Gib dort ein '+' aus, wo entweder der Zeilenindex gleich dem Spaltenindex ist oder wo die um 1 und den Zeilenindex verminderte Spaltenzahl gleich dem Spaltenindex ist, ansonsten gib ein '-' aus.

private void kreuzDiag(){
    int n=5;
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(i == j || j == n-1-i) {
                System.out.print("+");
            } else {
                System.out.print("-");
            }
        }
        System.out.println();
    }
}
+---+
-+-+-
--+--
-+-+-
+---+

Gib dort ein '+' aus, wo der Zeilenindex kleiner oder gleich dem Spaltenindex ist, ansonsten gib ein '-' aus.

private void dreieckRechts() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i <= j) {
                System.out.print("+");
            } else {
                System.out.print("-");
            }
        }
        System.out.println();
    }
}
+++++
-++++
--+++
---++
----+

Gib dort ein '+' aus, wo der Zeilenindex kleiner als die um den Spaltenindex verminderte Spaltenzahl ist, ansonsten gib ein '-' aus.

private void dreieckLinks() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i < n - j) {
                System.out.print("+");
            } else {
                System.out.print("-");
            }
        }
        System.out.println();
    }
}
+++++
++++-
+++--
++---
+----

1) American Standard Code for Information Interchange - Eine 7-bit Zeichenkodierung (128 Zeichen), die im Wesentlichen die Zeichen des amerikanischen Alphabets nebst Ziffern, Satz- und Sonderzeichen umfasst.
2) Bei der Ausgabe auf der Konsole können die Zeichnungen aufgrund der Ungleichheit zwischen einerseits Zeichenabstand und -größe und andererseits Zeilenhöhe nicht als Quadrate erscheinen. Dies wurde bei den Abbildungen aus Demonstrationsgründen angepasst.