Einfache Beispiele für Pascal-Programme

1. Beispiel 1   Aufbau eines Pascal-Programms. EVA Eingabe-Verarbeitung-Ausgabe.
2. Beispiel 2   Steuerung des Ablaufs. Zählschleife "FOR ...".
3. Beispiel 3   Steuerung des Ablaufs mit Hilfe von Bedingungen. "IF" ... "THEN" ... bzw. "IF" ... "THEN" ... "ELSE" ... .


Zur Programmiersprache Pascal

Pascal ist eine Programmiersprache, die noch vor einigen Jahren in Schulen und Universitäten eine führende Rolle gespielt hat. (Wird noch fortgesetzt)
Im folgenden geht es nur um eine einfache, möglichst schnelle Einführung in diese Programmiersprache mit nur wenigen Sprachelementen, deren Gebrauch man noch ganz gut auswendig lernen kann. Nebenbei kann man einiges wiedererkennen bzw. kennenlernen, was in jeder anderen Programmiersprache auch vorkommt.

FESTLEGUNGEN
Für die bessere Lesbarkeit der Beispiele wird folgendes festgelegt:

Farbe (blau) : Feststehende Pascal-Befehlswörter
Farbe (pink) : Selbstgewählte Bezeichnungen



Für die Wahl der Bezeichnungen (Bezeichner, Namen) gelten einfache Regeln: Das erste Zeichen muss ein Buchstabe sein, danach sind auch Ziffern erlaubt und es dürfen außer dem _ (Unterstrich) keine Sonderzeichen (z.B. auch nicht ä,ö,ü,ß) und keine Leerzeichen darin vorkommen. Groß- und Kleinschreibung werden nicht unterschieden! Bei den Bezeichnern muss man außerdem beachten, dass sie nicht zu den Pascal-Befehlswörtern gehören


Pascal unterscheidet auch bei den Befehlswörtern nicht zwischen Groß- und Kleinschreibung: PROGRAM=program=PROgram=pROgraM.

Um diese besser zu erkennen, schreiben wir Pascal-Befehlswörter künftig in Großbuchstaben.

Pascal-Befehle werden mit einem Semikolon abgeschlossen. Daran können sich unmittelbar die nächsten Befehle anschließen. Um die Programme besser lesen zu können, schreiben wir jedoch nach Möglichkeit jeden Befehl in eine eigene Zeile.



Beispiel 1 - Zur Grundstruktur eines Pascal-Programmes

Alle Programme genügen etwa der Form

PROGRAM Name_des_Programmes;(=Kopfzeile)
VAR Variable_a, Variable_b, c :INTEGER; (Deklarationsteil mit Bezeichnung und Typ der Variablen)
BEGIN (Hier beginnt das eigentlich Programm)
... (mit verschiedenen Anweisungen) ...
END. (Kennzeichnet den Schluss des Programms)

Eine besonders einfache Struktur für "das eigentliche Programm" ist "EVA" (Eingabe - Verarbeitung - Ausgabe). Für die Ein- und Ausgabe benutzen wir die Anweisungen readln(a); und writeln(a);. a ist dabei die Bezeichnung für eine Variable (=Speicherplatz, "Schublade" mit dem Etikett a, die zuvor im Deklarationsteil "erklärt" worden sein muss.

Es folgt ein komplettes, lauffähiges Beispiel, das mit Kopieren und Einfügen in eine in einem Editor neu angelegte Textdatei kopiert werden kann. Diese muss anschließend mit der Endung .pas abgespeichert und in den Editor von Virtual Pascal eingelesen werden.




In diesem einfachen Programm beschränkt sich die Verarbeitung auf die Zeilen 08 und 16. Alle anderen Zeilen beziehen sich entweder auf die jeweils vorausgehende Eingabe bzw. die sich jeweils anschließende Ausgabe der Werte.



Für eine so einfache Rechenaufgabe wie im vorigen Beispiel lohnt sich der Aufwand des Programmierens natürlich nicht. Anders sieht es jedoch schon dann aus, wenn zum Beispiel immer wieder die gleiche Rechnung mit veränderten Werten durchgeführt werden soll.

Beispiel 2 - Befehle zur Steuerung des Programmablaufs - "FOR-Schleife"

    FOR i:=1 TO n DO
      BEGIN Anweisung1 ; Anweisung2 ; ... END ;


(Bei nur einer Anweisung können BEGIN und END entfallen. Die Zählvariable i (vom Typ INTEGER) wird beginnend bei 1 von Durchlauf zu Durchlauf automatisch um 1 erhöht bis i den Wert n angenommen hat.)

Aufgabe:

Die Summe der Zahlen von 1 bis n soll nach Eingabe einer ganzen Zahl n > 0 berechnet werden. Sum = 1+2+3+...+n






Beispiel 3 - Befehle zur Steuerung des Programmablaufs:

    IF Bedingung THEN
       BEGIN Anweisung1 ; Anweisung2 ; ... END
       ELSE sonst Alternativ-Anweisung1 ; Alternativ-Anweisung2; ... END;


(Vor dem ELSE darf kein Semikolon stehen. Bei nur einer Anweisung können BEGIN und END jeweils entfallen wie z.B. in der folgenden Variante ohne ELSE)

    IF Bedingung THEN Anweisung ;

Aufgabe 3a:

Es sollen  n  REAL-Zahlen eingelesen werden. Dabei soll die größte dieser Zahlen  max  bestimmt werden.

Überlegungen und typische Verfahrensschritte beim Entwurf eines Programms
Benötigt werden folgende Variablen (deren Bezeichnungen können natürlich auch anders gewählt werden):
n = Anzahl der einzulesenden Werte TYP: INTEGER
x = Variable für einen eingelesenen Wert TYP: REAL
i = Zähler für die Zählschleife TYP: INTEGER
max = Variable für den maximalen Wert TYP: REAL

Die Vorüberlegungen (noch ohne Programmiersprache) können z.B. so aussehen:
Einlesen von n
   ( ergibt sich erst später)
Schleife von i=1 bis i=n zum
3a  Einlesen des nächsten Wertes x und
3b  Wenn x größer als das bisherige Maximum max ist, dann bekommt max den neuen Wert x.
   (3a und 3b werden in der Schleife wiederholt!)
Ausgeben von max

Daraus kann sich eine erste Version des Programms ergeben:

PROGRAM  maximum;
VAR  n,i:  INTEGER;  x,max:  REAL;
BEGIN
READLN(n);
FOR  i:=1  TO  n  DO
BEGIN
READLN(x);
IF  x  >  max  THEN  max := x;
END;
WRITELN(max);
READLN;
END.


BEGIN und END; können hier nicht entfallen, da zwei Anweisungen (in Form einer Verbundanweisung) zu wiederholen sind.

Nun muss man prüfen, ob das Programm auch richtig funktioniert.
Programm unbedingt vor dem Probestart abspeichern!
Probedaten eingeben, die man auch nachvollziehen kann: Z.B: n=3, x1=3.4, x2=5, x3=1.2
Man stellt fest, dass das Programm nicht funktioniert !

Dieser Probelauf geht auch ohne Rechner!
Da sich manche Variablen währende des Programmlaufs mehrfach verändern, legen wir folgende "Wertebelegungstabelle" an:

n i x max
3      
  1    
    3.4  
Spätestens hier sieht man, dass beim ersten Durchlauf der Schleife die Variable max noch keinen Wert hat. Vor der Schleife muss max also einen Anfangswert bekommen. Am besten ist hier READLN(max); (als Punkt 2, d.h. hinter READLN(n);. Der erste und bis dahin einzige Wert ist natürlich zu dem Zeitpunkt automatisch auch der bis dahin größte Wert.)
Da wir damit schon einen Wert eingelesen haben, dürfen wir in der Schleife nur noch n-1 Werte einlesen:    Statt FOR  i:=1  TO  n  DO    nun    FOR  i:=1  TO  n-1  DO

Nach der Fehlerkorrektur: Jetzt zeigt die Wertebelegungstabelle, dass die Lösung wohl funktioniert:

n i x max
3      
      3.4
  1    
    5  
      5
  2    
    1.2  
Ausgabe also max = 5  



Aufgabe 3b:

Es sollen drei REAL-Zahlen a, b und c (jeweils > 0) in aufsteigender Reihe a ≤ b ≤ c eingegeben werden. Das Programm soll prüfen, ob damit ein Dreieck gezeichnet werden kann. Dafür muss offensichtlich folgende Bedingung erfüllt sein: a + b > c





Fortsetzung der Aufgabe:

Der Benutzer soll jetzt nicht mehr auf die Reihenfolge der Zahlen achten müssen. Das kann schließlich auch das Programm leisten. Folgende Änderungen sind also nötig:
1. in 04, 06 und 08 verlangen wir nur noch 'Gib a ein ' usw.
Offensichtlich reicht es, wenn wir dafür sorgen, dass die Werte so vertauscht werden, dass im neuen=endgültigen c der größte Wert der alten Werte a, b und c steht. Also:
2. Hinter Zeile 09 fügen wir die erforderlichen Änderungen ein. a und c sowie b und c müssen miteinander verglichen werden und der größere Wert nach c getauscht werden. Man braucht dazu eine Hilfsvariable tausch, die z.B. den alten Wert von vorübergehend aufnimmt. Natürlich muss tausch auch in Zeile 02 eingefügt werden.
Danach kann man den Rest des obigen Programms ab Zeile 10 einfach übernehmen.





Wird demnächst fortgesetzt / Helmut Klatt 10.5.05