100
Chair of Software Engineering Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Lecture 8: Control Structures

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

  • Upload
    braima

  • View
    18

  • Download
    0

Embed Size (px)

DESCRIPTION

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer. Lecture 8: Control Structures. In this (double) lecture. The notion of algorithm Basic control structures: sequence, conditional, loop Decision structures: variants of conditional instruction - PowerPoint PPT Presentation

Citation preview

Page 1: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

4

Not quite an algorithm

Page 5: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

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

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

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

11

Semicolon as optional separator

instruction1 ;

instruction2 ;

... ;

instructionn

Page 12: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

12

Not quite an algorithm

Page 13: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

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

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

18

Basic form

if Condition thenInstructions

elseOther_instructions

end

Page 19: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

19

A variant of the conditional

if Condition thenInstructions

end

Page 20: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

22

Nested structure

Page 23: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

23

Comb-like structure

Page 24: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

25

Comb-like structure

Page 26: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

29

Another loop syntax

Page 30: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

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

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

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

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

37

AssignmentResult := "XYZ "

-- Change the value of Result to "XYZ "

Page 38: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

75

Another loop syntax

Page 76: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

79

Flowcharts

a = b

Compound_2Compound_1

True False

Page 80: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

83

One-entry, one-exit

(Compound) (Loop) (Conditional)

Page 84: Einführung  in die  Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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