Pascal-Tutorial Kapitel 3
Aus Wirthi's Wiki
| Pascal-Tutorial |
|---|
| Allgemeines Kapitel 1 (Einleitung) Kapitel 2 (Daten) Kapitel 3 (Anweisungen) Kapitel 4 (Ein- und Ausgabe) Kapitel 5 (Unterprogramme) Kapitel 6 (Felder und Strukturen) Kapitel 7 (Dateien) |
Im Kapitel 3 des Pascal-Tutorials behandeln wir Anweisungen und Operatoren und deren Einfluss auf den Programmablauf.
[bearbeiten] Anweisung
Sehr einfach gesagt entspricht einer Anweisung das, was man auch im natürlichen Leben darunter versteht. Es ist ein abgeschlossener Befehl an den Computer, etwas zu tun: Setzte eine Variable auf einen Wert, gebe etwas auf den Bildschirm aus, öffne eine Datei. Dies muss natürlich in einer bestimmten Art eingegeben werden, die von der Pascal-Sprachdefinition vorgegeben ist.
Anweisungen sind in sich abgeschlossen. Sie haben zwar praktisch immer eine Auswirkung, etwa dass ein Variablenwert verändert wird oder etwas am Bildschirm ausgegeben wird. Sie stellen aber für sich alleine genommen eine vollständige und komplette Operation dar. Wie wir später sehen werden, ist dies etwa bei Anweisungen nicht der Fall.
[bearbeiten] Blöcke
In Pascal und anderen Hochsprachen sind Anweisungen immer in Blöcken zusammengefasst. Ein Block ist durch die Schlüsselwörter BEGIN und END umschlossen. Die einzelnen Anweisungen sind durch Strichpunkte voneinander getrennt. Bei der Programmausführung werden die Anweisungen sequentiell abgearbeitet, in der natürlichen Lesereihenfolge, also von oben nach unten.
BEGIN Anweisung1; Anweisung2; Anweisung3; .... END
In diesem Beispiel würde also zuerst die Anweisung1 durchgeführt werden, anschließend die Anweisung2, und so weiter. Dies ist mit dem Anweisungs-Teil eines Kochrezeptes vergleichbar. Auch dort stehen hintereinander gereihte Aktionen, die der Koch durchzuführen hat. Jede dieser Aktionen könnte eine Anweisung sein, etwa trenne Eigelb von Eidotter oder knete den Teig.
[bearbeiten] Ausdrücke
Ausdrücke stellen mathematische oder logische Berechnungen dar. Sie bestehen aus einer Reihe von Eingangswerten (etwa Variablen oder Konstanten), die mit Operatoren miteinander verknüpft sind. Dies ergibt eine mathematische Formel. Beispiele für einfache Ausdrücke wäre etwa
3 + 2 (a * 2) + b
- Im ersten Beispiel werden zwei Konstanten miteinander addiert, das Ergebnis dieses Ausdruckes ist hier immer die Zahl 5.
- Das zweite Beispiel ist etwas komplexer. Zuerst wird der Wert der Variable a mit zwei multipliziert, zum Ergebnis dieser Berechnung wird der Wert Variable b addiert. Dieses Berechnungsergebnis stellt den Wert des gesamten Ausdrucks dar. Dieser ist hier nicht mehr fix vorgegeben wie im ersten Beispiel, sondern ändert sich je nach Wert der Variablen a und b.
Ausdrücke müssen gültig sein, dürfen also keine mathematischen Grundregeln verletzen. Dazu gehört auch, dass sie "logisch" korrekt sind, also dass etwa keine Zeichen zu Zahlen addiert werden.
Zu beachten ist, dass Ausdrücke etwas berechnen, aber dabei keine Werte verändert werden. Dass in obigen Beispielen ein Ergebnis berechnet wird, haben wir bereits gesehen. Es wird aber der Wert der Variablen im zweiten Beispiel nicht verändert. Hatte etwa a den Wert 10 und b den Wert 5, so wird zuerst 10 mit 2 multipliziert und ergibt 20, anschließend wird 5 addiert. Das Ergebnis, der "Wert des Ausdrucks" beträgt also 25. Die Variablen a und b haben aber immer noch die Werte 10 bzw. 5.
[bearbeiten] Einsatz von Ausdrücken
Ausdrücke stellen für sich genommen keine gültigen Anweisungen dar. Sie können aber Teil solcher sein. Ein Beispiel hierfür ist, wenn einer Variable ein Wert zugewiesen wird. Der Teil rechts des Gleichheits-Zeichens ("=") stellt dabei einen Ausdruck dar.
summe = a + b + c;
Der Variablen summe ist also der Wert des Ausdrucks auf der rechten Seite zugewiesen; in diesem Fall ist dies die Summe der drei Variablen a, b und c.
Neben Variablenzuweisungen können Ausdrücke etwa auch in Kontrollstrukturen oder als Parameter bei Unterprogramm-Aufrufen eingesetzt werden. Beide Themen werden wir später noch behandeln.
[bearbeiten] Operatoren
Operatoren sind Zeichenketten, die Teilausdrücke auf bestimmte Weise miteinander verknüpfen. Einfache Beispiele hierfür sind die allseits bekannten mathematischen Operatoren +, -, * und /. Diese verknüpfen jeweils zwei Teilausdrücken miteinander, indem sie die jeweilige mathematische Berechnung durchführen.
1 + 2
Dieser Ausdruck besteht aus dem linken Teilausdruck "1" und dem rechten "2". Diese werden mit der Funktion "addieren" verknüpft, also die Werte der beiden Teilausdrücke miteinander addiert. Der Wert des gesamten Ausdruckes ist also 3.
Komplizierter wird es, wenn mehrere Operatoren in einem Ausdruck vorkommen. Dann sind mathematische Vorrangregeln zu beachten. Im Allgemeinen ist von Links nach Rechts auszuwerten. Dabei ist allerdings auf geklammerte Teilausdrücke Rücksicht zu nehmen und auf den Vorrang gewisser Operatoren. So haben der Multiplikations- und der Divisionsoperator Vorrang gegenüber dem Additions- und dem Subtraktionsoperator.
2 * 3 + 4 * 5
Dieser Ausdruck ergibt also 26. Die Addition teilt den Ausdruck in zwei Teilausdrücke, nämlich 2 * 3 und 4 * 5. Diese sind getrennt zu berechnen, die Zwischenergebnisse lauten 6 und 20. Erst danach sind diese beiden zu addieren, das Gesamtergebnis lautet 26.
Neben den bereits erwähnten mathematischen Operatoren gibt es etwa auch noch boolesche; diese werden im nächsten Abschnitt genauer vorgestellt.
[bearbeiten] Boolesche Logik
BOOLEAN-Variablen speichern boolesche (logische) Aussagen, also die Zustände TRUE (wahr) oder FALSE (falsch). Nur diese beiden Werte sind möglich. So kann etwa in der Variablen isOlderThan20 gespeichert werden, ob jemand älter als 20 Jahre ist. Dies kann so sein (TRUE) oder nicht (FALSE). Eine zweite Variable könnte speichern, ob die Person Europäer ist (isEuropean), was wiederum TRUE oder FALSE sein kann.
Diese Aussagen können miteinander verknüpft werden. So etwa könnte eine Frage lauten, ob eine Person älter als 20 ist und Europäer ist. Dieses Wissen soll in der Variablen isEuropeanOlderThan20 gespeichert werden. Die Variable soll genau dann TRUE sein, wenn beide Aussagen stimmen, die Person also Europäer ist und älter als 20 Jahre ist. Mit folgendem Programmcode kann dies erledigt werden:
isEuropeanOlderThan20 := isOlderThan20 AND isEuropean;
Die Variable isEuropeanOlderThan20 wird nun genau dann TRUE, wenn isOlderThan20 und (AND) isEuropean TRUE sind. Ist nur eine dieser beiden Variablen (oder sind beide) FALSE, dann ist auch isEuropeanOlderThan20 FALSE. Dies entspricht der gewünschten Funktionalität, die das gelten beider Bedingungen verlangte.
AND ist der erste boolesche Operator. Neben diesem gibt es noch weitere Operatoren. Die häufigsten sind OR (oder) und NOT (nicht).
[bearbeiten] AND
Der AND-Operator verknüpft zwei boolesche Ausdrücke, so dass das Ergebnis genau dann TRUE ist, wenn beide Eingaben TRUE sind. Die folgende Tabelle soll dies verdeutlichen:
| a | b | x |
|---|---|---|
| FALSE | FALSE | FALSE |
| TRUE | FALSE | FALSE |
| FALSE | TRUE | FALSE |
| TRUE | TRUE | TRUE |
Der Wert von b3 ist dann TRUE, wenn a und b TRUE sind. Ist einer der beiden (oder auch beide) FALSE, dann ist b3 ebenfalls FALSE.
[bearbeiten] OR
b3:= b1 OR b2;
Der Wert von b3 ist dann TRUE, wenn b1 oder (or) b2 TRUE ist. Ist also einer (oder beide) TRUE, dann ist auch b3 TRUE, sind beide FALSE, ist auch b3 FALSE.
[bearbeiten] NOT
b1:= NOT b2;
Der Wert von b1 ist dann TRUE, wenn der von b2 FALSE ist. Die not Verknüpfung "dreht den Wert der Variablen um".
[bearbeiten] if-Abfragen
Syntax: IF bedingung THEN anweisung; [ ELSE anweisung; ]
Mit Hilfe der if Anweisung kann man Codeteile ausführen lassen, wenn die dazugehörende Bedingung erfüllt ist (wenn sie true ist).
if Zahl1=0 then Zahl2:=10;
Die Anweisung Zahl2:=10 wird nur ausgeführt, wenn Zahl1=0 true ist. Will man in die if Abfrage mehrere Anweisungen einschließen, benötigt man begin und end:
if Zahl1>=0 then begin Zahl2:=Zahl2+1; Zahl1:=Zahl2; end;
Mittels dem in der Syntax angegebenen Teil "ELSE Anweisung" kann man Anweisungen dann ausführen lassen, wenn die Bedingung FALSE ist:
if Zahl=0 then begin
boolZahlIstNull:=TRUE;
writeln('Zahl ist gleich Null');
end
else begin
boolZahlIstNull:=FALSE;
writeln('Zahl ist ungleich Null');
end;
Der "begin-end" Block nach "else" wird dann ausgeführt, wenn Zahl=0 false ist, also wenn Zahl nicht gleich Null ist. Zu beachten ist, dass der Strichpunkt vor dem "else" immer wegfallen muss, sonst tritt ein Syntaxfehler auf.
[bearbeiten] case-Anweisung
Eine weite Möglichkeit um Bedingungen auszuwerten ist die Case-Anweisung. Sie kommt bevorzugt zum Einsatz, wenn eine Variable mehr als nur 2 mögliche Werte haben kann:
case intVariable1 of
0: writeln('Der Wert der Variablen ist gleich Null');
1: writeln('Der Wert der Variablen ist gleich Eins');
else writeln('Der Wert der Variablen ist nicht gleich Eins oder Null');
end;
Die Anweisung wird durch "case", die zu überprüfende Variable und "of" eingeleitet. Anschließend folgt jeweils ein Wert (Zahl bei int oder byte, Zeichen in Hochkomma bei char; real und string sind in case-Anweisung nicht möglich). Diesem folgt ein Doppelpunkt und die auszuführende Anweisung. Mehrere Anweisungen müssen in "begin" und "end" eingeschlossen werden!
Bei der Ausführung wird nur die Anweisung (der Block) ausgeführt, dessen Wert dem der Variablen entspricht. Wird kein passender Wert gefunden, so wird (falls vorhanden), der else Block ausgeführt.
[bearbeiten] Schleifen
Um Anweisungen mehrmals hintereinander ausführen, benötigt man Schleifen.
[bearbeiten] repeat-Schleife
Syntax: REPEAT Anweisung(en) UNTIL Bedingung;
Diese Schleife führt die Anweisungen solange durch, bis die Bedingung wahr ist (deutsch: "WIEDERHOLE Anweisungen BIS Bedingung"). Dabei wird die Schleife mindestens einmal durchlaufen. Bei mehreren Anweisungen benötigt man hier kein begin und end!
Zahl1:=0; REPEAT Zahl1:=Zahl1+1; UNTIL Zahl1=3;
In diesem Beispiel wird die Schleife 3 mal durchlaufen. Dabei wird die Variable Zahl1 jedesmal um 1 erhöht. Am Ende des 3. Durchlaufes hat die Variabel den Wert 3, d.h. die Bedingung Zahl1=3 ist TRUE, daher wird die Schleife beendet und die darauffolgende Anweisung ausgeführt.
[bearbeiten] while-Schleife
Syntax: WHILE Bedingung DO Anweisung;
Die while-Schleife wird solange durchlaufen, bis die Bedingung FALSE ist (deutsch: "WÄHREND/SOLANGE Bedingung MACHE Anweisungen"). Die Schleife wird mindestens Null mal durchlaufen (die Bedingung kann ja gleich zu Beginn false sein). Bei mehreren Anweisungen benötigen Sie begin und end!
Zahl1:=0; WHILE Zahl1<3 DO BEGIN Zahl1:=Zahl1+1; Zahl2:=Zahl2*2; END;
In diesem Beispiel wird die Schleife 3 mal durchlaufen. Zu Beginn des 4. Durchlaufes ist die Bedingung false (Zahl1 ist dann nicht mehr kleiner, sondern gleich 3), also wird mit dem Befehl nach der Schleife fortgesetzt.
[bearbeiten] for-Schleife
Syntax: FOR Variable:= Anfangswert TO Endwert DO Anweisung;
Die for-Schleife ist eine Zählschleife. Die angegebene Variable wird am Anfang auf Anfangswert gesetzt. Danach wird sie nach jedem Durchlauf um 1 erhöht. Ist ihr Wert größer als Endwert, wird die Schleife beendet. Innerhalb des Anweisungsblockes können Sie auf die Variable zugreifen, d.h. Sie können sie auch verändern. Das ist jedoch nicht ratsam. Wollen Sie mehrere Anweisungen ausführen, benötigen Sie unbedingt begin und end!
Zahl2:=0; FOR Zahl1:= 1 to 10 DO Zahl2:=Zahl2+Zahl1;
In diesem Beispiel wird Zahl2 in jedem Schleifendurchlauf um Zahl1 erhöht. Da Zahl1 nacheinander die Werte von 1 bis 10 hat, ist in Zahl2 nach Verlassen der Schleife die Summe aller Zahlen von 1 bis 10 gespeichert.
| Pascal-Tutorial: Allgemeines - Kapitel 1 - Kapitel 2 - Kapitel 3 - Kapitel 4 - Kapitel 5 - Kapitel 6 - Kapitel 7 |
