§1 Sequenz

«


« Der Computer als Rechenmaschine

In den ersten Jahren wurden die Computer als Rechenmaschinen eingesetzt nach dem simplen Prinzip "Eingabe-Verarbeitung-Ausgabe" (EVA) verwendet.

Selbst in den 70er Jahren war es an der Universität noch üblich, die Programme und ihre Daten auf Lochkarten zu stanzen, sie einlesen zu lassen und auf einen Ausdruck zu warten.

« Das Produkt zweier Zahlen

Um das Prinzip darzustellen, soll hier ein einfaches Programm vorgestellt werden, das zwei Zahlen miteinander multipliziert.

Variable a einlesenEingabe
Variable b einlesen
Produkt berechnen und auf p zuweisenVerarbeitung
p ausgebenAusgabe

Zur korrekten Darstellung eines Algorithmus werden auch sogenannte Struktogramme verwendet:



Nun der entsprechende Quelltext in Java unter Verwendung des Paketes myio:


import myio.*;



class sequence01

{

  public static void main( String args[] )

  {

    int a, b, p;

    InOut.write( "Bitte 1.Faktor eingeben: " );

    a = InOut.readInt();

    InOut.write( "Bitte 2.Faktor eingeben: " );

    b = InOut.readInt();

    p = a*b;

    InOut.writeln( "Ergebnis "+p );

  }

}




Erklärung der einzelnen Zeilen:
import InOut.*;
Hier wird dem Übersetzer mitgeteilt, dass er auf vordefinierte Befehle zugreifen kann. In diesem Fall stehen in der Datei "InOut.class" die Befehle "write", und "readInt".
class sequence01
Jedes geschriebene Programm gehört in Java zu einer größeren Einheit, die "Klasse" genannt wird. Genaueres dazu steht im Abschnitt über objektorientiertes Programmieren.
Die Definition der Klasse folgt innerhalb von geschweiften Klammern. Deshalb steht in der nächsten Zeile eine geöffnete geschweifte Klammer und am Ende des Programm eine geschlossene - damit wird die Definition der Klasse beendet.
public static void main( String args[] )
Diese Zeile besagt eigentlich nur, dass hier der Teil des Programms folgt, der als erstes ausgeführt werden soll, das Hauptprogramm ("main"). Alle voranstehenden Worte werden im Abschnitt über objektorientierte Programmierung erklärt.
Das Hauptprogramm wird ebenfalls in geschweifte Klammern gesetzt.
int a, b, p;
In dieser Zeile werden alle vom Hauptprogramm benötigten Variablen definiert. Dies ist unter anderem notwendig, damit zur Laufzeit klar ist, wieviel Speicherplatz benötigt wird.
Es folgt der Eingabeteil des Programms:


InOut.write( "Bitte 1.Faktor eingeben: " );

a = InOut.readInt();

InOut.write( "Bitte 2.Faktor eingeben: " );

b = InOut.readInt();

Nach der Ausgabe der jeweiligen Zeichenkette, erwartet das Programm die Eingabe einer Ganzzahl (readInt()).
p = a*b;
Dies ist die eigentliche Berechnung des Produktes.
InOut.writeln( "Ergebnis "+p );
Hier wird das Ergebnis (der Inhalt der Variablen p) auf dem Bildschirm ausgegeben.

« Anweisungsfolge/Sequenz

Wie man sehen kann, besteht das Programm aus einer Folge von Anweisungen. Durch das sequentielle Abarbeiten entsteht am Schluss (meistens) das gewünschte Ergebnis.

Das sequentielle Abarbeiten (Hintereinanderausführen) von Anweisungen nennt man "Sequenz"

« Zuweisungen und Rechenausdrücke

Das Kernstück des Programms war die "Verarbeitung", also die Anweisung:
p = a*b;
So eine Anweisung heißt "Zuweisung", denn die Variable p bekommt einen Wert zugewiesen.
Dieser Text entspricht nicht seiner mathematischen Bedeutung: Dort wäre es eine Aussage, ob p dem Produkt aus a und b entspricht; das Ergebnis dieser Aussage wäre entweder wahr oder falsch.
In Java ist dies eine Anweisung, d.h. der Computer bekommt eine Vorschrift, was zu tun ist. In diesem Fall wird er angewiesen, das Produkt aus a und b zu berechnen und diesen Wert in der Variable p zu speichern.
In PASCAL steht deshalb auch
 p := a*b; 
Zuweisungen haben immer die Form:
 <Variable> "=" <Rechenausdruck|Funktion> 

Ein Beispiel für die Verwendung der Zuweisung in einer Sequenz ist der "Variablentausch". Welche Anweisungen werden benötigt, um den Inhalt der Variablen a mit dem der Variablen b zu vertauschen? Der erste Ansatz:


a = b;     b = a;

Diese Idee funktioniert nicht, denn nach der Zuweisung von b an a enthalten beide den Inhalt von b und der Inhalt der Variablen a ist verlorengegangen. Deshalb braucht man eine dritte (temporäre) Variable, die als Zwischenspeicher dient:



oder als Quelltext:


tmp = a;   a = b;     b = tmp;

Hier wurde der Variableninhalt von a zwischengespeichert und am Schluss nach b übertragen.

« Der Eingabeprozess

Die Eingabe der Zahl "371" mittels der Zuweisung:
a = InOut.readInt(); 
lässt sich selbst als eine Art Sequenz auffassen:
AnweisungEntstandene DatenMedium"Prozessor"
StartVorstellung von 371NeuronenGehirn
Wandle in Dezimalform371NeuronenGehirn
Zerlege in Einzelziffern"3" "7" "1"NeuronenGehirn
Übertrage auf die Tastatur[3] [7] [1] [Enter]NeuronenGehirn und Finger
Setze zu einer Zeichenkette zusammen"371"SpeicherMikroprozessor
Wandle in Binärdarstellung101110011ProzessorspeicherMikroprozessor
Weise es a zu101110011Speicherplatz von aMikroprozessor
Die einzelnen Teile dieses Prozesses lassen sich wieder weiter zerlegen. Man denke nur an die Anweisung "Übertrage auf die Tastatur". Man kann sich leicht vorstellen welche Komplexität dieses Problem enthält, wenn man sich überlegt, wie man einen Roboter programmieren müsste, der diese Anweisung ausführen soll.
Das rekursive Zerlegen eines Prozesses in Teilprozesse nennt man "Top-Down-Prinzip"

« Variablendeklaration in Java

Jede Variable muss in Java zuerst deklariert werden. Eine Deklaration besteht aus einem Typ und einem Variablennamen:


int Alter;

String Name;

boolean weiblich;

Variablendeklarationen können irgendwo zwischen den Anweisungen im Quelltext stehen, meistens stehen sie jedoch am Anfang eines Programms oder direkt vor ihrem Einsatz:


public static void main ( String args[] ){

    int count;

    String title;

    boolean isAsleep;

    ...

}

Mehrere Variablen gleichen Typs können auch in einer Anweisung deklariert werden:


int x, y, z;

String Vorname, Zuname;

Außerdem kann der Variablen bei der Deklaration gleich ein Startwert zugeordnet werden:


int Alter, Groesse, Schuhgroesse = 42;

String Name = "Hugo";

int x=4, y=6, z=0;

Variablen können von verschiedenen Typen sein. Hier sollen die primitiven Typen vorgestellt werden: Primitive Datentypen sind in Kleinschrift notiert um sie von den nicht-primitiven Typen zu unterscheiden. Für nicht-primitive Typen muss explizit Speicher für diese Variable definiert werden. Die Typen sind:

« Zuweisung und einfache Arithmetik in Java

Ausdrücke sind Anweisungen, die einen Wert repräsentieren, sie sind im Allgemeinen aus Variablen, Konstanten und Operatoren zusammengesetzt. Beispiel:

4*(7 - a)+ b

Dieser Ausdruck ergibt in Abhängigkeit von den Variablen a und b eine Zahl. Mittels einer Zuweisung kann diese Zahl einer weiteren Variable zugeordnet werden:

int c = 4*(7 - a)+ b

Java besitzt 5 arithmetische Operatoren und verschiedene Bitoperatoren:

OperatorBedeutungBeispiel
+Addition1 + 2
-Subtraktion1 - 10
*Multiplikation2 * S3
/Division44 / 11
%Modulo (Restbildung)44 % 10

Bis auf das Minuszeichen (kann auch als Negation eingesetzt werden) besitzt jeder Operator zwei Operanden. Teilt man zwei ganze Zahlen, so wird das Ergebnis ohne Rest ausgegeben, dieser kann über den Modulo-Operator bestimmt werden:

int a = 54/10; int b = 54%10;

Ergibt für a=5 und b=4. Das Ergebnis einer Rechenoperation ist immer von dem "ungenauesten" Typen der Rechnung. Also bei Addition einer int mit einer float-Zahl hat das Ergebnis einen float-Wert.

Java besitzt auch die Möglichkeit der Mehrfachzuweisung:

int a, b, c; a = b = c = -5;

« Weitere Quelltexte

Hier ein komplettes Programm zum Tausch von Variablen.


  public static void main(String args[]) {

    InOut.writeln( "Vertauschung zweier Variablen..." );

    InOut.writeln( "Bitte a eingeben:" );

    int a = InOut.readInt();

    InOut.writeln( "Bitte b eingeben:" );

    int b = InOut.readInt();

    InOut.writeln( "a ="+a );

    InOut.writeln( "b ="+b );

    int tmp = a; a = b; b = tmp;

    InOut.writeln( "Hokuspokus" );

    InOut.writeln( "a ="+a );

    InOut.writeln( "b ="+b );

  }


« Aufgaben