3.2    Die lineare Programmstruktur

Ein lineares Programm besteht aus einer Folge von Anweisungen, die Zeile für Zeile untereinander angeordnet sind. Grundsätzlich besteht ein Computerprogramm aus einem Eingabe-, einem Verarbeitungs- und einem Ausgabeteil. Dieses Prinzip wird als EVA-Prinzip bezeichnet.

Wenn Sie eine Aufgabenstellung in Code überführen wollen, ist es oftmals sinnvoll, die Struktur umgangssprachlich zu formulieren, nämlich in Pseudocode. Ein Programm, das aus zwei Zahlen die Summe, die Differenz, das Produkt und den Quotienten berechnet, könnte in Pseudocode etwa so formuliert werden:

a ← 2.2 #weise der Variablen a den Wert 2.2 zu
b ← 7.5 #weise der Variablen b den Wert 7.5 zu
s ← a+b #berechne die Summe aus a und b
d ← a-b #berechne die Differenz aus a und b
m ← a*b #berechne das Produkt aus a und b
q ← a/b #berechne den Quotienten aus a und b
ausgabe: s,d,m,q #gib die Ergebnisse auf dem Bildschirm aus

Die Buchstaben a, b, ... repräsentieren die Variablen. Die Linkspfeile symbolisieren die Zuweisung. Das Zeichen # leitet einen Kommentar ein. Ein Kommentar beschreibt eine Operation ausführlicher. Er wird üblicherweise im Pseudocode nicht mit angegeben und dient hier nur zur näheren Erläuterung des Gemeinten.

Diese in Pseudocode formulierten Anweisungen müssen dann »nur noch« in die gültige Syntax von Python übertragen werden. Es ist zwar nicht zwingend notwendig, die einzelnen Anweisungen zeilenweise anzuordnen, denn sie könnten auch, jeweils durch ein Semikolon getrennt, in nur einer Programmzeile untergebracht werden. Diesen Programmierstil sollten Sie aber vermeiden, weil damit die Lesbarkeit des Quelltextes unnötig eingeschränkt würde. Orientieren Sie sich am Grundsatz, den ich bereits zum Einstieg dieses Abschnitts formuliert habe: eine Anweisung pro Programmzeile.

Versuchen Sie nun also, die zunächst umgangssprachlich formulierten Anweisungen in Python-Code zu überführen.

Einer Variablen a wird mit a=2.2 der Zahlenwert 2,2 zugewiesen und einer Variablen b wird mit b=7.5 der Zahlenwert 7,5 zugewiesen. Anstatt des Linkspfeils wird in Python das Gleichheitszeichen = als Zuweisungsoperator verwendet. Das Gleichheitszeichen darf nicht mit dem mathematischen Operator in einer mathematischen Gleichung verwechselt werden. Eine Zuweisung mit dem Zuweisungsoperator = bewirkt, dass ein Zahlenwert mit der Variablen fest verknüpft wird. Eine Variable a können Sie sich als einen Behälter (Speicherzelle) mit der symbolischen Adresse a im Arbeitsspeicher (RAM) eines Computers vorstellen; sie repräsentiert eine bestimmte Speicherzelle im RAM. Bei der Zuweisung wird ein Zahlenwert in die Speicherzelle mit der symbolischen Adresse a gespeichert. Nach dem Programmstart können Sie sich den Inhalt der Variablen a in der Konsole anzeigen lassen:

>>> a
2.2

Mit der eingebauten Funktion id(a) können Sie die Speicheradresse von a ermitteln. Der ausgegebene Wert entspricht nicht der physikalischen Speicheradresse. Nach jedem neuen Programmstart ändert sich dieser Wert.

Variable

Der aus der praktischen Informatik stammende Begriff Variable darf nicht mit dem Variablenbegriff der Mathematik verwechselt werden. In der Informatik steht eine Variable für die symbolische Bezeichnung einer Speicherzelle.

Es haben sich einige Konventionen für die Namensgebung von Variablen gebildet. Der erste Buchstabe eines Variablennamens (Bezeichner) sollte ein Kleinbuchstabe sein. Das erste Zeichen des Bezeichners darf keine Zahl sein.

In Python sind alle Variablen Objekte.

Das erste Programmbeispiel, das Sie in Listing 3.1 sehen, demonstriert, wie die mathematischen Grundoperationen als Python-Quelltext implementiert werden:

01  #01_operationen.py
02 #Eingabe
03 a=2.2
04 b=7.5
05 n=8
06 #Verarbeitung
07 s=a+b
08 d=a-b
09 m=a*b
10 q=a/b
11 p=2**n
12 w=a**0.5
13 #Ausgabe
14 print("Summe %3.3f + %3.3f = %3.3f" %(a,b,s))
15 print("Differenz %3.3f - %3.3f = %3.3f" %(a,b,d))
16 print("Multiplikation %3.3f*%3.3f = %3.3f " %(a,b,m))
17 print("Division %3.3f/%3.3f = %3.3f" %(a,b,q))
18 print("Potenz %i^%i = %i" %(2,n,p))
19 print("Wurzel %3.3f = %3.3f" %(a,w))

Listing 3.1     Mathematische Grundoperationen

Ausgabe

Summe 2.200 + 7.500 = 9.700
Differenz 2.200 - 7.500 = -5.300
Multiplikation 2.200*7.500 = 16.500
Division 2.200/7.500 = 0.293
Potenz 2^8 = 256
Wurzel 2.200 = 1.483

Analyse

Das Programm besteht aus drei Teilen: Eingabe, Verarbeitung und Ausgabe. Bei einem interaktiven Programm würde man die Zuweisungen in den Zeilen 03 und 04 durch die eingebaute Python-Funktion a=input("Eingabe a:") ersetzen. Der Typ der Variablen a, b und n wird in dem unten folgenden Konsolendialog ermittelt.

In dem Verarbeitungsteil (Zeilen 07 bis 12) werden die mathematischen Grundoperationen angewendet. Wenn eine der Variablen auf der rechten Seite des Zuweisungsoperators vom Typ float ist, dann ist die Variable auf der linken Seite des Zuweisungsoperators auch vom Typ float.

Die Ausgabe (Zeilen 14 bis 19) zeigt, wie die Ausgabe mit dem Operator % formatiert werden kann. Die Formatierungssequenz %3.3f bedeutet, dass vor und nach dem Dezimaltrennzeichen jeweils drei Stellen als Platzhalter reserviert werden. Das f steht für die Formatierung einer Gleitpunktzahl. Wenn Sie eine ganze Zahl mit beispielsweise fünf Platzhaltern darstellen wollen, können Sie die Formatierungssequenz %5i oder %5d verwenden.

Wenn Sie z. B. nach dem Programmstart in die Konsole >>> print(q) eingeben, erhalten Sie das Ergebnis 0.29333333333333333 für q.

Nachdem das Programm gestartet wurde, können Sie auch die Typen und die Identitäten der Variablen abfragen:

>>> type(a)
<class 'float'>
>>> id(a)
140557774208208
>>> type(b)
<class 'float'>
>>> id(b)
140557774651632
>>> type(n)
<class 'int'>
>>> id(n)
4444687360

Weil den Variablen a und b Gleitpunktzahlen zugewiesen wurden, sind sie vom Typ float.