Mark Dixon, SoCCE SOFT 136 Page 1
11 – User Defined Functions
Mark Dixon, SoCCE SOFT 136 Page 2
Session Aims & Objectives• Aims
– To introduce user defined functions• Objectives,
by end of this week’s sessions, you should be able to:
– Create your own function definitions– Call these functions
Mark Dixon, SoCCE SOFT 136 Page 3
Meet George• Common Boa Constrictor
– boa constrictor imperator• Native to Central & South America• No venom (no poison)
Mark Dixon, SoCCE SOFT 136 Page 4
Meet George (cont.)
Mark Dixon, SoCCE SOFT 136 Page 5
George (cont.)• Problem:
– Difficult to keep– Require temperature and humidity controlled
environment– Much of the literature is from the US
• Temperature in Fahrenheit
• Solution– Need a program to convert from Celsius to
Fahrenheit
Mark Dixon, SoCCE SOFT 136 Page 6
George (cont.)• To convert from Fahrenheit to Celsius:
e.g. 50 Fahrenheit is:
95)32(
fc
95)3250(
c
c = 10
Mark Dixon, SoCCE SOFT 136 Page 7
Example: Temp v1Temp v1
Option Explicit
Private Sub Form_Load() lblResult.Caption = ((txtFah.Text - 32) * 5) / 9End Sub
Private Sub txtFah_Change() lblResult.Caption = ((txtFah.Text - 32) * 5) / 9End Sub
Calculationrepeated
Mark Dixon, SoCCE SOFT 136 Page 8
Procedures and Functions• Both Procedures and Functions
– Group of statements– Identified by unique name– mirror real life activities
• Procedures – just do something• Functions – return a value
– used to perform calculations
Mark Dixon, SoCCE SOFT 136 Page 9
Built in Functions: Sqr
• Sqr – gives square root of a number:
– ExamplesSqr(4) returns 16Sqr(3) returns 9Sqr(2) returns 4
SquareRoot
Option Explicit
Private Sub txtNum_Change()Dim tmpNum As Double tmpNum = Val(Me.txtNum.Text) Me.lblResult.Caption = Sqr(tmpNum)End Sub
Sqr DoubleX: Double
Mark Dixon, SoCCE SOFT 136 Page 10
• Rnd() function– generates pseudo-random numbers– >= 0 and <1
• Randomize – initialises random number generator
Built in Functions: Rnd
Random Single
RandomNumbers
Option Explicit
Private Sub Form_Load() RandomizeEnd Sub
Private Sub btnRandom_Click() Me.lblNum.Caption = Rnd()End Sub
Mark Dixon, SoCCE SOFT 136 Page 11
User Defined Functions (how)• Syntax very similar to procedure definition:Function <name>(<parameters>) As <type> [<Statement-Block>] <name> = <value>End Function• Where
– <name> represents function’s name you choose– <parameters> represent information needed– <type> represents the return type– <value> represent the return value
Mark Dixon, SoCCE SOFT 136 Page 12
• Function Header – gives:– name (e.g. Double),– parameter names and types (e.g. num: integer),
and– return type (e.g. integer)
• Function Body – gives code:
Function Double(num As integer) As integer Double = num * 2 End Function
Function Implementation: Code
Double integernum: integer
Mark Dixon, SoCCE SOFT 136 Page 13
FtoC Animation
Mark Dixon, SoCCE SOFT 136 Page 14
FtoC Function• The declaration:
Function FtoC(F As double) As double FtoC = ((f-32) * 5) / 9End Function
• The call: lblResult.Caption = FtoC(50)
Mark Dixon, SoCCE SOFT 136 Page 15
Example: Temp v2Temp v2
Option Explicit
Function FtoC(F As Double) As Double FtoC = ((F - 32) * 5) / 9End Function
Private Sub Form_Load() lblResult.Caption = FtoC(txtFah.Text)End Sub
Private Sub txtFah_Change() lblResult.Caption = FtoC(txtFah.Text)End Sub
Mark Dixon, SoCCE SOFT 136 Page 16
Question: Function Diagrams• Draw function diagram for the following
code:Function Thing() As Double
Function Miles(km As Double) As Double
Function Twice(num As Long) As Long
Thing double
Miles doublekm: double
Twice longnum: long
Mark Dixon, SoCCE SOFT 136 Page 17
Question: Function Headers• Generate the code for the following
diagrams:
Minutes integerHours: integerMins: integer
Euros integerPounds: integer
Function Minutes(Mins As Integer, _ Hours As Integer) As Integer
Function Euros(Pounds As Integer) As Integer
Mark Dixon, SoCCE SOFT 136 Page 18
Function Animation: Total
Mark Dixon, SoCCE SOFT 136 Page 19
Example: SnakeTemp v1SnakeTemp v1
Option Explicit
Sub Draw()Dim t As Long picTemp.Cls
picTemp.Line (200, 1 * 200)-(200, 16 * 200) For t = 80 To 95 Step 1 picTemp.Line (200, (t - 79) * 200)-(300, (t - 79) * 200) Next
For t = 80 To 95 Step 5 picTemp.Line (300, (t - 79) * 200)-(500, (t - 79) * 200) picTemp.Print t & "F = " & (((t - 32) * 5) / 9) & "C" Next
picTemp.Line (200, (txtCur.Text - 79) * 200)-(600, (txtCur.Text - 79) * 200), vbRed picTemp.Print txtCur.Text & "F = " & (((txtCur.Text - 32) * 5) / 9) & "C"End Sub
Private Sub Form_Load() Me.Show DrawEnd Sub
Private Sub txtCur_Change() DrawEnd Sub
Mark Dixon, SoCCE SOFT 136 Page 20
Example: SnakeTemp v2SnakeTemp v2
Option ExplicitConst st = 80Const en = 95Const x1 = 200Const x2 = 300Const x3 = 500Const x4 = 600Const yS = 200 ' Vertical scaling factor.Const yO = st - 1 ' Vertical offset (gap at top).
Sub Draw()Dim t As Long picTemp.Cls
picTemp.Line (x1, (st - yO) * yS)-(x1, (en - yO) * yS) For t = st To en Step 1
picTemp.Line (x1, (t - yO) * yS)-(x2, (t - yO) * yS) Next For t = st To en Step 5
picTemp.Line (x2, (t - yO) * yS)-(x3, (t - yO) * yS) picTemp.Print t & "F = " & (((t - 32) * 5) / 9) & "C" Next
picTemp.Line (x1, (txtCur.Text - yO) * yS)-(x4, (txtCur.Text - yO) * yS), vbRed picTemp.Print txtCur.Text & "F = " & (((txtCur.Text - 32) * 5) / 9) & "C"End Sub
Private Sub Form_Load() Me.Show DrawEnd Sub
Private Sub txtCur_Change() DrawEnd Sub
Mark Dixon, SoCCE SOFT 136 Page 21
Example: SnakeTemp v3SnakeTemp v3
Option ExplicitConst st = 80Const en = 95
Const x1 = 200Const x2 = 300Const x3 = 500Const x4 = 600Const yS = 200 ' Vertical scaling factor.Const yO = st - 1 ' Vertical offset (gap at top).
Function FtoC(F As Double) As Double FtoC = ((F - 32) * 5) / 9End Function
Sub Draw()Dim t As Long picTemp.Cls picTemp.Line (x1, (st - yO) * yS)-(x1, (en - yO) * yS) For t = st To en Step 1 picTemp.Line (x1, (t - yO) * yS)-(x2, (t - yO) * yS) Next For t = st To en Step 5 picTemp.Line (x2, (t - yO) * yS)-(x3, (t - yO) * yS)
picTemp.Print t & "F = " & FtoC(t) & "C" Next picTemp.Line (x1, (txtCur.Text - yO) * yS)-(x4, (txtCur.Text - yO) * yS), vbRed
picTemp.Print txtCur.Text & "F = " & FtoC(txtCur.Text) & "C"End Sub
Private Sub Form_Load() Me.Show DrawEnd Sub
Private Sub txtCur_Change() DrawEnd Sub
Mark Dixon, SoCCE SOFT 136 Page 22
Tutorial Exercises: Temp• Task 1: Get the temperature examples v1
and v2 (from the lecture) working
Mark Dixon, SoCCE SOFT 136 Page 23
Tutorial Exercises: Snake Temp• Task 1: Get the snake temperature
examples from the lecture working.• Task 2: There is another place that a
function can be used to simplify the code.Hint: it’s to do with calculating the
vertical plotting position
Mark Dixon, SoCCE SOFT 136 Page 24
Tutorial Exercises: Snake Length• Task 1: Create a program that stores the following length
(inch) data in an array, and plots a graph of it (using line method): Date Years Inches Tuesday 25 June 2002 6 70.5
5½ Monday 25 June 2001 5 70.0
4½ Sunday 25 June 2000 4 68.0 Saturday 25 December 1999 3½ 66.0 Friday 25 June 1999 3 61.0 Friday 25 December 1998 2½ 57.5 Thursday 25 June 1998 2 48.5 Thursday 25 December 1997 1½ 43.0 Wednesday 25 June 1997 1 37.5
• Task 2: Modify your code – add code that calculates an average length and plots it on the graph (use a function to calculate the total).
• Task 3: Modify your code – to convert all values to cm (1 inch = 2.54 cm).