![Page 1: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/1.jpg)
Chair of Software Engineering
Einführung in die Programierung
Prof. Dr. Bertrand Meyer
Lektion 8: Kontrollstrukturen I
![Page 2: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/2.jpg)
2
In dieser (Doppel-) Lektion
Der Begriff des Algorithmus Grundlegende Kontrollstrukturen: Sequenz (sequence,
compound), Konditional (conditional), Schleife (loop) Bedingungsinstruktionen: Der Konditional und seine
Variante Operationen wiederholen: Die Schleife Schleifen als Annäherungsstrategie: Die
Schleifeninvariante Was braucht es, um sicherzustellen, dass eine Schleife
terminiert? Ein Blick auf das allgemeine Problem der
Programmterminierung Kontrollstrukturen auf einer tieferen Ebene: “Goto” und
Flowcharts; siehe Argument für die „Kontrollstrukturen der strukturierten Programmierung“
Das Entscheidungsproblem
Bitte lesen Sie Kapitel 8 von „Touch of Class“
![Page 3: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/3.jpg)
3
Der Begriff des Algorithmus
Allgemeine Definition:
Ein Algorithmus ist die Spezifikation eines Prozesses, der von einem Computer ausgeführt wird.
![Page 4: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/4.jpg)
4
Nicht wirklich ein Algorithmus
![Page 5: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/5.jpg)
5
5 Eigenschaften eines Algorithmus
1. Definiert die Daten, auf die der Prozess angewandt wird.
2. Jeder elementare Schritt wird aus einer Menge von genau definierten Aktionen ausgewählt.
3. Beschreibt die Reihenfolge der Ausführung dieser Schritte.
4. Eigenschaften 2 und 3 basieren auf genau festgelegten, für ein automatisches Gerät geeignete Konventionen
5. Er terminiert für alle Daten garantiert nach endlich vielen Schritten.
![Page 6: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/6.jpg)
6
Algorithmus vs Programm
“Algorithmus” bezeichnet allgemein einen abstrakteren Begriff, unabhängig von der Plattform, der Programmiersprache, etc.
In der Praxis ist der Unterschied jedoch eher geringer: Algorithmen brauchen eine präzise Notation Programmiersprachen werden immer abstrakter
Aber: In Programmen sind Daten (-objekte) genauso
wichtig wie Algorithmen Ein Programm beinhaltet typischerweise viele
Algorithmen und Objektstrukturen
![Page 7: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/7.jpg)
7
Aus was ein Algorithmus besteht
Grundlegende Schritte:
Featureaufruf x.f (a ) Zuweisung ...
Abfolge dieser grundlegenden Schritte:
KONTROLLSTRUKTUREN
(Eigentlich nicht viel mehr…)
![Page 8: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/8.jpg)
8
“Kontrollstrukturen des strukturierten Programmierens”
Kontrollstrukturen
Definition: Ein Programmkonstrukt, welches den Ablauf von Programmschritten beschreibt.
Drei fundamentale Kontrollstrukturen: Sequenz Schleife Konditional
Diese sind die
![Page 9: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/9.jpg)
9
Kontrollstrukturen als Techniken für die Problemlösung
Sequenz: “Um von C aus A zu erreichen, erreiche zuerst das Zwischenziel B von A aus, und dann C von B ausgehend.“
Schleife: „Löse das Problem mithilfe von aufeinanderfolgenden Annäherungen der Input-Menge.“
Conditional: „Löse das Problem separat für zwei oder mehrere Teilmengen der Input-Menge.“
![Page 10: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/10.jpg)
10
Die Sequenz (auch: Verbund (Compound ) )
instruction 1
instruction 2
...
instruction n
![Page 11: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/11.jpg)
11
Das Semikolon als optionale Trennung
instruction 1 ;
instruction 2 ;
... ;
instruction n
![Page 12: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/12.jpg)
12
Korrektheit eines Verbunds
Die Vorbedingung von instruction 1 muss zu Beginn erfüllt sein.
Die Nachbedingung von instruction i muss die Vorbedingung von instruction i + 1
implizieren.
Das Schlussresultat ist die Nachbedingung von instruction n
instruction 1
instruction 2
...
instruction i
...
instruction n
{P1
}{Q1
}{P2
}{Q2
}
{Pi
}{Qi
}
{Pn
}{Qn
}
impliziert
![Page 13: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/13.jpg)
13
Konditional (Bedingte Aufweisung)
ifBedingung
thenInstruktionen
else
Andere_instruktionenend
-- Boole’scher Ausdruck
-- Verbund
-- Verbund
![Page 14: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/14.jpg)
14
Das Maximum von zwei Zahlen ermitteln
if
a > b
then
max := a
else
max := b
end
![Page 15: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/15.jpg)
15
Als Feature (Abfrage)
greater (a, b : INTEGER): INTEGER-- Das Maximum von a und
b.do
end
ifa > b
then
Result := aelse
Result := bend
![Page 16: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/16.jpg)
16
Typischer Aufrufe
i, j, k, m, n: INTEGER
…
m := max (25, 32)
n := max (i + j, k)
![Page 17: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/17.jpg)
17
Der Konditional als Technik zur Problemlösung
Region 1
Region 2
PROBLEMRAUM
Benutze Technik 1
Benutze Technik 2
![Page 18: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/18.jpg)
18
Grundform
if Bedingung thenInstruktionen
elseOther_instructions
end
![Page 19: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/19.jpg)
19
Eine Variante des Konditionals
if Bedingung thenInstruktionen
end
![Page 20: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/20.jpg)
20
Ist semantisch äquivalent zu
if Bedingung thenInstruktionen
else
end
Eine Variante des Konditionals
if Bedingung thenInstruktionen
end
Leere Klausel
![Page 21: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/21.jpg)
21
Verschachtelung von bedingten Instruktionen
if Condition1 thenInstruktionen 1
else
end
if Condition2 then
Instruktionen 2
else
end
if Condition3 then
Instruktionen 3
else
end
...if Condition4 then
Instruktionen 4else
end
![Page 22: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/22.jpg)
22
Eine verschachtelte Struktur
![Page 23: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/23.jpg)
23
Eine Kamm-ähnliche Struktur
![Page 24: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/24.jpg)
24
Kamm-ähnlicher Konditional
if Condition1 thenInstruktionen 1
elseif Bedingung 2 thenInstruktionen 2
elseif Condition3 thenInstruktionen 3
elseif
...else
Instruktionen 0 end
![Page 25: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/25.jpg)
25
Eine Kamm-ähnliche Struktur
![Page 26: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/26.jpg)
26
Weitere Themen zu Kontrollstrukturen
Schleifen und ihre Invarianten
Was braucht es, um sicherzustellen, dass eine Schleife terminiert?
Ein Blick auf das allgemeine Problem der Schleifen- und Programmterminierung
Kontrollstrukturen auf einer tieferen Ebene: “Goto” und Flowcharts; siehe Argument für die „Kontrollstrukturen der strukturierten Programmierung“
Die Unentscheidbarkeit des Entscheidungsproblems beweisen
![Page 27: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/27.jpg)
27
Die Schleife
fromInitialization -- Verbund
variantVariant_expression -- Integer expression
invariantInvariant_expression -- Bedingung
untilExit_condition -- Boole‘scher Ausdruck
loopBody -- Verbund
end
![Page 28: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/28.jpg)
28
Die volle Form der Schleife
fromInitialization -- Verbund
invariantInvariant_expression -- Boole‘scher Ausdruck
variantVariant_expression -- Integer-Ausdruck
untilExit_condition -- Boole‘scher Ausdruck
loopBody -- Verbund
(Schleifenrumpf)end
![Page 29: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/29.jpg)
29
Eine andere Schleifensyntax
![Page 30: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/30.jpg)
30
Die volle Form der Schleife
fromInitialization -- Verbund
invariantInvariant_expression -- Boole‘scher Ausdruck
variantVariant_expression -- Integer-Ausdruck
untilExit_condition -- Boole‘scher Ausdruck
loopBody -- Verbund
end
![Page 31: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/31.jpg)
31
Über Stationen einer Linie iterieren („loopen“)
fromfancy start
untilfancy after
loop-- “Tu was mit fancyitem”fancy forth
end
Bis jetzt: fancy_lineIm Buch: Line8
![Page 32: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/32.jpg)
32
Auf eine Liste anwendbare Operationen
item
before after
count
forthback
index
start
Befehle
(boole’sche) Abfragen
1
Der Zeiger (cursor)
![Page 33: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/33.jpg)
33
Auf eine Liste anwendbare Operationen
item
before after
count
forth
index
start
(Der Zeiger)
1
![Page 34: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/34.jpg)
34
Über Stationen einer Linie iterieren („loopen“)
fromfancy start
untilfancy after
loop-- “Tu was mit fancy.item”
fancy forthend
![Page 35: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/35.jpg)
35
fromfancy start
untilfancy after
loop-- Den Namen der aktuellen Station
anzeigen:
Console.show (fancy.item)
fancy.forth
end
Die Stationsnamen anzeigen
![Page 36: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/36.jpg)
36
Ein anderes Beispiel (von „Example 7“)
fromLine8 start
invariant … variant … until Line8.after loopif Line8 item is_railway_connection then
show_big_red_spot (Line8 item location)elseif Line8 item is_exchange then
show_blinking_spot (Line8 item location)else
show_spot (Line8 item location)endLine8.forth
end
![Page 37: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/37.jpg)
37
Das „Maximum“ der Stationsnamen berechnen
fromfancy start ; Result := ""
until
fancy.afterloop
Result := greater (Result, fancy item name)
fancy forthend
![Page 38: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/38.jpg)
38
Das „Maximum“ der Stationsnamen berechnen
fromfancy start ; Result := " "
untilfancy after
loop Result := greater (Result, fancy item name)
fancy.forthend
Das (alphabetische) Maximum zweier Zeichenketten berechnen,
z.B.
greater ("ABC ", "AD ") = "AD"
![Page 39: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/39.jpg)
39
„Maximum“ zweier Zeichenketten
greater (a, b : STRING ): STRING-- Das Maximum von a und
b.do
end
ifa > b
then
Result := aelse
Result := bend
![Page 40: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/40.jpg)
40
highest_name: STRING -- Alphabetisch grösste Stationsname der
Liniedo
from
fancy.start ; Result := ""
untilfancy.after
loop Result := greater (Result,
fancy.item.name)
fancy.forthend
end
In einer Feature
![Page 41: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/41.jpg)
41
Schleifenformen (in verschiedenen Sprachen)from -- Eiffel
Instruktionenuntil
Bedingungloop
Instruktionenend
while Bedingung do
Instruktionenend
repeatInstruktionen
untilBedingung
endfor i : a..b do
Instruktionenend
for (Instruktion; Bedingung; Instruktion) do
Instruktionenend
![Page 42: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/42.jpg)
42
Listen mit internem Zeiger
item
before after
countindex
start
1
Der Zeiger (Nur ein abstraktes Konzept!)
![Page 43: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/43.jpg)
43
Externe Zeiger sind auch möglich
“AA”
before after
countindex
start
1
Der Zeiger
(Ein aktuelles Objekt)
“AA”
3
3
count6
item
“FF”
5
“FF”
5
6
Ein anderen Zeiger (auf dieselbe Liste)
![Page 44: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/44.jpg)
44
Mit einem externem Zeiger programmieren
c : LINKED_LIST_CURSOR…
create c.make (fancy)
from
c.start ; Result := ""until
c.afterloop
Result := greater (Result, c.item.name)c.forth
end
Wie vorher, mit c statt fancy
![Page 45: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/45.jpg)
45
Eine andere Eiffel Schleifenform
Diese Notation is eine Abkürzung für
across meine_liste as c loop
“Operation auf citem”
end
from cstart until cafter loop
“Operation auf c.item”
cforth
end
![Page 46: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/46.jpg)
46
Schleifen als Annäherungsstrategie
name
1
name
2
name
i
name n
Result = name 1Result = Max (names 1 2)
Result = Max (names 1 i )
Result = Max (names 1 n )
= Max (names 1 1)i := i + 1 R e s u lt := g r e a te r
( R e s u lt , fa n c y .i t e m .n a m e )
i := i + 1 Result := greater
(Result , fancy.item.name)
Schleifenrumpf:
Schleifenrumpf:..
..
..
..
Teil
![Page 47: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/47.jpg)
47
highest_name : STRING-- Alphabetisch grösste Stationsname der Linie
dofrom
fancy.start ; Result := ""until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
ensure Result /= Void and then not Result.empty
-- Result ist der Alphabetisch grösste Stationsname
-- der Linie
end
Nachbedingung?
![Page 48: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/48.jpg)
48
Das „Maximum“ der Stationsnamen berechnenfrom
fancy.start ; Result := ""
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der Alphabetisch grösste Stationsname der Linie
end
![Page 49: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/49.jpg)
49
from
fancy.start ; Result := ""invariant
fancy.index >= 1fancy.index <= fancy.count -- Result ist der alphabetisch grösste Name aller-- bisherigen Stationen
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der alphabetisch grösste Stationsnameend
Die Schleifeninvariante
+ 1
Fehlt etwas?
![Page 50: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/50.jpg)
50
Schleifen als Annäherungsstrategie
name
1
name
2
name
i
name n
Result = name 1Result = Max (names 1 2)
Result = Max (names 1 i )
Result = Max (names 1 n )
= Max (names 1 1)i := i + 1 R e s u lt := g r e a te r
( R e s u lt , fa n c y .i t e m .n a m e )
i := i + 1 Result := greater
(Result , fancy.item.name)
Schleifeninvariante
Schleifenrumpf:
Schleifenrumpf:..
..
..
..
![Page 51: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/51.jpg)
51
Die Schleifeninvariante
(Nicht zu verwechseln mit der Klasseninvariante)
Eine Eigenschaft, die:
Nach jeder Initialisierung (from-Klausel) erfüllt ist
Von jedem Schleifendurchlauf (loop-Klausel), bei der die Ausstiegsbedingung (until-Klausel) nicht erfüllt ist, eingehalten wird
Wenn die Ausstiegsbedingung erfüllt ist, das gewünschte Ergebnis sicherstellt
![Page 52: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/52.jpg)
52
from
fancy.start ; Result := ""invariant
fancy.index >= 1fancy.index <= fancy.count + 1-- Result ist der alphabetisch grösste Name-- aller bisherigen Stationen
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der alphabetisch grösste Stationsnameend
Die Schleifeninvariante
Result = Max (names 1 i )
..
![Page 53: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/53.jpg)
53
from
fancy.start ; Result := ""invariant
index >= 1index <= count + 1-- Falls es bisherige Stationen gibt, ist-- Result der alphabetisch Grösste ihrer Namen
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der alphabetisch grösste Stationsname, falls es -- eine Station gibt.
end
Eine bessere Schleifeninvariante
Result = Max (names 1 i )
..
![Page 54: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/54.jpg)
54
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- Result ist der grösste der bisherigen Namen
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
Der Effekt einer Schleife
Am Schluss: Invariante and Ausstiegsbedingung
• Alle Stationen besucht (fancy.after )
• Result ist der “grösste” Stationsname
Ausstiegsbedingung am Ende erfüllt
Invariant nach jedem Durchlauf
erfüllt.
Invariante nach der Initialisierung erfüllt.
![Page 55: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/55.jpg)
55
Quiz: Finde die Invariantexxxx (a, b : INTEGER): INTEGER
-- ?????????????????????????????????require
a > 0 ; b > 0local
m, n : INTEGERdo
fromm := a ; n := b
invariant-- “ ????????”
variant????????
until m = n loopif m > n then
m := m − nelse
n := n − mend
endResult := m
end
![Page 56: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/56.jpg)
56
Quiz: Finde die Invariante
euclid (a, b: INTEGER): INTEGER-- Grösster gemeinsamer Teiler von a und b
requirea > 0 ; b > 0
localm, n : INTEGER
do from
m := a ; n := binvariant
-- “????????”variant
????????until
m = nloop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 57: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/57.jpg)
57Intro. to Programming, lecture 11 (complement): Levenshtein
Ein weiteres Beispiel
MI C H A E L J A C K S O N
E N D S HOperation
S D S S S D D D D I
Von “Michael Jackson” nach “Mendelssohn”
Distanz 1 2 3 4 5 6 7 8 9 100
I H A
![Page 58: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/58.jpg)
58
Levenshtein-Distanz
B
Operation
Von “Beethoven” nach “Beatles”
Distanz
E E
A
E T N
S
NH V EO
L
OB E T H V E
0 0 1
R
1 2
D
3
R
4
D
5
R
4
![Page 59: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/59.jpg)
59
Levenshtein-Distanz
Auch als „Editierdistanz“ bekannt Bekant
Zweck: Die kleinste Menge von Grundoperationen
Einfügung (insertion) Löschung (deletion) Ersetzung (replacement)
bestimmen, so dass aus einer Zeichenkette eine andere wird.
Intro. to Programming, lecture 11 (complement): Levenshtein
![Page 60: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/60.jpg)
60
B E A T L E S
B
E
E
T
H
30 1 2 5 6 74
0
1
2
3
5
4
30 1 2 5 6 74
1
2
3
5
4
0 2 3 4 5 6
1
1
1
0 1 2 3 4 5
2 1 2 3 3 4
3 2 2 1 2 3 4
4 3 3 2 2 3 44
![Page 61: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/61.jpg)
61
Der Levenshtein-Distanz-Algorithmus
distance (source, target: STRING): INTEGER-- Minimale Anzahl Operationen, um source in target-- umzuwandeln
localdist : ARRAY_2 [INTEGER]i, j, del, ins, subst : INTEGER
docreate dist.make (source.count, target.count)from i := 0 until i > source.count loop
dist [i, 0] := i ; i := i + 1end
from j := 0 until j > target.count loopdist [0, j ] := j ; j := j + 1
end-- (Weitergeführt)
![Page 62: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/62.jpg)
62
Der Levenshtein-Distanz-Algorithmusfrom i := 1 until i > source.count loop
from j := 1 until j > target.count invariant
loop if source [i ] = target [ j ] then dist [i, j ] := dist [ i -1, j -1]
else deletion := dist [i -1, j ]
insertion := dist [i , j - 1]substitution := dist [i - 1, j - 1]
dist [i, j ] := minimum (deletion, insertion, substitution) + 1
endj := j + 1
end i := i + 1 endResult := dist (source.count, target.count)
end
???
![Page 63: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/63.jpg)
63
Wie wissen wir, ob eine Schleife terminiert?
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- Falls es bisherige Stationen gibt, ist-- Result der alphabetisch Grösste ihrer Namen
untilfancy.after
loopResult := greater (Result, fancy.item.name)
fancy.forthend
![Page 64: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/64.jpg)
64
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- Falls es bisherige Stationen gibt, ist-- Result der alphabetisch Grösste ihrer Namen
untilfancy.after
loopResult := greater (Result, fancy.item.name)
fancy.forthend
Wie wissen wir, ob eine Schleife terminiert?
![Page 65: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/65.jpg)
65
Die Schleifenvariante
Ein Integer-Ausdruck, der
Nach der Initialisierung (from) nicht-negativ sein darf
Sich bei jeder Ausführung des Schleifenrumpfs (loop), bei der die Ausstiegsbedingung nicht erfüllt ist, um mindestens eins verringern, aber trotzdem nicht-negativ bleiben muss.
![Page 66: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/66.jpg)
66
fancy.count − fancy.index + 1
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- Falls es bisherige Stationen gibt, ist-- Result der alphabetisch Grösste ihrer Namen
variant
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
Die Variante in unserem Beispiel
![Page 67: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/67.jpg)
67
Das allgemeine Entscheidungsproblem
Kann EiffelStudio herausfinden, ob Ihr Programm terminieren wird?
Leider nein
Auch kein anderes Programm kann dies für irgendeine
realistische Programmiersprache herausfinden!
![Page 68: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/68.jpg)
68
Das Entscheidungsproblem und Unentscheidbarkeit
(“Halting Problem”, Alan Turing, 1936.)
Es ist nicht möglich, eine effektive Prozedur zu schreiben, die herausfindet, ob ein beliebiges Programm mit beliebigem Input terminieren wird.
(Oder, im Speziellen, ob ein beliebiges Programm ohne Input terminiert.)
![Page 69: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/69.jpg)
69
Das Entscheidungsproblem in Eiffel
Nehmen Sie an, wir haben ein Feature
terminates (my_program: STRING ): BOOLEAN-- Terminiert my_program ?
do... Your algorithm here ...
end
![Page 70: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/70.jpg)
70
terminates_if_not
![Page 71: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/71.jpg)
71
Das Entscheidungsproblem in der Praxis
Manche Programme terminieren in gewissen Fällen nicht.
Das ist ein Bug!
Ihre Programme sollten in allen Fällen terminieren!
Benutzen Sie Varianten!
![Page 72: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/72.jpg)
72
Kontrollstrukturen auf Maschinenebene
Nicht-konditionaler Zweig:
BR label
Konditionaler Zweig, z.B.:
BEQ loc_a loc_b l abel
![Page 73: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/73.jpg)
73
Das Äquivalent zu if-then-else
BEQ loc_a loc_b 111
101 ... Code für Compound_2 ...
BR 125
111 ... Code für Compound_1 ...
125 ... Code für Rest des Programms ...
if a = b then Compound_1 else Compound_2 end
![Page 74: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/74.jpg)
74
Flowcharts
a = b
Compound_2Compound_1
True False
![Page 75: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/75.jpg)
75
In Programmiersprachen: Goto
test condition goto else_part
Compound_1
goto continue
else_part : Compound_2
continue : ... Continuation of program ...
a = b
Compound_2Compound_1
True False
![Page 76: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/76.jpg)
76
“Goto considered harmful”
Dijkstra, 1968Willkürliche Goto-Instruktionen führen zu unübersichtlichen, schwer zu wartenden Programmen (“spaghetti code”)
Böhm-Jacopini-Theorem: Jedes Programm, Das mit goto-Instruktionen und Konditionalen geschrieben werden kann,kann auch ohne goto‘s geschriebenwerden, in dem man Sequenzen undSchleifen benutzt.
Beispiel zur TransformationinTouch of Class
![Page 77: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/77.jpg)
77
Goto heute
Fast allgemein verschrien.Immer noch in einigen Programmiersprachen vorhanden.Es versteckt sich auch unter anderen Namen, z.B. break
loop...if c then break end...
end
![Page 78: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/78.jpg)
78
Ein Eingang, ein Ausgang
(Verbund) (Schleife) (Konditional)
![Page 79: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/79.jpg)
79
Quiz: Finde die Invariante!
xxx (a, b: INTEGER): INTEGER is-- ?????????????????????????????????
requirea > 0 ; b > 0
localm, n : INTEGER
do from
m := a ; n := binvariant
-- “????????”variant
????????until
m = nloop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 80: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/80.jpg)
80
Quiz: Finde die Invariante!
euclid (a, b: INTEGER): INTEGER is-- Grösster gemeinsamer Teiler von a und b
requirea > 0 ; b > 0
localm, n : INTEGER
do from
m := a ; n := binvariant
-- “????????”variant
????????until
m = nloop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 81: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/81.jpg)
81
Levenshtein, fortgesetzt
from i := 1 until i > source.count loop from j := 1 until j > target.count invariant
loop if source [i ] = target [ j ] then new := dist [ i -1, j -1]
else deletion := dist [i -1, j ] insertion := dist [i , j - 1] substitution := dist [i - 1, j - 1] new := deletion.min (insertion.min (substitution)) + 1
end dist [i, j ] := new
j := j + 1 end i := i + 1 end
Result := dist (source.count, target.count)
-- Für alle p : 1 .. i, q : 1 .. j –1, können wir source [1 .. p ]-- in target [1 .. q ] umwandeln mit dist [p, q ] Operationen
![Page 82: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/82.jpg)
82
Der Levenshtein-Distanz-Algorithmus
distance (source, target: STRING): INTEGER--- Minimale Anzahl Operationen, um source in target-- umzuwandeln
localdist: ARRAY_2 [INTEGER]i, j, new, deletion, insertion, substitution : INTEGER
docreate dist.make (source.count, target.count)from i := 0 until i > source.count loop
dist [i, 0] := i ; i := i + 1end
from j := 0 until j > target.count loopdist [0, j ] := j ; j := j + 1
end-- (Weitergeführt)
![Page 83: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/83.jpg)
83
Levenshtein , fortgesetzt
from i := 1 until i > source.count loop from j := 1 until j > target.count invariant
loop if source [i ] = target [ j ] then new := dist [ i -1, j -1]
else deletion := dist [i -1, j ] insertion := dist [i , j - 1] substitution := dist [i - 1, j - 1] new := deletion.min (insertion.min (substitution)) + 1
end dist [i, j ] := new
j := j + 1 end i := i + 1 end
Result := dist (source.count, target.count)
-- Für alle p : 1 .. i, q : 1 .. j –1, können wir source [1 .. p ]-- in target [1 .. q ] umwandeln mit dist [p, q ] Operationen
![Page 84: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/84.jpg)
84
Paradoxa in der Logik
Das Paradox von Russel: Manche Mengen sind Element von sich selber;
die Menge aller unendlichen Mengen ist z.B. selbst unendlich.
Manche Mengen sind nicht Element von sich selbst; die Menge aller endlichen Mengen ist z.B. nicht endlich.
Betrachten Sie die Menge aller Mengen, die sich nicht selbst enthalten.
Das Barbier-Paradox (Russel, leicht abgeändert) In Zürich gibt es einen Barbier, der alle Männer
rasiert, die sich nicht selbst rasieren. Wer rasiert den Barbier?
![Page 85: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/85.jpg)
85
Das Paradox von Grelling
In der deutschen Sprache ist ein Adjektiv “autologisch”, falls es sich selbst beschreibt (z.B.
“deutsch” oder „mehrsilbig“) “heterologisch” sonst
Was ist nun mit “heterologisch”?
Eine andere Form:
Die erste Aussage auf dieser Folie, die in rot erscheint, ist falsch
![Page 86: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/86.jpg)
86
Das Lügner-Paradox
(Sehr Alt!)
Epaminondas sagt, dass alle Kreter Lügner sind Epaminondas ist ein Kreter.
![Page 87: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/87.jpg)
87
Das Entscheidungsproblem und Unentscheidbarkeit
(“Halting Problem”, Alan Turing, 1936.)
Es ist nicht möglich, eine effektive Prozedur zu schreiben, die herausfindet, ob ein beliebiges Programm mit beliebigem Input terminieren wird.
(Oder, im Speziellen, ob ein beliebiges Programm ohne Input terminiert.)
![Page 88: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/88.jpg)
88
Das Entscheidungsproblem in Eiffel
Nehmen Sie an, wir haben ein Feature
terminates (my_program: STRING ): BOOLEAN-- Terminiert my_program ?
do... Your algorithm here ...
end
![Page 89: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/89.jpg)
89
Dann…
Wurzelprozedur des Systems:
what_do_you_think -- Terminate nur, falls nein.
dofromuntil
not terminates (“/usr/home/turing.e”)loopend
end
Speichern Sie diesen Programmtext in /usr/home/turing.e
![Page 90: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/90.jpg)
90
Das Entscheidungsproblem in der Praxis
Manche Programme terminieren in gewissen Fällen nicht.
Das ist ein Bug!
Ihre Programme sollten in jedem Fall terminieren!
Benutzen Sie Varianten!
![Page 91: Chair of Software Engineering Einführung in die Programierung Prof. Dr. Bertrand Meyer Lektion 8: Kontrollstrukturen I](https://reader036.vdocuments.site/reader036/viewer/2022062623/55204d7749795902118cc899/html5/thumbnails/91.jpg)
91
Was wir gesehen haben
Der Begriff des Algorithmus Grundlegende Eigenschaften Unterschied zu Programm
Der Begriff der KontrollstrukturKorrektheit einer InstruktionKontrollstruktur: SequenzKontrollstruktur: KonditionalVerschachtelung, und wie sich diese vermeiden
lässt