einführung in die programierung - eth zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... ·...
TRANSCRIPT
![Page 1: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/1.jpg)
Chair of Software Engineering
Einführung in die Programierung
Prof. Dr. Bertrand Meyer
Lektion 8: Kontrollstrukturen I
![Page 2: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/4.jpg)
4
Nicht wirklich ein Algorithmus
![Page 5: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/7.jpg)
7
Aus was ein Algorithmus besteht
Grundlegende Schritte:
Featureaufruf x.f (a )
Zuweisung
...
Abfolge dieser grundlegenden Schritte:
KONTROLLSTRUKTUREN
(Eigentlich nichtviel mehr…)
![Page 8: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 Bausgehend.“
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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/10.jpg)
10
Die Sequenz (auch: Verbund (Compound ) )
instruction 1
instruction 2
...
instruction n
![Page 11: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/11.jpg)
11
Das Semikolon als optionale Trennung
instruction 1 ;
instruction 2 ;
... ;
instruction n
![Page 12: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 }
![Page 13: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/13.jpg)
13
Konditional (Bedingte Aufweisung)
if
Bedingung
then
Instruktionen
else
Andere_instruktionen
end
-- Boole‟scher Ausdruck
-- Verbund
-- Verbund
![Page 14: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/15.jpg)
15
Als Feature (Abfrage)
greater (a, b : INTEGER): INTEGER
-- Das Maximum von a und b.do
end
ifa > b
thenResult := a
elseResult := b
end
![Page 16: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/16.jpg)
16
Typischer Aufrufe
i, j, k, m, n: INTEGER
…
m := max (25, 32)
n := max (i + j, k)
![Page 17: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/18.jpg)
18
Grundform
if Bedingung then
Instruktionen
else
Other_instructions
end
![Page 19: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/19.jpg)
19
Eine Variante des Konditionals
if Bedingung thenInstruktionen
end
![Page 20: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 thenInstruktionen 4
else
end
![Page 22: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/22.jpg)
22
Eine verschachtelte Struktur
![Page 23: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/23.jpg)
23
Eine Kamm-ähnliche Struktur
![Page 24: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/25.jpg)
25
Eine Kamm-ähnliche Struktur
![Page 26: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/27.jpg)
27
Die Schleife
from
Initialization -- Verbund
variant
Variant_expression -- Integer expression
invariant
Invariant_expression -- Bedingung
until
Exit_condition -- Boole„scher Ausdruck
loop
Body -- Verbund
end
![Page 28: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/28.jpg)
28
Die volle Form der Schleife
from
Initialization -- Verbund
invariant
Invariant_expression -- Boole„scher Ausdruck
variant
Variant_expression -- Integer-Ausdruck
until
Exit_condition -- Boole„scher Ausdruck
loop
Body -- Verbund (Schleifenrumpf)
end
![Page 29: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/29.jpg)
29
Eine andere Schleifensyntax
![Page 30: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/30.jpg)
30
Die volle Form der Schleife
from
Initialization -- Verbund
invariant
Invariant_expression -- Boole„scher Ausdruck
variant
Variant_expression -- Integer-Ausdruck
until
Exit_condition -- Boole„scher Ausdruck
loop
Body -- Verbund
end
![Page 31: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/33.jpg)
33
Auf eine Liste anwendbare Operationen
item
before after
count
forth
index
start
(Der Zeiger)
1
![Page 34: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/36.jpg)
36
Ein anderes Beispiel (von „Example 7“)
from
Line8 start
invariant … variant … until Line8.after loop
if Line8 itemis_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)
end
Line8.forth
end
![Page 37: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/37.jpg)
37
Das „Maximum“ der Stationsnamen berechnen
fromfancy start ; Result := ""
until
fancy.after
loopResult := greater (Result, fancy item name)
fancy forthend
![Page 38: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/38.jpg)
38
Das „Maximum“ der Stationsnamen berechnen
fromfancy start ; Result := " "
untilfancy after
loopResult := greater (Result, fancy item name)
fancy.forth
end
Das (alphabetische) Maximum zweierZeichenketten berechnen, z.B.
greater ("ABC ", "AD ") = "AD"
![Page 39: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/39.jpg)
39
„Maximum“ zweier Zeichenketten
greater (a, b : STRING ): STRING
-- Das Maximum von a und b.do
end
ifa > b
thenResult := a
elseResult := b
end
![Page 40: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/40.jpg)
40
highest_name: STRING -- Alphabetisch grösste Stationsname der Linie
do
from
fancy.start ; Result := ""
until
fancy.after
loopResult := greater (Result, fancy.item.name)
fancy.forthend
end
In einer Feature
![Page 41: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/41.jpg)
41
Schleifenformen (in verschiedenen Sprachen)
from -- EiffelInstruktionen
untilBedingung
loopInstruktionen
end
while Bedingung do
Instruktionenend
repeat
Instruktionenuntil
Bedingungend
for i : a..b do
Instruktionenend
for (Instruktion; Bedingung; Instruktion) do
Instruktionenend
![Page 42: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/42.jpg)
42
Listen mit internem Zeiger
item
before after
countindex
start
1
Der Zeiger (Nur ein abstraktes Konzept!)
![Page 43: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/44.jpg)
44
Mit einem externem Zeiger programmieren
c : LINKED_LIST_CURSOR
…
create c.make (fancy)
from
c.start ; Result := ""
until
c.after
loopResult := greater (Result, c.item.name)c.forth
end
Wie vorher, mit cstatt fancy
![Page 45: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/46.jpg)
46
Schleifen als Annäherungsstrategie
name 1 name 2 name i name n
Result = name 1
Result = Max (names 1 2)
Result = Max (names 1 i )
Result = Max (names 1 n )
= Max (names 1 1) i := i + 1Result := greater
(Result , fancy.item.name)
Schleifenrumpf:
....
..
..
Teil
![Page 47: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
ensureResult /= Void and then not Result.empty
-- Result ist der Alphabetisch grösste Stationsname
-- der Linie
end
Nachbedingung?
![Page 48: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/48.jpg)
48
Das „Maximum“ der Stationsnamen berechnen
from
fancy.start ; Result := ""
until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der Alphabetisch grösste Stationsname der Linie
end
![Page 49: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/49.jpg)
49
from
fancy.start ; Result := ""invariant
fancy.index >= 1
fancy.index <= fancy.count-- Result ist der alphabetisch grösste Name aller-- bisherigen Stationen
until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der alphabetisch grösste Stationsnameend
Die Schleifeninvariante
+ 1
Fehlt etwas?
![Page 50: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/50.jpg)
50
Schleifen als Annäherungsstrategie
name 1 name 2 name i name n
Result = name 1
Result = Max (names 1 2)
Result = Max (names 1 i )
Result = Max (names 1 n )
= Max (names 1 1) i := i + 1Result := greater
(Result , fancy.item.name)
Schleifeninvariante
Schleifenrumpf:..
..
..
..
![Page 51: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/52.jpg)
52
from
fancy.start ; Result := ""invariant
fancy.index >= 1
fancy.index <= fancy.count + 1-- Result ist der alphabetisch grösste Name-- aller bisherigen Stationen
until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthensure
-- Result ist der alphabetisch grösste Stationsnameend
Die Schleifeninvariante
Result = Max (names 1 i )..
![Page 53: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
until
fancy.afterloop
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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/54.jpg)
54
from
fancy.start ; Result := ""
invariant
index >= 1
index <= count + 1
-- Result ist der grösste der bisherigen Namen
until
fancy.after
loop
Result := greater (Result, fancy.item.name)
fancy.forth
end
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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/55.jpg)
55
Quiz: Finde die Invariante
xxxx (a, b : INTEGER): INTEGER-- ?????????????????????????????????
requirea > 0 ; b > 0
localm, n : INTEGER
dofrom
m := a ; n := binvariant
-- “ ????????”variant
????????until m = n loop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 56: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
dofrom
m := a ; n := binvariant
-- “????????”variant
????????until
m = nloop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 57: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 H
Operation 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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
do
create dist.make (source.count, target.count)
from i := 0 until i > source.count loopdist [i, 0] := i ; i := i + 1
end
from j := 0 until j > target.count loop
dist [0, j ] := j ; j := j + 1end-- (Weitergeführt)
![Page 62: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 ] thendist [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
endi := i + 1
end
Result := dist (source.count, target.count)end
???
![Page 63: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/63.jpg)
63
Wie wissen wir, ob eine Schleife terminiert?
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.forthend
![Page 64: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
Wie wissen wir, ob eine Schleife terminiert?
![Page 65: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
Die Variante in unserem Beispiel
![Page 67: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/70.jpg)
70
terminates_if_not
![Page 71: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/74.jpg)
74
Flowcharts
a = b
Compound_2Compound_1
True False
![Page 75: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/76.jpg)
76
“Goto considered harmful”
Dijkstra, 1968
Willkü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 geschrieben
werden, in dem man Sequenzen und
Schleifen benutzt.
Beispiel zur Transformation
inTouch of Class
![Page 77: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/78.jpg)
78
Ein Eingang, ein Ausgang
(Verbund) (Schleife) (Konditional)
![Page 79: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/79.jpg)
79
Quiz: Finde die Invariante!
xxx (a, b: INTEGER): INTEGER is-- ?????????????????????????????????
requirea > 0 ; b > 0
localm, n : INTEGER
dofrom
m := a ; n := binvariant
-- “????????”variant
????????until
m = nloop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 80: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
dofrom
m := a ; n := binvariant
-- “????????”variant
????????until
m = nloop
if m > n thenm := m − n
elsen := n − m
endendResult := m
end
![Page 81: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 ] thennew := dist [ i -1, j -1]
elsedeletion := dist [i -1, j ]insertion := dist [i , j - 1]substitution := dist [i - 1, j - 1]
new := deletion.min (insertion.min (substitution)) + 1enddist [i, j ] := newj := j + 1
endi := 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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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
do
create dist.make (source.count, target.count)
from i := 0 until i > source.count loopdist [i, 0] := i ; i := i + 1
end
from j := 0 until j > target.count loop
dist [0, j ] := j ; j := j + 1end
-- (Weitergeführt)
![Page 83: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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 ] thennew := dist [ i -1, j -1]
elsedeletion := dist [i -1, j ]insertion := dist [i , j - 1]substitution := dist [i - 1, j - 1]
new := deletion.min (insertion.min (substitution)) + 1enddist [i, j ] := newj := j + 1
endi := 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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/html5/thumbnails/89.jpg)
89
Dann…
Wurzelprozedur des Systems:
what_do_you_think
-- Terminate nur, falls nein.
do
from
until
not terminates (“/usr/home/turing.e”)
loop
end
end
Speichern Sie diesen Programmtext in /usr/home/turing.e
![Page 90: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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: Einführung in die Programierung - ETH Zse.inf.ethz.ch/courses/2010b_fall/eprog/lectures/08... · 2011. 2. 25. · 2 In dieser (Doppel-) Lektion Der Begriff des Algorithmus Grundlegende](https://reader033.vdocuments.site/reader033/viewer/2022060713/607940ef26e5a62ff30f106b/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