einführung in die programierung prof. dr. bertrand meyer
DESCRIPTION
Einführung in die Programierung Prof. Dr. Bertrand Meyer. Lektion 8: Kontrollstrukturen. In dieser (Doppel-)Lektion. Der Begriff des Algorithmus Grundlegende Kontrollstrukturen: Sequenz ( sequence , compound ), Konditional ( conditional ), Schleife ( loop ) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/1.jpg)
Chair of Software Engineering
Einführung in die Programierung
Prof. Dr. Bertrand Meyer
Lektion 8: Kontrollstrukturen
![Page 2: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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? Kontrollstrukturen auf einer tieferen Ebene: “Goto” und
Flussdiagramme (flowcharts); siehe Argument für die „Kontrollstrukturen der strukturierten Programmierung“
Das Entscheidungsproblem und die Unentscheidbarkeit der Programm-Terminierung
Bitte lesen Sie Kapitel 8 von Touch of Class
![Page 3: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/4.jpg)
4
Nicht wirklich ein Algorithmus
![Page 5: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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. Terminiert für alle Daten nach endlich vielen Schritten
![Page 6: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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 gering: 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: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/9.jpg)
9
Kontrollstrukturen als Techniken zur 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“
Konditional: „Löse das Problem separat für zwei oder mehrere Teilmengen der Input-Menge“
![Page 10: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/10.jpg)
10
Die Sequenz (auch: Verbund (Compound ) )
Instruktion 1
Instruktion 2
...
Instruktion n
![Page 11: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/11.jpg)
11
Eiffel: Das Semikolon als optionale Trennung
Instruktion 1 ;
Instruktion 2 ;
... ;
Instruktion n
![Page 12: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/12.jpg)
12
Korrektheit eines Verbunds
Die Vorbedingung von Instruktion 1 muss zu Beginn erfüllt sein
Die Nachbedingung von Instruktion i muss die Vorbedingung von Instruktion i + 1
implizieren
Das Schlussresultat ist die Nachbedingung von Instruktion n
Instruktion 1
Instruktion 2
...
Instruktion i
...
Instruktion n
{P1
}{Q1
}{P2
}{Q2
}
{Pi
}{Qi
}
{Pn
}{Qn
}
impliziert
![Page 13: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/13.jpg)
13
Konditional (Bedingte Instruktion)
ifBedingung
thenInstruktionen
else
Andere_Instruktionenend
-- Boole’scher Ausdruck
-- Verbund
-- Verbund
![Page 14: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/14.jpg)
14
Das Maximum von zwei Zahlen ermitteln
if
a > b
then
max := a
else
max := b
end
![Page 15: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/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
In einer beliebigen Klasse:
![Page 16: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/16.jpg)
16
Typische Aufrufe
i, j, k, m, n : INTEGER
…
m := greater (25, 32)
n := greater (i + j, k)
![Page 17: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/17.jpg)
17
Nicht im O-O Stil
greater (a, b : INTEGER): INTEGER-- Das Maximum von a und
b.do
end
ifa > b
then
Result := aelse
Result := bend
In einer beliebigen Klasse:
![Page 18: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/18.jpg)
18
Im O-O Stil
later (d : DATE ): DATE-- Das Späteste von Current
und d.do
end
ifd > Current
thenResult := d
elseResult :=
Currentend
In einer Klasse DATE :
![Page 19: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/19.jpg)
19
Der Konditional als Technik zur Problemlösung
Region 1
Region 2
PROBLEMRAUM
Benutze Technik 1
Benutze Technik 2
![Page 20: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/20.jpg)
20
Grundform
if Bedingung thenInstruktionen
elseandere_Instruktionen
end
![Page 21: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/21.jpg)
21
Ist semantisch äquivalent zu
if Bedingung thenInstruktionen
else
end
Eine Variante des Konditionals
if Bedingung thenInstruktionen
end
Leere Klausel
![Page 22: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/22.jpg)
22
Früheres Beispiel
later (d : DATE ): DATE-- Das Späteste von Current
und d.do
end
if d > Current thenResult := d
elseResult := Current
end
![Page 23: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/23.jpg)
23
Eine mögliche Variante
later (d : DATE ): DATE-- Das Späteste von Current
und d.do
end
Result := Current
if d > Current then
Result := d
end
![Page 24: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/24.jpg)
24
Ein anderes Beispiel
is_greater (a, b : INTEGER): BOOLEAN-- Ist a grösser als b?
do
end
ifa > b
then
Result := Trueend
![Page 25: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/25.jpg)
25
Featuredeklaration
Klassennamen
Kommentar
Featurerumpf
Featurenamen
Erinnerung: Verschachtelung* (von Lektion 3)
class PREVIEW inherit ZURICH_MAP
feature explore
-- Die Stadt erkunden.do
Central_view highlight
Zurich_map animate
endend
Instruktionen
*Engl: Embedding
![Page 26: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/26.jpg)
26
Verschachtelung von bedingten Instruktionen
if Bedingung1 thenInstruktionen 1
else
end
if Bedingung2 then
Instruktionen 2
else
end
if Bedingung3 then
Instruktionen 3
else
end
...if Bedingung4 then
Instruktionen 4else
end
![Page 27: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/27.jpg)
27
Eine verschachtelte Struktur
![Page 28: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/28.jpg)
28
Eine Kamm-ähnliche Struktur
![Page 29: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/29.jpg)
29
Kamm-ähnlicher Konditional
if Bedingung1 thenInstruktionen 1
elseif Bedingung 2 thenInstruktionen 2
elseif Bedingung3 thenInstruktionen 3
elseif
...else
Instruktionen 0 end
![Page 30: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/30.jpg)
30
Eine Kamm-ähnliche Struktur
![Page 31: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/31.jpg)
31
Auch in Eiffel: «Inspect» (Multi-branch)
inspecteingabe
when “E” then Instruktionen 1
when “K” then Instruktionen 2
…else
Instruktionen 0
end
CHARACTER oder INTEGER
Falls else-Zweig fehlt oder kein anderer Zweig zutrifft: Ausnahme
![Page 32: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/32.jpg)
32
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 Flussdiagramme (flowcharts); siehe Argument für die „Kontrollstrukturen der strukturierten Programmierung“
Die Unentscheidbarkeit des Entscheidungsproblems beweisen
![Page 33: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/33.jpg)
33
Die Schleife
fromInitialisierung -- Verbund
untilAbbruchbedingung -- Boole‘scher Ausdruck
loopRumpf -- Verbund
end
![Page 34: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/34.jpg)
34
Die volle Form der Schleife
fromInitialisierung -- Verbund
invariantinvarianter Ausdruck -- Boole‘scher Ausdruck
variantvarianter Ausdruck -- Integer-Ausdruck
untilAbbruchbedingung -- Boole‘scher Ausdruck
loopRumpf -- Verbund
(Schleifenrumpf)end
![Page 35: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/35.jpg)
35
Eine andere Schleifensyntax
![Page 36: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/36.jpg)
36
Schleifenformen (in verschiedenen Sprachen)from -- Eiffel
Initialisierunguntil
Bedingungloop
Rumpfend
while Bedingung do
Instruktionenendrepeat
Instruktionenuntil
Bedingungend
for i : a..b doInstruktionen
end
for (Instruktion; Bedingung; Instruktion) do
Instruktionenend
across -- EiffelStruktur as var
loopInstruktionen -- Auf var
end
![Page 37: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/37.jpg)
37
In Eiffel (volle Form)
fromInitialisierung -- Verbund
invariantinvarianter Ausdruck -- Boole‘scher Ausdruck
variantvarianter Ausdruck -- Integer-Ausdruck
untilAbbruchbedingung -- Boole‘scher Ausdruck
loopRumpf -- Verbund
(Schleifenrumpf)end
![Page 38: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/38.jpg)
38
Über Stationen einer Linie iterieren („loopen“)
fromLine8 start
untilLine8 after
loop-- “Mach was mit Line8 item.”Line8 forth
end
![Page 39: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/39.jpg)
39
Auf eine Liste anwendbare Operationen
item
before after
count
forthback
index
start
Befehle
(boole’sche) Abfragen
1
Der Zeiger (cursor)
![Page 40: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/40.jpg)
40
Auf eine Liste anwendbare Operationen
item
before after
count
forth
index
start
(Der Zeiger)
1
![Page 41: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/41.jpg)
41
Das Problem mit internen Zeigern
has_duplicates: BOOLEAN-- Hat Linie 8 Duplikate?
locals: STATION
dofrom
Line8.startuntil
Line8.after or Resultloop
s := Line8.itemLine8.forth-- Überprüfen, ob s nochmals in der Linie
vorkommt:Line8.search (s)Result := not Line8.after
endend
search verändert den Zeiger ebenfalls!
Die Zeigerposition muss immer gespeichert und
wiederhergestellt werden
![Page 42: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/42.jpg)
42
Listen mit internem Zeiger
item
before after
countindex
start
1
Der Zeiger (Hier nur ein abstraktes Konzept!)
![Page 43: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/43.jpg)
43
Listen mit externem Zeiger
“AA”
before after
countindex
start
1
Der Zeiger
(Ein aktuelles Objekt)
“AA”
3
3
count6
item
“FF”
5
“FF”
5
6
Ein anderer Zeiger (auf dieselbe Liste)
![Page 44: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/44.jpg)
44
Über Stationen einer Linie iterieren (1)
fromLine8 start
untilLine8 after
loop-- “Mach was mit Line8 item.”Line8 forth
end
Mit internem Zeiger (Erinnerung):
![Page 45: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/45.jpg)
45
Über Stationen einer Linie iterieren (2)
localc : like Line8new_cursor
dofrom
c := Line8new_cursoruntil
cafterloop
-- “Mach was mit citem”cforth
endend
Die Zeiger-VariableDerselbe Typ wie Line8new_cursor
Ein neu erzeugter Zeiger, der auf das erste Element zeigt
Mit externem Zeiger:
![Page 46: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/46.jpg)
46
Über Stationen einer Linie iterieren (3)
acrossLine8 as c
loop-- “Mach was mit citem”
end
Die gleiche Wirkung wie (2), aber kürzer!
![Page 47: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/47.jpg)
47
acrossLine8 as c
loop-- Den Namen der aktuellen Station anzeigen.console output (c item)
end
Die Stationsnamen anzeigen
![Page 48: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/48.jpg)
48
Ein anderes Beispiel
-- Alle Anschluss-Stationen der Linie 8 anzeigen:across
Line8 as cloop
if c item is_exchange thenconsole output (c item)
Zurich_map station_view (c item name)
highlightend
end
![Page 49: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/49.jpg)
49
Das „Maximum“ der Stationsnamen berechnen
Result := ""across
Line8 as cloop
Result := greater (Result, citemname)end
Das (alphabetische) Maximum zweier Zeichenketten berechnen,
z.B.
greater ("ABC ", "AD ") = "AD"
![Page 50: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/50.jpg)
50
„Maximum“ zweier Zeichenketten
greater (a, b : STRING ): STRING-- Das Maximum von a und
b.do
end
ifa > b
then
Result := aelse
Result := bend
![Page 51: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/51.jpg)
51
highest_name: STRING -- Alphabetisch grösster Stationsname der Linie.
doResult := ""across
Line8 as cloop
Result := greater (Result, c item name)end
end
In einem Feature
![Page 52: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/52.jpg)
52
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 , c .i t e m .n a m e )
i := i + 1 Result := greater
(Result , c.item.name)
Schleifenrumpf:
Schleifenrumpf:..
..
..
..
Teil
![Page 53: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/53.jpg)
53
highest_name: STRING -- Alphabetisch grösster Stationsname der Linie.
doResult := ""across
Line8 as cloop
Result := greater (Result, c.item.name)end
ensure Result /= Void-- Result ist der alphabetisch grösste
Stationsname -- der Linie
end
Nachbedingung?
![Page 54: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/54.jpg)
54
Das „Maximum“ der Stationsnamen berechnenfrom
c := Line8 new_cursor ; Result := ""
until
c.after
loop
Result := greater (Result, c item name)
c forthensure
-- Result ist der alphabetisch grösste Stationsname der Linie.end
![Page 55: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/55.jpg)
55
Die Schleifeninvariante
from
c := Line8 new_cursor ; Result := ""
until
c after
invariant
c index >= 1
c index <= Line8 count
-- Result ist der alphabetisch grösste Name aller-- bisherigen Stationen
loop
Result := greater (Result, c item name)
c forthensure
-- Result ist der alphabetisch grösste Stationsname der Linie
end
+ 1
Fehlt etwas?
![Page 56: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/56.jpg)
56
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 , c .i t e m .n a m e )
i := i + 1 Result := greater
(Result , c.item.name)
Schleifeninvariante
Schleifenrumpf:
Schleifenrumpf:..
..
..
..
![Page 57: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/57.jpg)
57
Die Schleifeninvariante
(Nicht zu verwechseln mit der Klasseninvariante)
Eine Eigenschaft, die:
Nach der 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 58: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/58.jpg)
58
Die Schleifeninvariante
.Die mögliche Lösung(en)
Die Invariante
Der vorhergehende
Zustand
Die Initialisierung
Die Abbruchbedingung
Der Rumpf
Der Rumpf
![Page 59: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/59.jpg)
59
from
c := Line8 new_cursor ; Result := ""
until
c.after
invariant
c index >= 1
c index <= Line8 count
-- Result ist der alphabetisch grösste Name aller-- bisherigen Stationen
loop
Result := greater (Result, c item name)
c forthensure
-- Result ist der alphabetisch grösste Stationsname der Linie
end
Die Schleifeninvariante
Result = Max (names 1 i )
..
![Page 60: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/60.jpg)
60
from
c := Line8 new_cursor ; Result := ""
until
c.after
invariant
c index >= 1
c index <= Line8 count -- Falls es bisherige Stationen gibt, ist-- Result der alphabetisch grösste ihrer Namen.
loop
Result := greater (Result, c item name)
c forthensure
-- Result ist der alphabetisch grösste Stationsname, falls es-- eine Station gibt.
end
Die Schleifeninvariante
Result = Max (names 1 i )
..
![Page 61: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/61.jpg)
61
fromc := Line8.new_cursor ; Result := ""
invariantc.index >= 1c.index <= Line8.count + 1-- Result ist der grösste der bisherigen Namen.
untilc.after
loop Result := greater (Result, c.item.name)
c.forthend
Der Effekt einer Schleife
Am Schluss: Invariante and Ausstiegsbedingung
• Alle Stationen besucht (c.after )
• Result ist der “grösste” Stationsname
Ausstiegsbedingung am Ende erfüllt
Invariante nach jedem Durchlauf
erfüllt.
Invariante nach der Initialisierung erfüllt.
![Page 62: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/62.jpg)
62
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 63: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/63.jpg)
63
Quiz: Finde die Invarianteeuclid (a, b : INTEGER): INTEGER
-- Grösster gemeinsamer Teiler von a und b.require
a > 0 ; b > 0local
m, n : INTEGERdo
fromm := a ; n := b
invariant-- “ ????????”
variant????????
untilm = n
loopif m > n then
m := m − nelse
n := n − mend
endResult := m
end
![Page 64: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/64.jpg)
64
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 65: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/65.jpg)
65
Ein weiteres Beispiel
MI C H A E L J A C K S O N
E N D S HOperation
R D R S R D D D D I
Von “Michael Jackson” nach “Mendelssohn”
Distanz 1 2 3 4 5 6 7 8 9 100
I H AM E L OS N
![Page 66: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/66.jpg)
66
Levenshtein-Distanz
Auch als „Editierdistanz“ (edit distance) bekannt
Zweck: Die kleinste Menge von Grundoperationen
Einfügung (I - insertion) Löschung (D - deletion) Ersetzung (R - replacement)
bestimmen, so dass aus einer Zeichenkette eine andere wird
![Page 67: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/67.jpg)
67
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 68: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/68.jpg)
68
Der Levenshtein-Distanz-Algorithmus (1)
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-- (Fortsetzung folgt)
![Page 69: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/69.jpg)
69
Der Levenshtein-Distanz-Algorithmus (2)from 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 70: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/70.jpg)
70
Levenshtein: Die Invariante
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 71: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/71.jpg)
71
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
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 2I
I
Insert
D
DDelete
R
ReplaceR
Invariante: jeder dist [i, j ] istdie Distanz von source [1..i ]nach target [1..j ]
![Page 72: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/72.jpg)
72
fromc := Line8 new_cursor ; Result := ""
invariantc index >= 1c index <= Line8 count + 1-- Result ist der grösste der bisherigen Namen.
untilc after
loopResult := greater (Result, c item name)c forth
end
Wie wissen wir, ob eine Schleife terminiert?
![Page 73: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/73.jpg)
73
Die Schleifenvariante
Ein Integer-Ausdruck, der
Nach der Initialisierung (from) nicht-negativ ist
Sich bei jeder Ausführung des Schleifenrumpfs(bei der die Ausstiegsbedingung nicht erfüllt ist)um mindestens eins verringert, aber nicht-negativ bleibt
![Page 74: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/74.jpg)
74
Line8 count – c index + 1
fromc:= Line8 new_cursor ; Result := ""
invariantc index >= 1c index <= Line8 count + 1-- Result ist der grösste der bisherigen Namen.
until
c.after
loop
Result := greater (Result, c item.name)
c forthvariant
end
Die Variante in unserem Beispiel
![Page 75: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/75.jpg)
75
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 76: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/76.jpg)
76
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 77: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/77.jpg)
77
Das Entscheidungsproblem in Eiffel
Nehmen Sie an, wir haben ein Feature
terminiert (datei : STRING ): BOOLEAN-- Ist es der Fall, dass das in datei -- gespeicherte Programm terminiert
?require
enthält_programm (datei )do
... Ihr Algorithmus ...end
![Page 78: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/78.jpg)
78
Dann…
Wurzelprozedur des Systems:
terminiert_wenn_nicht-- Terminiert nur, falls nein.
dofromuntil
not terminiert (“/usr/home/turing.e”)loopend
end
Dann: wir speichern diesen Programmtext in /usr/home/turing.e
![Page 79: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/79.jpg)
79
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 eine Friseurin, die alle Frauen
schminkt, die sich nicht selbst schminken Wer schminkt diese Friseurin?
![Page 80: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/80.jpg)
80
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 81: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/81.jpg)
81
Das Lügner-Paradox
(Sehr alt!)
Epaminondas sagt, dass alle Kreter Lügner sind Epaminondas ist ein Kreter
![Page 82: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/82.jpg)
82
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!
Das generelle Unentscheidbarkeit-Theorem verhindert nicht, die Terminierung eines spezifischen Programms zu beweisen
![Page 83: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/83.jpg)
83
Kontrollstrukturen auf Maschinenebene
Nicht-konditionaler Zweig:
BR label
Konditionaler Zweig, z.B.:
BEQ loc_a loc_b label
![Page 84: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/84.jpg)
84
Das Äquivalent zu if-then-else
BEQ loc_a loc_b 111
101 ... Code für Verbund_2 ...
BR 125
111 ... Code für Verbund_1 ...
125 ... Code für Rest des Programms ...
if a = b then Verbund_1 else Verbund_2 end
![Page 85: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/85.jpg)
85
Flussdiagramme (flowcharts)
a = b
Compound_2Compound_1
True False
![Page 86: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/86.jpg)
86
In Programmiersprachen: Goto
test Bedingung goto else_part
Verbund_1
goto continue
else_part : Verbund_2
continue : ... Fortsetzung des Programms...
a = b
Compound_2Compound_1
True False
![Page 87: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/87.jpg)
87
“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, indem man Sequenzen undSchleifen benutzt.
Beispiel zur TransformationinTouch of Class
![Page 88: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/88.jpg)
88
Goto heute
Fast allgemein verschrienImmer noch in einigen Programmiersprachen vorhanden.Es versteckt sich auch unter anderen Namen, z.B. break
loop...if c then break end...
end
![Page 89: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/89.jpg)
89
Ein Eingang, ein Ausgang
(Verbund) (Schleife) (Konditional)
![Page 90: Einführung in die Programierung Prof. Dr. Bertrand Meyer](https://reader036.vdocuments.us/reader036/viewer/2022062422/56813ad6550346895da31732/html5/thumbnails/90.jpg)
90
Was wir in dieser Vorlesung gesehen haben
Der Begriff des Algorithmus• Grundlegende Eigenschaften• Unterschied zu einem Programm
Der Begriff der Kontrollstruktur Korrektheit einer Instruktion Kontrollstrukturen der Strukturierten
Programmierung:• Sequenz• Konditional• Kontrollstruktur: Konditional
Verschachtelung, und wie sich diese vermeiden lässt
Korrektheit von Schleifen: Invariante & Variante Das Enstscheidungsproblem und
Unentscheidbarkeit