Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer
Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer
description
Transcript of Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer
![Page 1: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/1.jpg)
Chair of Software Engineering
Einführung in die ProgrammierungIntroduction to Programming
Prof. Dr. Bertrand Meyer
Lecture 8: Control Structures
![Page 2: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/2.jpg)
2
In this (double) lecture The notion of algorithm Basic control structures: sequence, conditional,
loop Decision structures: variants of conditional
instruction Repeating operations: the loop Loops as approximation strategy: the loop invariant What does it take to ensure that a loop
terminates? A look at the general problem of loop termination Lower-level control structures: “Goto” and
flowcharts; see rationale for the “control structures of Structured Programming”
Undecidability of the Halting Problem
![Page 3: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/3.jpg)
3
The notion of algorithmGeneral definition:
An algorithm is the specification of a process to be carried out by a computer
![Page 4: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/4.jpg)
4
Not quite an algorithm
![Page 5: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/5.jpg)
5
5 properties of an algorithm 1. Defines data to which process will be applied
2. Every elementary step taken from a set of well-specified actions
3.Describes ordering(s) of execution of these steps
4. 2 and 3 based on precisely defined conventions, suitable for execution by an automatic computer
5. For any data, guaranteed to terminate after finite number of steps
![Page 6: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/6.jpg)
6
Algorithm vs program“Algorithm” usually considered a more abstract notion, independent of platform, programming language etc.
In practice, the distinction tends to fade: Algorithms need a precise notation Programming languages becoming more abstract
However: In programs, data (objects) are just as important
as algorithms A program typically contains many algorithms
and object structures
![Page 7: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/7.jpg)
7
What makes up an algorithmBasic steps:
Feature call x.f (a ) Assignment ...
Sequencing of these basic steps:
CONTROL STRUCTURES
![Page 8: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/8.jpg)
8
Control structuresDefinition: program construct that describes the scheduling of basic actions
Three fundamental control structures: Sequence Loop Conditional
They are the“Control structures of Structured Programming”
![Page 9: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/9.jpg)
9
Control structures as problem-solving techniques
Sequence: “To achieve C from A, first achieve an intermediate goal B from A, then achieve C from B”
Loop: solve the problem on successive approximations of its input set
Conditional: solve the problem separately on two or more subsets of its input set
![Page 10: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/10.jpg)
10
The sequence (or Compound)
instruction 1
instruction 2
...
instruction n
![Page 11: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/11.jpg)
11
Semicolon as optional separator
instruction1 ;
instruction2 ;
... ;
instructionn
![Page 12: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/12.jpg)
12
Not quite an algorithm
![Page 13: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/13.jpg)
13
Correctness of a Compound
Precondition of instruction 1 must hold initially
Postcondition of each instruction i must imply precondition of each instruction i + 1
Final effect is postcondition of instruction n
![Page 14: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/14.jpg)
14
Conditional instruction
ifCondition
thenInstructions
elseOther_instructions
end
-- Boolean_expression
-- Compound
-- Compound
![Page 15: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/15.jpg)
15
Computing the greater of two numbers
ifa > b
thenmax := a
elsemax := b
end
![Page 16: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/16.jpg)
16
As a query
maximum (a, b : INTEGER): INTEGER-- The higher of a and b.
do
end
ifa > b
then
Result := aelse
Result := b
end
![Page 17: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/17.jpg)
17
The conditional as problem-solving technique
Region 1
Region 2
PROBLEM SPACE
Use technique 1
Use technique 2
![Page 18: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/18.jpg)
18
Basic form
if Condition thenInstructions
elseOther_instructions
end
![Page 19: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/19.jpg)
19
A variant of the conditional
if Condition thenInstructions
end
![Page 20: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/20.jpg)
20
Means the same asif Condition then
Instructionselse
end
A variant of the conditional
if Condition thenInstructions
end
Empty clause
![Page 21: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/21.jpg)
21
Nesting
if Condition1 thenInstructions1
else
end
if Condition2 thenInstructions2
else
end
if Condition3 thenInstructions3
else
end
...
![Page 22: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/22.jpg)
22
Nested structure
![Page 23: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/23.jpg)
23
Comb-like structure
![Page 24: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/24.jpg)
24
Comb-like conditional
if Condition1 thenInstructions 1
elseif Condition 2 thenInstructions 2
elseif Condition3 thenInstructions 3
elseif...
else Instructions 0
end
![Page 25: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/25.jpg)
25
Comb-like structure
![Page 26: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/26.jpg)
26
More control structure topics Loops and their invariants
See what it takes to ensure that a loop terminates
Look at the general problem of loop termination
Examine lower-level control structures: “Goto” and flowcharts; see rationale for the “control structures of Structured Programming”
Prove the undecidability of the Halting Problem
![Page 27: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/27.jpg)
27
Loopfrom
Initialization -- Compoundvariant
Variant_expression -- Integer expressioninvariant
Invariant_expression -- Conditionuntil
Exit_condition -- Boolean_expressionloop
Body -- Compoundend
![Page 28: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/28.jpg)
28
Loop, full formfrom
Initialization -- Compoundinvariant
Invariant_expression -- Boolean_expressionvariant
Variant_expression -- Integer_expressionuntil
Exit_condition -- Boolean_expressionloop
Body -- Compoundend
![Page 29: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/29.jpg)
29
Another loop syntax
![Page 30: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/30.jpg)
30
Loop, full formfrom
Initialization -- Compoundinvariant
Invariant_expression -- Boolean_expressionvariant
Variant_expression -- Integer_expressionuntil
Exit_condition -- Boolean_expressionloop
Body -- Compoundend
![Page 31: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/31.jpg)
31
Looping over stations of a linefrom
fancy.startuntil
fancy.afterloop
-- “Do something with fancy.item”fancy.forth
end
Previously and in the textbook: fancy_line
![Page 32: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/32.jpg)
32
Operations on a list
item
before after
count
forthback
index
startCommandsQueries
(boolean)
1
(The cursor)
![Page 33: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/33.jpg)
33
Operations on a list
item
before after
count
forth
index
start
(The cursor)
1
![Page 34: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/34.jpg)
34
Looping over stations of a linefrom
fancy.startuntil
fancy.afterloop
-- “Do something with fancy.item”
fancy.forthend
![Page 35: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/35.jpg)
35
fromfancy.start
untilfancy.after
loop-- Display name of next station:
Console.show (fancy.item)
fancy.forthend
Displaying station names
![Page 36: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/36.jpg)
36
Computing the “maximum” of station namesfrom
fancy.start ; Result := ""until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
![Page 37: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/37.jpg)
37
AssignmentResult := "XYZ "
-- Change the value of Result to "XYZ "
![Page 38: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/38.jpg)
38
Computing the “maximum” of station namesfrom
fancy.start ; Result := " "until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
The greater of two strings, alphabetically, e.g.
greater ("ABC ", "AD ") = "AD"
![Page 39: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/39.jpg)
39
highest_name: STRING -- Alphabetically greatest station name of
linedo
fromfancy.start ; Result := ""
untilfancy.after
loop Result := greater (Result,
fancy.item.name)
fancy.forthend
end
In a function
![Page 40: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/40.jpg)
40
highest_name: STRING-- Alphabetically greatest station name of line
dofrom
fancy.start ; Result := ""until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
ensure Result /= Void and then not Result.empty
end
Postcondition?
![Page 41: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/41.jpg)
41
Loop as approximation strategy
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 Result := greater
(Result , fancy.item.name)
Loop body:..
....
..
Slice
![Page 42: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/42.jpg)
42
Computing the “maximum” of station namesfrom
fancy.start ; Result := ""
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
![Page 43: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/43.jpg)
43
fromfancy.start ; Result := ""
invariantfancy.index >= 1fancy.index <= fancy.count + 1-- Result is the alphabetically highest of the-- names of previous stations
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The loop invariant
![Page 44: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/44.jpg)
44
Loop as approximation strategy
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 Result := greater
(Result , fancy.item.name)
The loop invariant
Loop body:..
....
..
![Page 45: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/45.jpg)
45
Loop invariant(Do not confuse with class invariant)
Property that is:
Satisfied after initialization (from clause)
Preserved by every loop iteration (loop clause) executed with the exit condition (until clause)not satisfied
![Page 46: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/46.jpg)
46
fromfancy.start ; Result := ""
invariantfancy.index >= 1fancy.index <= fancy.count + 1-- Result is the alphabetically highest of the-- names of previous stations
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The loop invariant
Result = Max (names 1 n )
..
![Page 47: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/47.jpg)
47
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- If there are any previous stations,-- Result is the alphabetically highest of their names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The loop invariant (better)
![Page 48: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/48.jpg)
48
Loop as approximation strategy
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 Result := greater
(Result , fancy.item.name)
The loop invariant
Loop body:..
....
..
![Page 49: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/49.jpg)
49
highest_name : STRING -- Alphabetically greatest station name of
linedo
fromfancy.start ; Result := ""
untilfancy.after
loop Result := greater (Result,
fancy.item.name)
fancy.forthend
end
In a function
![Page 50: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/50.jpg)
50
highest_name: STRING-- Alphabetically greatest station name of line
dofrom
fancy.start ; Result := ""until
fancy.afterloop
Result := greater (Result, fancy.item.name)
fancy.forthend
ensure Result /= Void and then not Result.empty
end
Postcondition?
![Page 51: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/51.jpg)
51
Loop as approximation strategy
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 Result := greater
(Result , fancy.item.name)
The loop invariant
Loop body:..
....
..
![Page 52: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/52.jpg)
52
fromfancy.start ; Result := ""
invariantfancy.index >= 1fancy.index <= fancy.count + 1-- Result is the alphabetically highest of the-- names of previous stations
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The loop invariant
![Page 53: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/53.jpg)
53
Loop invariant(Do not confuse with class invariant)
Property that is:
Satisfied after initialization (from clause)
Preserved by every loop iteration (loop clause) when executed with the exit condition (until clause) not satisfied
![Page 54: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/54.jpg)
54
fromfancy.start ; Result := ""
invariantfancy.index >= 1fancy.index <= fancy.count + 1 -- Result is highest of previous station names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The loop invariant
![Page 55: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/55.jpg)
55
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- If there are any previous stations,-- Result is the alphabetically highest of their names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The loop invariant (better)
![Page 56: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/56.jpg)
56
Loops as problem-solving strategy
A loop invariant is a property that:
Is easy to establish initially(even to cover a trivial part of the
data)
Is easy to extend to cover a bigger part
If covering all data, gives the desired result!
![Page 57: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/57.jpg)
57
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- Result is highest of previous station names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The effect of the loop
At end: invariant and exit condition• All stations visited (fancy.after )• Result is highest of their names
Exit condition satisfied at end
Invariant satisfied after each iteration
Invariant satisfied after initialization
![Page 58: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/58.jpg)
58
Quiz: what’s the invariant?xxx (a, b: INTEGER): INTEGER is
-- ?????????????????????????????????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 59: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/59.jpg)
59
Quiz: what’s the invariant?xxx (a, b: INTEGER): INTEGER is
-- ?????????????????????????????????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 60: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/60.jpg)
60
Quiz: what’s the invariant?euclid (a, b: INTEGER): INTEGER is
-- Greatest common divisor of a and brequire
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 61: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/61.jpg)
61Intro. to Programming, lecture 11 (complement): Levenshtein
Another example
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
“Michael Jackson” to “Mendelssohn”
Distance 1 2 3 4 5 6 7 8 9 100
I H A
![Page 62: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/62.jpg)
62
Levenshtein distance
B
Operation
“Beethoven” to “Beatles”
Distance
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 63: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/63.jpg)
63
Levenshtein distanceAlso called “Edit distance”
Purpose: to compute the smallest set of basic operations
Insertion Deletion Replacement
that will turn one string into another
Intro. to Programming, lecture 11 (complement): Levenshtein
![Page 64: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/64.jpg)
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 65: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/65.jpg)
65
Levenshtein distance algorithmdistance (source, target: STRING): INTEGER
-- Minimum number of operations to turn source into target
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-- (Continued)
![Page 66: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/66.jpg)
66
Levenshtein distance algorithmfrom 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 67: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/67.jpg)
67
How do we know a loop terminates?
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- If there are any previous stations,-- Result is the alphabetically highest of their names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
![Page 68: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/68.jpg)
68
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- If there are any previous stations,-- Result is the alphabetically highest of their names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
How do we know a loop terminates?
![Page 69: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/69.jpg)
69
Loop variantInteger expression that must:
Be non-negative when after initialization (from)
Decrease (i.e. by at least one), while remaining non-negative, for every iteration of the body (loop) executed with exit condition not satisfied
![Page 70: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/70.jpg)
70
fancy.count − fancy.index + 1
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- If there are any previous stations,-- Result is the alphabetically highest of their names
variant
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
The variant for our example
![Page 71: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/71.jpg)
71
The general termination problem
Can EiffelStudio find out if your program will terminate?
No, it can’t No other program, for any other realistic programming language, can!
![Page 72: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/72.jpg)
72
The halting problem and undecidability(“Entscheidungsproblem”, Alan Turing, 1936.)
It is not possible to devise an effective procedure that will find out if an arbitrary program will terminate on arbitrary input
(or, for that matter, if an arbitrary program with no input will terminate)
![Page 73: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/73.jpg)
73
The halting problem in EiffelAssume we have a feature
terminates (my_program: STRING ): BOOLEAN-- Does my_program terminate?
do... Your algorithm here ...
end
![Page 74: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/74.jpg)
74
The halting problem in practice
Some programs do not terminate in certain cases...
That’s a bug!
Yours had better terminate in all cases
Use variants
![Page 75: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/75.jpg)
75
Another loop syntax
![Page 76: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/76.jpg)
76
fromfancy.start ; Result := ""
invariantindex >= 1index <= count + 1-- If there are any previous stations,-- Result is the alphabetically highest of their names
untilfancy.after
loop Result := greater (Result, fancy.item.name)
fancy.forthend
How do we know a loop terminates?
![Page 77: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/77.jpg)
77
Control structures at the machine levelUnconditional branch:
BR label
Conditional branch, for example:
BEQ loc_a loc_b label
![Page 78: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/78.jpg)
78
The equivalent of if-then-else
BEQ loc_a loc_b 111
101 ... Code for Compound_2 ...
BR 125
111 ... Code for Compound_1 ...
125 ... Code for continuation of program ...
if a = b then Compound_1 else Compound_2 end
![Page 79: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/79.jpg)
79
Flowcharts
a = b
Compound_2Compound_1
True False
![Page 80: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/80.jpg)
80
In programming languages: the Goto
test condition goto else_partCompound_1goto continue
else_part : Compound_2continue : ... Continuation of program ...
a = b
Compound_2Compound_1
True False
![Page 81: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/81.jpg)
81
“Goto considered harmful”
Dijkstra, 1968Arbitrary Goto instructions lead to messy, hard to maintain programs (“spaghetti code”)
Böhm and Jacopini theorem: any program that can be expressed with goto instructionsand conditionals can also be expressedwithout gotos, using sequences, conditionalsand loops
For an example of transformation seeTouch of Class
![Page 82: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/82.jpg)
82
The Goto todayAlmost universally decriedStill exists in some programming languagesAlso hides under various disguises, e.g. break
loop...if c then break end...
end
![Page 83: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/83.jpg)
83
One-entry, one-exit
(Compound) (Loop) (Conditional)
![Page 84: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/84.jpg)
84
Quiz: what’s the invariant?xxx (a, b: INTEGER): INTEGER is
-- ?????????????????????????????????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 85: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/85.jpg)
85
Quiz: what’s the invariant?euclid (a, b: INTEGER): INTEGER is
-- Greatest common divisor of a and brequire
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 86: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/86.jpg)
86
Levenshtein distanceAlso called “Edit distance”
Purpose: to compute the smallest set of basic operations
Insertion Deletion Replacement
that will turn one string into another
Intro. to Programming, lecture 11 (complement): Levenshtein
![Page 87: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/87.jpg)
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 88: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/88.jpg)
88
Levenshtein distance algorithmdistance (source, target: STRING): INTEGER
-- Minimum number of operations to turn source into target
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-- (Continued)
![Page 89: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/89.jpg)
89
Levenshtein distance algorithmfrom 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
???-- For all p : 1 .. i, q : 1 .. j –1, we can turn source [1 .. p ]-- into target [1 .. q ] in dist [p, q ] operations
![Page 90: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/90.jpg)
90
The halting problem and undecidability(“Entscheidungsproblem”, Alan Turing, 1936.)
It is not possible to devise an effective procedure that will find out if an arbitrary program will terminate on arbitrary input
(or, for that matter, if an arbitrary program with no input will terminate)
![Page 91: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/91.jpg)
91
The halting problem in EiffelAssume we have a feature
terminates (my_program: STRING ): BOOLEAN-- Does my_program terminate?
do... Your algorithm here ...
end
![Page 92: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/92.jpg)
92
Paradoxes in logicThe Russell paradox
Some sets are members of themselves, e.g. the set of all infinite sets is infinite
Others are not members of all sets, e.g. the set of all finite sets is not finite
Consider the set of all sets that are not members of themselves
The barber paradox (Russell) In Zurich there is a hairdresser that does the
hair of all the inhabitants who do not do their own hair
Who does her hair?
![Page 93: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/93.jpg)
93
The Grelling paradox
An adjective in English is: “Autological” is if applies to itself (e.g.
“polysyllabic”) “Heterological” otherwise
What is the status of “Heterological”?
Another form:
The first proposition appearing in red on this pageis false
![Page 94: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/94.jpg)
94
The liar’s paradox(Very old!)
Epaminondas says all Cretans are liars Epaminondas is a Cretan
![Page 95: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/95.jpg)
95
The halting problem and undecidability(“Entscheidungsproblem”, Alan Turing, 1936.)
It is not possible to devise an effective procedure that will find out if an arbitrary program will terminate on arbitrary input
(or, for that matter, if an arbitrary program with no input will terminate)
![Page 96: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/96.jpg)
96
The halting problem in EiffelAssume we have a feature
string_terminates (my_program : STRING): BOOLEAN
-- Does my_program terminate?do
... Your algorithm here ...end
![Page 97: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/97.jpg)
97
The halting problem in EiffelThen we can write
terminates (file_name : STRING): BOOLEAN-- Does program in file file_name
terminate?do
... Your algorithm here ...end
![Page 98: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/98.jpg)
98
Then…Root procedure of the system:
what_do_you_think -- Terminate only if not
dofromuntil
not terminates (“/usr/home/myfile”)loopend
end
Then copy the program text to /usr/home/myfile
![Page 99: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/99.jpg)
99
The halting problem in practice
Some programs do not terminate in certain cases...
That’s a bug!
Yours had better terminate in all cases
Use variants
![Page 100: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader035.fdocuments.us/reader035/viewer/2022070421/568161bd550346895dd19a85/html5/thumbnails/100.jpg)
100
What we have seen
The notion of algorithmBasic propertiesDifference with “program”
The notion of control structureCorrectness of an instruction
Control structure: sequenceControl structure: conditionalNesting, and how to avoid it