11 – parameters
Post on 30-Dec-2015
30 Views
Preview:
DESCRIPTION
TRANSCRIPT
Mark Dixon Page 1
11 – Parameters
Mark Dixon Page 2
Question: Arrays• How many array variables are in the
following code:
Dim xDim yDim f(4) x = 12 y = 6 f(2) = 21
1
Mark Dixon Page 3
Question: Arrays• How many errors are in the following code:
Dim xDim yDim f(4) f = 3 y(3) = 6 f(1) = 19 f(5) = 21
Mark Dixon Page 4
Session Aims & Objectives• Aims
– To introduce passing parameters/arguments to procedures to make them more general purpose
• Objectives, after this week’s sessions, you should be able to:
– use parameters in your programs to make procedures more flexible
– distinguish between formal and actual parameters
– pass parameters by reference and by value– identify and correct parameter errors
Mark Dixon Page 5
Example: Clock (analysis)SPECIFICATION
• User Requirements – to know what the time is
• Software Requirements– Functional:
–display current time in analogue (traditional clock face) format
– Non-functionalshould be easy to read
Mark Dixon Page 6
Example: Clock (user interface)• 14 objects:
– 12 numbers– mid point– second point
(moving)
Mark Dixon Page 7
Example: Clock v0 (HTML)<html>
<head><title></title></head>
<body>
<div id=div1 style="position: absolute;">1</div>
<div id=div2 style="position: absolute;">2</div>
<div id=div3 style="position: absolute;">3</div>
<div id=div4 style="position: absolute;">4</div>
<div id=div5 style="position: absolute;">5</div>
<div id=div6 style="position: absolute;">6</div>
<div id=div7 style="position: absolute;">7</div>
<div id=div8 style="position: absolute;">8</div>
<div id=div9 style="position: absolute;">9</div>
<div id=div10 style="position: absolute;">10</div>
<div id=div11 style="position: absolute;">11</div>
<div id=div12 style="position: absolute;">12</div>
<img id=imgMid style="position: absolute;" src="dot.gif" />
<img id=imgSec style="position: absolute;" src="dot.gif" />
</body>
</html>
Mark Dixon Page 8
Example: Clock v1 (HTML)• Remove 'hard coded' tags
<html>
<head><title></title></head>
<body>
<img id=imgMid style="position: absolute;" src="dot.gif" />
<img id=imgSec style="position: absolute;" src="dot.gif" />
</body>
</html>
Mark Dixon Page 9
Example: Clock v1 (code)Option Explicit
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 div3.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 3) * 200 div3.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 3) * 200 div4.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 4) * 200 div4.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 4) * 200 div5.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 5) * 200 div5.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 5) * 200 div6.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 6) * 200 div6.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 6) * 200 div7.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 7) * 200 div7.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 7) * 200 div8.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 8) * 200 div8.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 8) * 200 div9.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 9) * 200 div9.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 9) * 200 div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style='position: absolute;'>" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 … … … div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setInterval "ShowHands", 500 End Sub
• use loop to put in tags
Mark Dixon Page 10
Example: Clock v1 (code)
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub
current time and date
Option Explicit
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 div3.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 3) * 200 div3.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 3) * 200 div4.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 4) * 200 div4.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 4) * 200 div5.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 5) * 200 div5.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 5) * 200 div6.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 6) * 200 div6.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 6) * 200 div7.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 7) * 200 div7.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 7) * 200 div8.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 8) * 200 div8.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 8) * 200 div9.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 9) * 200 div9.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 9) * 200 div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub
Mark Dixon Page 11
Example: Clock v1 (code)Option Explicit
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 div3.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 3) * 200 div3.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 3) * 200 div4.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 4) * 200 div4.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 4) * 200 div5.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 5) * 200 div5.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 5) * 200 div6.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 6) * 200 div6.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 6) * 200 div7.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 7) * 200 div7.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 7) * 200 div8.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 8) * 200 div8.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 8) * 200 div9.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 9) * 200 div9.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 9) * 200 div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 … … … div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Mark Dixon Page 12
Example: Clock v1 (code)
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub
Option Explicit
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 div3.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 3) * 200 div3.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 3) * 200 div4.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 4) * 200 div4.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 4) * 200 div5.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 5) * 200 div5.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 5) * 200 div6.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 6) * 200 div6.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 6) * 200 div7.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 7) * 200 div7.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 7) * 200 div8.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 8) * 200 div8.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 8) * 200 div9.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 9) * 200 div9.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 9) * 200 div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub
• same 2 lines duplicated– not identical
• different object• different angle
Mark Dixon Page 13
Problem: Inflexible Procedure• Procedure does exactly the same each time
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) Position End Sub
Sub Position() imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200End Sub
Mark Dixon Page 14
Parameters/Arguments: What• Sometimes procedures need information
– Making a cup of tea:• milk, and number of sugars
• Makes them more flexible
Make cupof tea
Milk
Sugars
Mark Dixon Page 15
Parameters: How• Procedure Declaration
– formal parameters define name
• Procedure Call– actual parameters list values in order
Option ExplicitDim res
Sub Calc(Num1, Num2) res = Num1 * Num2 End Sub
Sub btnCalc_Click() Calc 5, 2 Calc 11, 15 End Sub
Mark Dixon Page 16
Parameters: How
Mark Dixon Page 17
Error: Wrong number of arguments
Option Explicit
Sub Twice(num) parResult.innerText = num * 2 End Sub Twice 3 Twice 4, 3 Twice
Mark Dixon Page 18
Questions: Parameters• Name the procedures in the following code
and state how many parameters they take:
Sub hello(s, x)Dim i s = "" For i = 1 To x s = s + "Hello" NextEnd Sub
Sub DisplayScore() parScore.innerText = scoreEnd Sub
hello takes 2 parameters
DisplayScore takes 0 parameters
Mark Dixon Page 19
Questions: ParametersGiven the following declaration:
• What will the following put in parRes?
Sub thing(Num1, Num2, Num3)Dim tmpOutput tmpOutput = (Num1 + Num2) * Num3 parRes.innerText = tmpOutputEnd Sub
thing 2, 3, 6thing 6, 3, 2thing 20, 5, 2
301850
Mark Dixon Page 20
Example: Clock v2 (code)Option Explicit
Sub window_OnLoad()
Dim ang
Dim s
Dim i
s = ""
For i = 1 To 12
s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>"
Next
document.body.innerHTML = s & document.body.innerHTML
imgMid.style.pixelleft = document.body.clientwidth / 2
imgMid.style.pixeltop = document.body.clientheight / 2
ang = 6.2 / 12
Position div1, ang
Position div2, ang * 2
Position div3, ang * 3
Position div4, ang * 4
Position div5, ang * 5
Position div6, ang * 6
Position div7, ang * 7
Position div8, ang * 8
Position div9, ang * 9
Position div10, ang * 10
Position div11, ang * 11
Position div12, ang * 12
window.setinterval "ShowHands", 500
End Sub
Sub ShowHands()
Dim ang
Dim s
ang = 6.2 / 60
s = Second(Now())
Position imgSec, ang * s
End Sub
Sub Position(objO, a)
objO.style.pixelleft = imgMid.style.pixelleft + Sin(a) * 200
objO.style.pixeltop = imgMid.style.pixeltop - Cos(a) * 200
End Sub
Sub Position(objO, a) objO.style.pixelleft = imgMid.style.pixelleft + Sin(a) * 200 objO.style.pixeltop = imgMid.style.pixeltop - Cos(a) * 200End Sub
Position imgSec, ang * s
Position div1, angPosition div2, ang * 2Position div3, ang * 3Position div4, ang * 4… … …Position div9, ang * 9Position div10, ang * 10Position div11, ang * 11Position div12, ang * 12
Mark Dixon Page 21
Comparison of Clock Code
<html> <head><title></title></head> <body> <img id=imgMid style="position: absolute;" src=dot.gif /> <img id=imgSec style="position: absolute;" src=dot.gif /> </body></html>
<script language=VBScript>Option Explicit
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 Position div1, ang Position div2, ang * 2 Position div3, ang * 3 Position div4, ang * 4 Position div5, ang * 5 Position div6, ang * 6 Position div7, ang * 7 Position div8, ang * 8 Position div9, ang * 9 Position div10, ang * 10 Position div11, ang * 11 Position div12, ang * 12 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) Position imgSec, ang * s End Sub
Sub Position(objO, a) objO.style.pixelleft = imgMid.style.pixelleft + Sin(a) * 200 objO.style.pixeltop = imgMid.style.pixeltop - Cos(a) * 200 End Sub</script>
<html> <head><title></title></head> <body> <img id=imgMid style="position: absolute;" src=dot.gif /> <img id=imgSec style="position: absolute;" src=dot.gif /> </body></html>
<script language=VBScript>Option Explicit
Sub window_OnLoad() Dim ang Dim s Dim i s = "" For i = 1 To 12 s = s & "<div id=div" & i & " style=""position: absolute;"">" & i & "</div>" Next document.body.innerHTML = s & document.body.innerHTML imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 div3.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 3) * 200 div3.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 3) * 200 div4.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 4) * 200 div4.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 4) * 200 div5.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 5) * 200 div5.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 5) * 200 div6.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 6) * 200 div6.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 6) * 200 div7.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 7) * 200 div7.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 7) * 200 div8.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 8) * 200 div8.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 8) * 200 div9.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 9) * 200 div9.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 9) * 200 div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub</script>
<html> <head><title></title></head> <body> <div id=div1 style="position: absolute;">1</div> <div id=div2 style="position: absolute;">2</div> <div id=div3 style="position: absolute;">3</div> <div id=div4 style="position: absolute;">4</div> <div id=div5 style="position: absolute;">5</div> <div id=div6 style="position: absolute;">6</div> <div id=div7 style="position: absolute;">7</div> <div id=div8 style="position: absolute;">8</div> <div id=div9 style="position: absolute;">9</div> <div id=div10 style="position: absolute;">10</div> <div id=div11 style="position: absolute;">11</div> <div id=div12 style="position: absolute;">12</div> <img id=imgMid style="position: absolute;" src=dot.gif /> <img id=imgSec style="position: absolute;" src=dot.gif /> </body></html>
<script language=VBScript>Option Explicit
Sub window_OnLoad() Dim ang imgMid.style.pixelleft = document.body.clientwidth / 2 imgMid.style.pixeltop = document.body.clientheight / 2 ang = 6.2 / 12 div1.style.pixelleft = imgMid.style.pixelleft + Sin(ang) * 200 div1.style.pixeltop = imgMid.style.pixeltop - Cos(ang) * 200 div2.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 2) * 200 div2.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 2) * 200 div3.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 3) * 200 div3.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 3) * 200 div4.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 4) * 200 div4.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 4) * 200 div5.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 5) * 200 div5.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 5) * 200 div6.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 6) * 200 div6.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 6) * 200 div7.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 7) * 200 div7.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 7) * 200 div8.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 8) * 200 div8.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 8) * 200 div9.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 9) * 200 div9.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 9) * 200 div10.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 10) * 200 div10.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 10) * 200 div11.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 11) * 200 div11.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 11) * 200 div12.style.pixelleft = imgMid.style.pixelleft + Sin(ang * 12) * 200 div12.style.pixeltop = imgMid.style.pixeltop - Cos(ang * 12) * 200 window.setinterval "ShowHands", 500 End Sub
Sub ShowHands() Dim ang Dim s ang = 6.2 / 60 s = Second(Now()) imgSec.style.pixelleft = imgMid.style.pixelleft + Sin(ang * s) * 200 imgSec.style.pixeltop = imgMid.style.pixeltop - Cos(ang * s) * 200 End Sub</script>
v0 (64 lines) v1 (59 lines) v2 (51 lines)
(2474 bytes) (2064 bytes) (941 bytes)
Mark Dixon Page 22
Example: Clock v3• Use for loop instead of repeated calls
Position div1, angPosition div2, ang * 2Position div3, ang * 3Position div4, ang * 4Position div5, ang * 5Position div6, ang * 6Position div7, ang * 7Position div8, ang * 8Position div9, ang * 9Position div10, ang * 10Position div11, ang * 11Position div12, ang * 12
For i = 1 To 12 Position document.getElementById("div" & i), ang * iNext
Mark Dixon Page 23
Example: Clock v4
Mark Dixon Page 24
Memory Addresses• Memory addresses - keep track of where
variables are stored in memory• Every byte (position) in memory has a memory
address:
• e.g. variable identified by name xstored at location 63542(address of the first byte of data for variable x)
23xIdentifier
Value
Computer Memory
63542
0
Mark Dixon Page 25
Example: Change the Value
Mark Dixon Page 26
Parameter Passing Methods • 2 ways to pass parameters to procedures:
– Passing by Value: literal value is passed from the call to the definitionSub Change1(ByVal x) …End Sub
– Passing by Reference: variable’s memory address (a reference to the variables position in memory) is passed from the call to the definitionSub Change2(ByRef y) …End Sub
Mark Dixon Page 27
Why pass by reference?• Previously, used parameters to pass data
into a procedure (input)
• Pass by reference, allows:– the procedure to change the value of the
passed variable– data to be input and output via parameters
ChangeByVal x
SetByRef x
Mark Dixon Page 28
What can be passed• Pass by value – both literals and variables
can be passed (variables are substituted by their value)
Change1 y Change1 21
• Pass by reference – only variables can be passed (in fact the variable’s memory address is passed)
Change2 y literals cannot be passed – they have no memory address
Change2 21 ERROR
Mark Dixon Page 29
Two results?• Total and Average algorithms share a lot of
code
• Useful to combine them
• TotAve procedure:
double (average)integer (total)TotAve
Mark Dixon Page 30
Example: Total and Average Sub TotAve(ByRef T, ByRef A)
Dim i
T = 0
For i = 1 to 5
T = T + Nums(i)
Next
A = T / 5
End Sub
tot = 0
ave = 0
TotAve tot, ave ' What is the value of ave and tot?
TotAvevar Tvar A
Mark Dixon Page 31
Questions: Parameter Passing• Consider the following code: Dim a Sub Add(ByRef item, ByVal extra) item = item + extra End Sub a = 5
• What is the value of a, after each of these: Add a, 3 Add a, a Add 4, 4
8
16
Error – cannot pass 4 by reference
Mark Dixon Page 32
Tutorial Exercise: Clock• LEARNING OBJECTIVE:
– use parameters provided by event procedures
• Task 1: Get the Clock (v2) example (from the lecture) working.
• Task 2: Modify your code – display lots of dots for the second hand (as per v3).
• Task 3: Modify your code – add an hour and minute hand
top related