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://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/1.jpg)
Chair of Software Engineering
Einführung in die ProgrammierungIntroduction to Programming
Prof. Dr. Bertrand Meyer
Exercise Session 6
![Page 2: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/2.jpg)
2
News
Mock exam in 2 weeks (November 10) You have to be present No assignment that week The week after we will discuss the results
![Page 3: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/3.jpg)
3
Today Conditional Loop Linked list
![Page 4: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/4.jpg)
4
Inside the routine body
The body of each routine consists of instructions (command calls, creations, assignments, etc.)
In the programs you’ve seen so far they were always executed in the order they were written
create passenger.make_with_route (Route3, 1.5)passenger.gopassenger. set_reiterate (True)Paris.put_passenger (passenger)create tram.make_with_line (Line1)tram.startParis.put_tram (tram)
Programming languages have structures that allow you to change the order of execution
![Page 5: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/5.jpg)
5
Structured programming If the order of execution could be changed
arbitrarily, it would be hard to understand programs In structured programming instructions can be
combined only in three ways:
i_1 c
i_2i_1 i_2
c
i
compound conditional loop
True FalseFalse
True
Each of these blocks has a single entrance and exit and is itself an instruction
Instruction
Condition
![Page 6: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/6.jpg)
6
Conditional
Basic syntax:if c then
i_1else
i_2end
c is a boolean expression (e.g., entity, query call of type BOOLEAN)
else-part is optional:if c then
i_1end
Condition
Instruction
Instruction
![Page 7: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/7.jpg)
7
Compilation error? Runtime error? (1)
f (x, y: INTEGER): INTEGERdo
if (x // y) then1
else0
endend
Hands-OnCompilation error:integer expression instead of boolean
Compilation error:expression instead of
instruction
Compilation error:expression instead of
instruction
![Page 8: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/8.jpg)
8
f (x, y: INTEGER): INTEGERdo
if (False) thenResult := x // y
endif (x /= 0) then
Result := y // xend
end
Hands-On
Compilation error? Runtime error? (2)
Everything is OK(during both
compilation and runtime)
![Page 9: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/9.jpg)
9
Calculating function’s value
f (max: INTEGER; s: STRING): STRINGdo
if s.is_equal (“Java”) thenResult := “J**a”
elseif s.count > max then
Result := “<an unreadable German word>”
endend
end
Calculate the value of: f (3, “Java”) f (20, “Immatrikulationsbestätigung”) f (6, “Eiffel”)
→ “J**a” → “<an unreadable German word>” → Void
Hands-On
![Page 10: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/10.jpg)
10
What does this routine do?
f (x: REAL): REALdo
if (x >= 0) thenResult := x
elseResult := -x
endend
abs
Hands-On
![Page 11: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/11.jpg)
11
Write a routine... ... that computes the maximum of two
integers: max (a, b: INTEGER): INTEGER
... that increases time by one second inside class TIME:
class TIMEhour, minute, second: INTEGER
second_forthdo ... end
...end
Hands-On
![Page 12: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/12.jpg)
12
Comb-like conditionalIf there are more than two alternatives, you can use the syntax:
if c1 theni_1
elseif c2 theni_2
...elseif c_n then
i_n else
i_eend
instead of:if c_1 then
i_1else
if c_2 theni_2
else...if c_n then
i_nelse
i_eend...
end end
Condition
Instruction
![Page 13: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/13.jpg)
13
Multiple choice
If all the conditions have a specific structure, you can use the syntax:
inspect expressionwhen const_1 then
i_1when const_2 then
i_2...when const_n1 .. const_n2 then
i_nelse
i_eend
Integer or character expression
Integer or character constant
Instruction
Interval
![Page 14: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/14.jpg)
14
Lost in conditions
Rewrite the following multiple choice: using a comb-like conditional using nested conditionals
inspect user_choicewhen 0 then
print (“Here is your hamburger”)when 1 then
print (“Here is your Coke”)else
print (“Sorry, not on the menu today!”)
end
Hands-On
![Page 15: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/15.jpg)
15
Lost in conditions: solutionif user_choice = 0 then
print (“Here is your hamburger”)elseif user_choice = 1 then
print (“Here is your Coke”)else
print (“Sorry, not on the menu today!”)end
if user_choice = 0 then print (“Here is your hamburger”)
elseif user_choice = 1 then
print (“Here is your Coke”)else
print (“Sorry, not on the menu today!”)end
end
![Page 16: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/16.jpg)
16
Loop
Instruction
Optional
Boolean expression
Boolean expression
Instruction
Syntax:from
initializationinvariant
invuntil
exit_conditionloop
bodyvariant
varend Integer expression
![Page 17: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/17.jpg)
17
Simple loop (1)
How many times will the body of the following loop be executed?i: INTEGER...from
i := 1until
i > 10loop
print (“I will not say bad things about assistants”)
i := i + 1end
Hands-OnIn Eiffel we usually
start counting from 1
10
![Page 18: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/18.jpg)
18
Simple loop (2) Hands-OnAnd what about this one? i: INTEGER...from
i := 10until
i < 1loop
print (“I will not say bad things about assistants”)end
Caution!Loops can be infinite!
∞
![Page 19: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/19.jpg)
19
What does this function do?
f (n: INTEGER): INTEGER islocal
i: INTEGERdo
fromi := 2Result := 1
untili > n
loopResult := Result * ii := i + 1
endend
factorial
Hands-On
![Page 20: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/20.jpg)
20
Invariant and variant
Loop invariant (do not mix with class invariant) holds after execution of from clause and after
each execution of loop clause captures how the loop iteratively solves the
problem: e.g. “to calculate the sum of all n elements in a list, on each iteration i (i = 1..n) the sum of first i elements is obtained”
Loop variant integer expression that is nonnegative after
execution of from clause and after each execution of loop clause and strictly decreases with each iteration
a loop with a variant can not be infinite (why?)
![Page 21: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/21.jpg)
21
What are the invariant and variant of the “factorial” loop?
fromi := 2Result := 1
invariant?
untili > n
loopResult := Result * ii := i + 1
variant?
end
i = 2; Result = 1 = 1!i = 3; Result = 2 = 2!i = 4; Result = 6 = 3!
Invariant and variant Hands-On
Result = factorial (i - 1)
n – i + 2
![Page 22: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/22.jpg)
22
Writing loops
Implement a function that calculatesFibonacci numbers, using a loopfibonacci (n: INTEGER): INTEGER
-- n-th Fibonacci numberrequire
n_non_negative: n >= 0ensure
first_is_zero: n = 0 implies Result = 0second_is_one: n = 1 implies Result = 1other_correct: n > 1 implies Result =
fibonacci (n - 1) + fibonacci (n - 2)
end
Hands-On
![Page 23: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/23.jpg)
23
Writhing loops (solution)fibonacci (n: INTEGER): INTEGER
locala, b, i: INTEGER
doif n <= 1 then
Result := nelse
froma := fibonacci (0)b := fibonacci (1)i := 1
invarianta = fibonacci (i - 1)b = fibonacci (i )
untili = n
loopResult := a + ba := bb := Resulti := i + 1
variantn - i
end end
end
Hands-On
![Page 24: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/24.jpg)
24
Electronic queue (like in the post office)
Two kinds of queues
895
896 898
897
899
900
902
901
May I stand here?
Pleeease...
Andy Bob Chuck Dan Ed Fred Garry Hugo
No! We’ll have to take tickets
again!
No! We’ll have to take tickets
again!Ilinca
![Page 25: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/25.jpg)
25
Two kinds of queues
Live queue
Andy Bob Chuck Dan Ed Fred Garry Hugo
Bob is after me
I am the last
Sure! Just remember that Dan is after you
Chuck is after
me
Dan is after me
...
Ilinca
May I stand here?
Pleeease...
![Page 26: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/26.jpg)
26
LINKABLE
To make it possible to link infinitely many similar elements together, each element should contain a reference to the next elementclass LINKABLE
feature... right: LINKABLE
end
data
rightdata data data
(LINKABLE) (LINKABLE) (LINKABLE) (LINKABLE)
right right right
![Page 27: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/27.jpg)
27
INT_LINKABLE
class INT_LINKABLEcreate putfeature
item: INTEGER
put (i: INTEGER)do item := i end
right: INT_LINKABLE
put_right (other: INT_LINKABLE)do right := other end
end
![Page 28: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/28.jpg)
28
INT_LINKED_LIST
class INT_LINKED_LISTfeature
first_element: INT_LINKABLE-- First cell of the list
last_element: INT_LINKABLE-- Last cell of the list
count: INTEGER-- Number of elements in the list
...end
![Page 29: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/29.jpg)
29
4
item
right item
right item
right
first_element last_element
count 3item right
: inserting at the end
(INT_LINKABLE)
4
8 15
16
(INT_LINKABLE)(INT_LINKABLE)(INT_LINKABLE)
INT_LINKED_LIST
![Page 30: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/30.jpg)
30
extend (v: INTEGER)-- Add v to end.
localnew: INT_LINKABLE
do create new.put (v)if first_element = Void then
first_element := new
elselast_element.put_right (new)
endlast_element := newcount := count + 1
end
INT_LINKED_LIST: inserting at the end
![Page 31: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/31.jpg)
31
INT_LINKED_LIST: searchhas (v: INTEGER): BOOLEAN
-- Does list contain v?local
temp: INT_LINKABLEdo
fromtemp := first_element
until(temp = Void) or Result
loopif temp.item = v then
Result := Trueendtemp := temp.right
endend
![Page 32: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/32.jpg)
32
INT_LINKED_LIST
Write a routine that calculates the sum of all positive values in
a listsum_of_positive: INTEGER
do ... end
inserts an element after the first occurrence of a given value and does nothing if the value is not found
insert_after (i, j: INTEGER)do ... end
Hands-On
![Page 33: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/33.jpg)
33
INT_LINKED_LIST: sum_of_positivesum_of_positive: INTEGER
-- Some of positive elementslocal
temp: INT_LINKABLEdo
fromtemp := first_element
untiltemp = Void
loopif temp.item > 0 then
Result := Result + temp.item
endtemp := temp.right
endend
![Page 34: Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer](https://reader036.fdocuments.net/reader036/viewer/2022062301/568162e0550346895dd36677/html5/thumbnails/34.jpg)
34
INT_LINKED_LIST: insert_after insert_after (i, j: INTEGER)
-- Insert `j’ after `i’ if presentlocal
temp, new: INT_LINKABLEdo
fromtemp := first_element
untiltemp = Void or else temp.item
= iloop
temp := temp.rightendif temp /= Void then
create new.put (j)new.put_right (temp.right)temp.put_right (new)count := count + 1if temp = last_element then
last_element := newend
endend