csi 101 elements of computing spring 2009 lecture #10 – functions and subroutines monday, march...

21
CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

Post on 19-Dec-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

CSI 101 Elements of Computing

Spring 2009Lecture #10 –

Functions and SubroutinesMonday, March 16th

Page 2: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

2

Procedural Programming Method of organizing computer program Breaking up code into smaller segments

Makes it more efficient Allows multiple programmers to produce Facilitates reuse

Tie segments together logically Code statements in segment perform a

particular service or function

Page 3: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

3

How does Procedural Programming work? Think of it like an assembly line

Each part of assembly line works on a specific task or piece of the final product

Dedicated workers focus their efforts just on their part of the process

Foreman oversees entire process and makes sure it runs smoothly

Page 4: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

4

Types of procedural segments 3 types in Visual Basic Event procedure

Invoke when a particular action occurs on a screen form

Subroutine procedure Invoked via a CALL statement

Function procedure Invoked by referring to its name Example: result = Foo()

Page 5: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

5

Parameters Input to procedure Data type must match general type of

procedure Doesn’t have to be exact match For instance, integral values could pass a Long

into an Integer if value does not exceed Integer’s maximum

If more than one parameter, corresponds in order

Page 6: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

6

Parameter Examples Foo has 3 inputs: Integer, Integer, String

Dim A as Integer, B as Integer, C as IntegerDim S1 as String, S2 as StringDim X As Long, Y as Single, Z as Double CALL Foo(A,B,S1) works CALL Foo(S1,A,B) fails – WHY?

S1 is 1st parameter, would correspond to Integer

B is 3rd parameter, would correspond to String

Page 7: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

7

Parameter Examples, cont Foo has 3 inputs: Integer, Integer, String

Dim A as Integer, B as Integer, C as IntegerDim S1 as String, S2 as StringDim X As Long, Y as Single, Z as Double CALL Foo(A,X,S1)

Works if X's value is within 2 billion CALL Foo(A,Y,S2) works – WHY?

Removes any fractional value from Y

Page 8: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

8

Defining Subroutines SUB statement begins it

Like BEGIN from pseudocode, it must name the subroutine

END SUB ends it Unlike END in pseudocode, does not need

name Cannot define another subroutine within a

subroutine, so the END SUB would refer to the previous SUB statement

Page 9: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

9

Subroutine arguments Arguments are the subroutine’s

corresponding parameters Parameters are considered what the

calling process uses, while arguments are defined by the subroutine

Arguments have variable names and data types just like parameters Uses same structure as DIM without DIM

keyword

Page 10: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

10

Defining Subroutine example Let’s define our previous FOO:

Sub Foo(InVal1 As Integer, InVal2 As Integer, InStr As String)

:End Sub

Note each argument is given a unique name and has a defined data type

Page 11: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

11

Parameter passing 2 ways: Pass by reference

Called routine does not make a copy, but works in original register

Thus, any change to argument in called routine is reflected in original procedure’s parameter value

This is Virtual Basic’s default Pass by value

Called routine makes a copy of data value when called

Any change to called routine’s copy is not reflected in the original procedure’s variable

Page 12: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

12

Pass by Reference Example Foo(Int1, Int2, String1)

If Int1 > Int2, String1 set to “Higher” If Int1 < Int2, String1 set to “Lower” If Int1 = Int2, String1 set to “Equal”

CALL Foo(A, B, S1) A and B retain value, but S1 changes

Page 13: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

13

Pass by Value Need to specify ByVal in subroutine

definition Note that this is controlled by subroutine,

not by calling routine Thus, could change Foo by:

Sub Foo2(Int1 As Integer, Int2 As Integer, ByVal Str1 As String)

Note ByVal keyword goes before argument name

Page 14: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

14

Pass by Value Example Foo2(Int1, Int2, String1)

If Int1 > Int2, String1 set to “Higher” If Int1 < Int2, String1 set to “Lower” If Int1 = Int2, String1 set to “Equal”

CALL Foo2(A, B, S1) No variables have their values changed when

Foo2 ends

Page 15: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

15

Subroutine return values Pass by reference is how subroutines

return a value to its calling procedure Must use an argument, so calling

procedure must have variable of correct data type to use as argument

Page 16: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

16

Functions These are special processing segments that

are invoked by using their name They have a single return value, and it is

placed in a variable that is NOT a parameter Computer creates a variable with the same name

as the function. By default, that is the variable used to return the function's return value

Visual Basic has many predefined functions, but programmers are free to create their own as well

Page 17: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

17

Form of a Function Begins with FUNCTION keyword Concludes with END FUNCTION Arguments defined as in subroutine Includes definition of return value Example:

Function Foo3(Val1 As Integer, Val2 As Integer) As Integer

:End Function

Page 18: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

18

Return keyword Simultaneously sets return value and ends

the function Return A + B

Can be placed anywhere before END FUNCTION

Often used with IF statement to end function on particular conditionIF index > 255 Then 'Exceed max value

Return 0 'Value for error

Else 'Continue processing

Page 19: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

19

Function Example Let’s create a function as an example Our function finds the minimum value of

three numbers Call it MIN

We'll restrict our values to integers Return value is one of them, so it’s also an

integer

Page 20: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

20

MIN FunctionFunction Min(A As Integer, B As Integer, C As

Integer) As IntegerIf A<B Then 'A smaller

If A<C Then Min=A 'Note we can set Min'Min is the variable created to hold the return value

Else Min=CEndif

Elseif B<C Then Min=BElse Min=CEndIf

End Function 'Note no RETURN statement

RETURN not necessary if variable named for function contains the return value

Page 21: CSI 101 Elements of Computing Spring 2009 Lecture #10 – Functions and Subroutines Monday, March 16th

21

Invoking MINDim A,B,C,M as Integer

'At some point, we get values for A, B, and C

M = Min(A,B,C) 'M now holds the smallest value