Die Notwendigkeit für wiederholte Programmausführungen Agenda für heute, 5. März, 2009 • Aufgabe: Die Quadratwurzel einer positiven Zahl berechnen • Wiederholte Programmausführung • Einschränkung: g Es stehen nur arithmetische Operationen p zur Verfügung: *, /, +, - • Die Wiederholungsanweisungen von Pascal • Geschachtelte Programmschleifen g • Syntaxdiagramme Lesen Sie den Begleittext Kapitel 4 Programmieren und Problemlösen 2/16 Beispiel: c = 2 Variablen, Anweisungen, Schleifen x0 = 1 Die mathematischen Variablen xn x1 = 1/2 + 2/2 = 1.5 stellen wir durch die Variable x2 = 1.5/2 + 2/3 = 1.4166 var x3 = 1.4166/2 1 4166/2 + 2/2.8333 2/2 8333 = 1 1.4141 4141 © Departement Informatik, ETH Zürich x: real; d und dar d realisieren li i di die Bild Bildungsvorschrift h if fü für xn+1 mit i und so weiter . . . x:= x/2.0+c/(2.0*x); Aufgaben für die Implementierung dieses Verfahrens: Diese Anweisung muss für n = 1, 2, 3, . . . ausgeführt werden. 1. Darstellung der xn Wir müssen sie also für jedes n wiederholen. 2. Wiederholung der Bildungsvorschrift Pascal bietet verschiedene Möglichkeiten dies zu tun: 3. Abbrechen der Wiederholung Programmieren und Problemlösen 3/16 for-Anweisung, while-Anweisung, repeat-Anweisung © Departement Informatik, ETH Zürich Programmieren und Problemlösen 4/16 © Departement Informatik, ETH Zürich Die verschiedenen Wiederholungsanweisungen von Pascal • Wiederholte Programmausführung for Anfangswert to Endwert do Anweisungsfolge • Die Di Wiederholungsanweisungen Wi d h l i von Pascal P l f for A f Anfangswert t downto d t Endwert E d t do d Anweisungsfolge A i f l • Bedingungen zum Abbruch von Programmschleifen while Bedingung do Anweisungsfolge • Geschachtelte Programmschleifen repeat Anweisungsfolge until Bedingung • Syntaxdiagramme Die for-Schleife führt eine vorgegebene Anzahl Wiederholungen aus. aus Die Anzahl Wiederholungen der while- und repeat-Schleife wird durch Aktionen innerhalb der Schleife gesteuert. 5/16 Programmieren und Problemlösen Struktur der for-Anweisung © Departement Informatik, ETH Zürich Struktur der while-Anweisung Kontrollvariable (muss deklariert sein) while boolescher Ausdruck do Anweisung for Variable: Variable:= Ausdruck1 to Ausdruck2 do Anweisung Die Anweisung wird wiederholt solange ausgeführt wie der Wert der Kontrollvariablen kleiner als oder gleich dem Wert von Ausdruck2 ist. Beispiel: Die Anweisung wird wiederholt solange ausgeführt wie eine Auswertung des booleschen Ausdrucks den Wahrheitswert "true" ergibt. ergibt Beispiel: x:= 5; for i:= 0 to x do write(i*2) i:= 0; while i < 10 do begin Output: 0 2 4 6 8 10 write(i); i:= i + 1 end; O t t 0 1 2 3 4 5 6 7 8 9 Output: Programmieren und Problemlösen 6/16 © Departement Informatik, ETH Zürich Programmieren und Problemlösen 7/16 © Departement Informatik, ETH Zürich Struktur der repeat-Anweisung Newton-Verfahren mit einer while-Schleife repeat Anweisung until boolescher Ausdruck Führe Anweisung einmal aus und wiederhole solange bis eine Auswertung des booleschen Ausdrucks den Wahrheitswert "true" ergibt. ib Beispiel: i i:= 0 0; repeat write(i); i:= i + 1 until til i = 10 Output: 0 1 2 3 4 5 6 7 8 9 Programmieren und Problemlösen 8/16 program qwurzel; var c, x: real; Wiederholung der Bildungsvorschrift begin x:= 1.0; write('Wurzel aus: '); readln(c); while hile abs(x*x abs( * - c) > 1.0E-6 1 0E 6 do x:= x/2.0 + c/(2.0*x); writeln('Ergebnis writeln( Ergebnis = ',x:8:6); ,x:8:6); readln end. Die Schleife wird abgebrochen, wenn © Departement Informatik, ETH Zürich Programmieren und Problemlösen xn2 − c ≤ 1 1000000 9/16 © Departement Informatik, ETH Zürich 10/16 © Departement Informatik, ETH Zürich Mehrere Abbruchbedingungen • Wiederholte Programmausführung • Die Wiederholungsanweisungen von Pascal • Geschachtelte Programmschleifen • Syntaxdiagramme Anweisungsfolge wahr Abbruch? Programmieren und Problemlösen falsch Schachtelung am Beispiel der for-Anweisung Schachtelung am Beispiel der while-Anweisung Quersumme solange berechnen bis ein "q" eingegeben wird for i:= 1 to 3 do for j:= 1 to 10 do write(i*j) read(zahl); while zahl <> 'q' do begin summe:= 0; i i:= l length(zahl); th( hl) for j:= 1 to i do summe:= summe + ord(zahl[j]) - 48; writeln('Quersumme von ',zahl,': ',summe) end; for i:= 1 to 3 do begin for j:= 1 to 10 do write(i*j); writeln; end; Programmieren und Problemlösen 11/16 © Departement Informatik, ETH Zürich Programmieren und Problemlösen 12/16 © Departement Informatik, ETH Zürich Grundlagen der Syntaxdiagramme • Wiederholte Programmausführung • Die Wiederholungsanweisungen von Pascal • Geschachtelte Programmschleifen Elemente der Syntaxdiagramme Nicht-Terminalsymbole: Bezeichner • Syntaxdiagramme Terminalsymbole: ; Nicht-Terminalsymbole können durch andere Nicht-Terminalsymbole oder durch Terminalsymbole nach vorgegebenen Syntaxregeln ersetzt werden. Programmieren und Problemlösen 13/16 © Departement Informatik, ETH Zürich Grundlagen der Syntaxdiagramme Syntaxregeln am Beispiel "Programm" Produktionsregeln (gelten für Terminal- und Nicht-Terminalsymbole) Auswahl: Folge: Wiederholung: a b ... Buchstabe Y Z Buchstabe Bezeichner , Option: Bezeichner Programmieren und Problemlösen 14/16 © Departement Informatik, ETH Zürich Syntaxregeln am Beispiel "Bezeichner" Programmieren und Problemlösen 16/16 © Departement Informatik, ETH Zürich Programmieren und Problemlösen 15/16 © Departement Informatik, ETH Zürich