Beispiele zu den Vorlesungsfolien Vorlesung 7 ============================================= Vergleich Zuweisung vs. mathematische Gleichungen, wo wird hier einer Variablen ein Wert erkennbar zugewiesen, und was könnte eher ein Vergleich sein? a = 1 a = b a = a + b Um es eindeutiger zu machen, wird in Pseudocode (wie in PASCAL) der Operator := für eine Zuweisung verwendet, das Gleichheitszeichen hingegen nur für Vergleiche auf Gleichheit. a := a + b bedeutet: a bekommt den alten Wert von sich selbst, addiert mit b, zugewiesen. --- Problem: Wir wollen den Inhalt zweier Variablen vertauschen. Beispiel: a := 1 b := 2 Ist folgendes richtig? a := b b := a Welchen Wert hat nun a, welchen b? Beide haben den Wert 2, da der alte Wert von a durch die Zuweisung a := b verlorengegangen ist. Eine mögliche Lösung: "Hilfsvariable" einführen, die den ALTEN Wert von a speichert. h := a a := b b := h Fertig. a hat jetzt den Wert 2, b den Wert 1. --- Syntax: Man kann und muss Anweisungen in den meisten Programmiersprachen mit Semikolon trennen: a := 1; b := 2; c := 3; Dabei dürfen aber mehrere Anweisungen in einer Zeile stehen, z.B.: a:=1; b:=2; c:=3; Anderes Beispiel: a := 1 +2 +3; d.h. a bekommt den Wert 1+2+3 zugewiesen, das Semikolon, was die Anweisung abschließt, steht ganz am Ende hinter der 3. --- Beispiel für bedingte Ausführung: a := 1 b := 2 IF b != 0 THEN ergebnis := a / b; ELSE Fehlerausgabe "b ist 0, durch 0 darf man nicht teilen!!!"; --- Wenn mehrere Anweisungen unter der Bedingung X ausgeführt werden sollen, wird bei Pseudocode BEGIN ... END verwendet, in C oder Java die geschweiften Klammern { ... }. Beispiel: IF (Bedingung X erfüllt) THEN BEGIN Anweisung1; Anweisung2; Anweisung3; END ELSE BEGIN Anweisung4; Anweisung5; Anweisung6; END Also wird Anweisung1...Anweisung3 nur dann ausgeführt, wenn X erfüllt ist, ansonsten (wenn X nicht erfüllt ist) werden die Anweisungen Anweisung4...Anweisung6 ausgeführt. --- IF (BEDINGUNG X erfüllt) THEN BEGIN Anweisung1; END ELSE BEGIN Anweisung1; END d.h. da sowohl im Falle "X erfüllt", als auch im Fall "X nicht erfüllt" Anweisung1 ausgeführt wird, kann man einfach "Anweisung1;" ohne das IF ... ELSE-Konstrukt schreiben. Anweisung1; --- Beispiel für eine Summenformel in Pseudocode: Problem: Aufsummieren der Zahlen von 1 bis 10, d.h. 1 + 2 + 3 + 4 + 5 ... + 10 = ? ergebnis := 0; FOR anzahl := 1 TO 10 DO ergebnis := ergebnis + anzahl; ergebnis enthält am Ende der FOR-Schleifenausführung den o.a. Wert, 1 + 2 + 3 + 4... + 10 --- Wenn mehrere Anweisungen 1 ... 10 mal ausgeführt werden sollen, kann man diese Anweisungen wieder mit BEGIN ... END gruppieren: FOR anzahl := 1 TO 10 DO BEGIN Anweisung1; Anweisung2; ... END