43
6.1 Introduction Divide and Conquer The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Embed Size (px)

Citation preview

Page 1: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.1 Introduction

• Divide and Conquer– The best way to develop and maintain a large program is to

construct it from small, manageable pieces.

BZUPAGES.COM

Page 2: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.2 Modules, Classes and Procedures

• Framework Class Library– Provides a rich collection of “prepackaged” classes and

methods for performing many operations• Mathematical calculations

• String manipulations

• Character manipulations

• Input/output operations

• Error checking

BZUPAGES.COM

Page 3: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.2 Modules, Classes and Procedures

• Programmer-defined procedures– FCL cannot provide every conceivable feature that a

programmer could want

– Three types of procedures• Sub procedures• Function procedures

• Event procedures

– A procedure is invoked by a procedure call

BZUPAGES.COM

Page 4: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.2 Modules, Classes and Procedures

• Division of code into procedures– Several motivations to divide code into procedures

• Divide-and-conquer approach makes program development more manageable

• Software reusability

• Avoids the repetition of code in a program

BZUPAGES.COM

Page 5: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.2 Modules, Classes and Procedures

• Earlier programs had only one procedure that called FCL methods

• Next program contains two customized procedures

BZUPAGES.COM

Page 6: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Payment.vb

Program Output

1 ' Fig. 6.2: Payment.vb2 ' Sub procedure that prints payment information.3 4 Module modPayment5 6 Sub Main()7 8 ' call Sub procedure PrintPay 4 times9 PrintPay(40, 10.5)10 PrintPay(38, 21.75)11 PrintPay(20, 13)12 PrintPay(50, 14)13 14 Console.ReadLine() ' prevent window from closing15 End Sub ' Main16 17 ' print amount of money earned in command window18 Sub PrintPay(ByVal hours As Double, ByVal wage As Decimal)19 20 ' pay = hours * wage21 Console.WriteLine("The payment is {0:C}", hours * wage)22 End Sub ' PrintPay23 24 End Module ' modPayment

The payment is $420.00The payment is $826.50The payment is $260.00The payment is $700.00

PrintPay executes when it is invoked by Main

PrintPay receives the values of each argument and stores them in the parameters variables hours and wage

Notice that PrintPay appears within modPayment. All procedures must be defined inside a module or a class

BZUPAGES.COM

Page 7: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.3 Sub Procedures

• Format of a procedure definitionSub procedure-name(parameter-list) declarations and statementsEnd Sub

• Procedure header– The first line is known as the procedure header

• Procedure-name– Directly follows the Sub keyword– Can be any valid identifier – It is used to call this Sub procedure within the program

• Procedure body– The declarations and statements in the procedure definition

form the procedure bodyBZUPAGES.COM

Page 8: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.4 Function Procedures

• Similar to Sub procedures• One important difference

– Function procedures return a value to the caller

BZUPAGES.COM

Page 9: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

SquareInteger.vb

1 ' Fig. 6.3: SquareInteger.vb2 ' Function procedure to square a number.3 4 Module modSquareInteger5 6 Sub Main()7 Dim i As Integer ' counter8 9 Console.WriteLine("Number" & vbTab & "Square" & vbCrLf)10 11 ' square numbers from 1 to 1012 For i = 1 To 1013 Console.WriteLine(i & vbTab & Square(i))14 Next15 16 End Sub ' Main17 18 ' Function Square is executed19 ' only when the function is explicitly called.20 Function Square(ByVal y As Integer) As Integer21 Return y ^ 222 End Function ' Square23 24 End Module ' modSquareInteger

The For structure displays the results of squaring the Integers from 1-10Square is invoked with the

expression Square(i)

The Return statement terminates execution of the procedure and returns the result of y ^ 2

BZUPAGES.COM

Page 10: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

SquareInteger.vb

Program Output

Number Square 1 12 43 94 165 256 367 498 649 8110 100

BZUPAGES.COM

Page 11: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.4 Function Procedures

• Format of a Function procedure definitionFunction procedure-name(parameter-list) As return-type

declarations and statements

End Function

• Return-type– Indicates the data type of the result returned from the Function to its caller

• Return expression– Can occur anywhere in a Function– It returns exactly one value

– Control returns immediately to the point at which that procedure was invoked

BZUPAGES.COM

Page 12: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.5 Methods

• Definition of method– A method is any procedure that is contained within a class

• FCL methods

• Custom methods in programmer-defined classes

BZUPAGES.COM

Page 13: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.5 Methods

Fig. 6.6 IntelliSense feature of the Visual Studio .NET IDE.

BZUPAGES.COM

Page 14: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.5 Methods

Fig. 6.7 Math class methods.

Method Description Example

Abs(x) returns the absolute value of x Abs(23.7) is 23.7 Abs(0) is 0 Abs(-23.7) is 23.7

Ceiling(x) rounds x to the smallest integer not less than x

Ceiling(9.2) is 10.0 Ceiling(-9.8) is -9.0

Cos(x) returns the trigonometric cosine of x (x in radians)

Cos(0.0) is 1.0

Exp(x) returns the exponential ex Exp(1.0) is approximately

2.71828182845905 Exp(2.0) is approximately

7.38905609893065 Floor(x) rounds x to the largest integer

not greater than x Floor(9.2) is 9.0 Floor(-9.8) is -10.0

Log(x) returns the natural logarithm of x

(base e) Log(2.7182818284590451) is approximately 1.0 Log(7.3890560989306504)

is approximately 2.0 Max(x, y) returns the larger value of x and

y (also has versions for

Single, Integer and

Long values)

Max(2.3, 12.7) is 12.7 Max(-2.3, -12.7) is -2.3

Min(x, y) returns the smaller value of x and y (also has versions for

Single, Integer and

Long values)

Min(2.3, 12.7) is 2.3 Min(-2.3, -12.7) is -12.7

Pow(x, y) calculates x raised to power y

(xy)

Pow(2.0, 7.0) is 128.0 Pow(9.0, .5) is 3.0

BZUPAGES.COM

Page 15: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.5 Methods

Fig. 6.7 Math class methods.

Sin(x) returns the trigonometric sine of x (x in radians)

Sin(0.0) is 0.0

Sqrt(x) returns the square root of x Sqrt(9.0) is 3.0 Sqrt(2.0) is

1.4142135623731 Tan(x) returns the trigonometric

tangent of x (x in radians) Tan(0.0) is 0.0

Fig. 6.7 Math class methods.

BZUPAGES.COM

Page 16: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.6 Argument Promotion

• Coercion of arguments– The forcing of arguments to be appropriate data type so that

they can be passed to a procedure

• Widening conversion– Occurs when a type is converted to another type without

losing data

• Narrowing conversion– Occurs when there is potential for data loss during the

conversion

BZUPAGES.COM

Page 17: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.6 Argument PromotionType Conversion Types

Boolean Object

Byte Decimal, Short, Integer, Long, Decimal, Single, Double or

Object Char Decimal, Double, Single, Integer, Long, Object or Short Date Object Decimal Single, Double, or Object Double Object Integer Double, Decimal, Single, Long or Object Long Decimal, Double, Single, or Object Object none

Short Decimal, Double, Single, Integer, Long or Object Single Double or Object String Object Fig. 6.8 Widening conversions.

Fig. 6.8 Widening conversions.BZUPAGES.COM

Page 18: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.7 Option Strict and Data-Type Conversions

• Option Explicit– Set to On by default

– Forces the programmer to declare explicitly all variables before they are used

• Option strict– Set to Off by default

– When set to On, it forces the programmer to perform an explicit conversion for all narrowing conversions

• Class Convert– The methods in class Convert change data types explicitly

BZUPAGES.COM

Page 19: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.7 Option Strict and Data-Type Conversions

Fig. 6.9 Property Pages dialog with Option Strict set to On.BZUPAGES.COM

Page 20: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.8 Value Types and Reference Types

• Variable of a value type– Contains the actual data

– Used for a single piece of data• Integer

• Double

• Variable of a reference type– Contains a location in memory where

– Known as objects

• Literals– Values typed directly in program code

– Corresponds to one of the primitive data types

BZUPAGES.COM

Page 21: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.8 Value Types and Reference Types

Fig. 6.10 Visual Basic primitive data types.

Type Size in bits

Values Standard

Boolean 16 True or False

Char 16 One Unicode character (Unicode character set)

Byte 8 0 to 255 Date 64 1 January 0001 to 31 December 9999

0:00:00 to 23:59:59

Decimal 128 1.0E-28 to 7.9E+28 Short 16 –32,768 to 32,767 Integer 32 –2,147,483,648 to

2,147,483,647

Long 64 –9,223,372,036,854,775,808 to

9,223,372,036,854,775,807

Single 32 1.5E-45 to 3.4E+38 (IEEE 754 floating point)

Double 64 5.0E–324 to 1.7E+308 (IEEE 754 floating point)

Object 32 Data of any type

String 0 to ~2000000000 Unicode characters (Unicode character set)

Fig. 6.10 Visual Basic primitive data types.

BZUPAGES.COM

Page 22: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.9 Passing Arguments: Pass-by-Value vs. Pass-by-Reference

• Pass-by-value– The program makes a copy of the argument’s value and

passes that copy to the called procedure

• Pass-by-reference– The caller gives the called procedure the ability to access

and modify the caller’s original data directly.

BZUPAGES.COM

Page 23: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

ByRefTest.vb

1 ' Fig. 6.12: ByRefTest.vb2 ' Demonstrates passing by reference.3 4 Module modByRefTest5 6 ' squares three values ByVal and ByRef, displays results7 Sub Main()8 Dim number1 As Integer = 29 10 Console.WriteLine("Passing a value-type argument by value:")11 Console.WriteLine("Before calling SquareByValue, " & _12 "number1 is {0}", number1)13 SquareByValue(number1) ' passes number1 by value14 Console.WriteLine("After returning from SquareByValue, " & _15 "number1 is {0}" & vbCrLf, number1)16 17 Dim number2 As Integer = 218 19 Console.WriteLine("Passing a value-type argument" & _20 " by reference:")21 Console.WriteLine("Before calling SquareByReference, " & _22 "number2 is {0}", number2)23 SquareByReference(number2) ' passes number2 by reference24 Console.WriteLine("After returning from " & _25 "SquareByReference, number2 is {0}" & vbCrLf, number2)26 27 Dim number3 As Integer = 228

When number1 is passed, a copy of the value is passed to the procedure

A reference to the value stored in number2 is being passed

BZUPAGES.COM

Page 24: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

ByRefTest.vb

29 Console.WriteLine("Passing a value-type argument" & _30 " by reference, but in parentheses:")31 Console.WriteLine("Before calling SquareByReference " & _32 "using parentheses, number3 is {0}", number3)33 SquareByReference((number3)) ' passes number3 by value34 Console.WriteLine("After returning from " & _35 "SquareByReference, number3 is {0}", number3)36 37 End Sub ' Main38 39 ' squares number by value (note ByVal keyword)40 Sub SquareByValue(ByVal number As Integer)41 Console.WriteLine("After entering SquareByValue, " & _42 "number is {0}", number)43 number *= number44 Console.WriteLine("Before exiting SquareByValue, " & _45 "number is {0}", number)46 End Sub ' SquareByValue47 48 ' squares number by reference (note ByRef keyword)49 Sub SquareByReference(ByRef number As Integer)50 Console.WriteLine("After entering SquareByReference" & _51 ", number is {0}", number)52 number *= number53 Console.WriteLine("Before exiting SquareByReference" & _54 ", number is {0}", number)55 End Sub ' SquareByReference56 57 End Module ' modByRefTest

ByVal indicates that value-type arguments should be passed by value

ByRef gives direct access to the value stored in the original variable

Enclosing arguments in parenthesis forces pass-by-value

BZUPAGES.COM

Page 25: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Program Output

Passing a value-type argument by value:Before calling SquareByValue, number1 is 2After entering SquareByValue, number is 2Before exiting SquareByValue, number is 4After returning from SquareByValue, number1 is 2 Passing a value-type argument by reference:Before calling SquareByReference, number2 is 2After entering SquareByReference, number is 2Before exiting SquareByReference, number is 4After returning from SquareByReference, number2 is 4 Passing a value-type argument by reference, but in parentheses:Before calling SquareByReference using parentheses, number3 is 2After entering SquareByReference, number is 2Before exiting SquareByReference, number is 4After returning from SquareByReference, number3 is 2

BZUPAGES.COM

Page 26: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.10 Duration of Identifiers

• Identifier’s duration– Period during which the identifier exists in memory

• Identifier’s scope– Portion of a program in which the variable’s identifier can be

referenced

• Automatic duration– Identifiers that represent local variables in a procedure have

automatic duration

• Instance variable– A variable declared in a class

– They exist as long as their containing class is loaded in memory

BZUPAGES.COM

Page 27: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.11 Scope Rules

• Possible scopes– Class scope

• Begins at the class identifier after keyword Class and terminates at the End Class statement

– Module scope• Variable declared in a module have module scope, which is

similar to class scope

– Namespace scope• Procedures defined in a module have namespace scope, which

generally means that they may be accessed throughout a project

– Block scope• Identifiers declared inside a block, such as the body of a

procedure definition or the body of an If/Then selection structure, have block scope

BZUPAGES.COM

Page 28: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.12 Random-Number Generation

• Random class– Produces values at random

– Keyword New creates an object of a specified type and returns the object’s location in memory

– Next Method• Generates a positive Integer value between zero and the

constant Int32.MaxValue (2,147,483,647)

• The current time of day becomes the seed value for the calculation

• When a single argument is passed to Next, the values returned will be in the range from 0 to the value of that argument

– Scaling

• By passing two arguments, the programmer is allowed to specify the bottom range tooBZUPAGES.COM

Page 29: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

RandomInteger.vb

1 ' Fig. 6.14: RandomInteger.vb2 ' Generating random integers.3 4 Imports System.Windows.Forms5 6 Module modRandomInteger7 8 Sub Main()9 Dim randomObject As Random = New Random()10 Dim randomNumber As Integer11 Dim output As String = ""12 Dim i As Integer13 14 For i = 1 To 2015 randomNumber = randomObject.Next(1, 7)16 output &= randomNumber & " "17 18 If i Mod 5 = 0 Then ' is i a multiple of 5?19 output &= vbCrLf20 End If21 22 Next23 24 MessageBox.Show(output, "20 Random Numbers from 1 to 6", _25 MessageBoxButtons.OK, MessageBoxIcon.Information)26 End Sub ' Main27 28 End Module ' modRandomInteger

Note that we must use 7 as the second argument to produce integers in the range from 1-6

Go to the next line every time five numbers are generated

BZUPAGES.COM

Page 30: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.14 Recursion

• Recursive procedure – It is a procedure that calls itself either directly or indirectly

– It is called to solve a problem

– The procedure knows how to solve only the simples case (base case)

– For complex problems, the procedure divides the problem into a piece that it can perform and a piece that it does not know how to perform

– Recursive call• The procedure invokes a fresh copy of itself to work on the

smaller problem

BZUPAGES.COM

Page 31: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.14 Recursion

Fig. 6.18 Recursive evaluation of 5!.

5!

5 * 4!

4 * 3!

3 * 2!

2 * 1!

1

5!

5 * 4!

4 * 3!

3 * 2!

2 * 1!

1

Final value = 120

5! = 5 * 24 = 120 is returned

4! = 4 * 6 = 24 is returned

3! = 3 * 2 = 6 is returned

2! = 2 * 1 = 2 is returned

1 returned

(a) Procession of recursive calls

(b) Values returned from each recursive call

BZUPAGES.COM

Page 32: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Factorial.vb

31 32 ' recursively generates factorial of number33 Function Factorial(ByVal number As Long) As Long34 35 If number <= 1 Then ' base case36 Return 137 Else38 Return number * Factorial(number - 1)39 End If40 41 End Function ' Factorial42

If number is greater than 1, a recursive call to Factorial is made with a slightly simpler problem

Forgetting to return a value from a recursive procedure can result in logic errors

BZUPAGES.COM

Page 33: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.15 Example Using Recursion: Fibonacci Series

• The Fibonacci series– It begins with 0 and 1 and defines each subsequent Fibonacci

number as the sum of the previous two Fibonacci numbers

• Golden ratio– The ratio of successive fibonacci numbers converges on a

constant value near 1.618

• Fibonacci method– Each invocation of the method that does not match one of

the base cases results in two additional recursive calls to the method

– Fibonacci value of 30 requires 2,692,537

BZUPAGES.COM

Page 34: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Fibonacci.vb

25 26 ' calculate Fibonacci value recusively 27 Function Fibonacci(ByVal number As Integer) As Long28 29 ' check for base cases30 If number = 1 OrElse number = 0 Then31 Return number32 Else33 Return Fibonacci(number - 1) + Fibonacci(number - 2)34 End If35 End Function ' Fibonacci

BZUPAGES.COM

Page 35: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.15 Example Using Recursion: Fibonacci Series

Fig. 6.21 Recursive calls to method Fibonacci (abbreviated as F).

Fibonacci( 3 )

Fibonacci( 2 ) Fibonacci( 1 )

Fibonacci( 0 )Fibonacci( 1 ) return 1

return

return 1 return 0

return

BZUPAGES.COM

Page 36: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.16 Recursion vs. Iteration

• Iteration – Involves an explicit repetition structure

– Uses a repetition structure• For, While or Do/Loop Until

• Recursion– Achieves repetition through repeated procedure calls

– Uses a selection structure• If/Then, If/Then/Else or Select

– Recursive calls take time and consume additional memory

BZUPAGES.COM

Page 37: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.17 Procedure Overloading and Optional Arguments

• Overloading– Allows multiple procedures with the same name, but

differing numbers and types of arguments

– The overloading of procedures that perform closely related tasks can make programs more readable and understandable

• Optional arguments– Defining an argument as optional allows the calling

procedure to decide what arguments to pass

BZUPAGES.COM

Page 38: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Overload.vb

1 ' Fig. 6.22: Overload.vb2 ' Using overloaded methods.3 4 Public Class FrmOverload5 Inherits System.Windows.Forms.Form6 7 Friend WithEvents outputLabel As Label8 9 ' Visual Studio .NET generated code10 11 Private Sub FrmOverload_Load(ByVal sender As System.Object, _12 ByVal e As System.EventArgs) Handles MyBase.Load13 14 outputLabel.Text = "The square of Integer 7 is " & _15 square(7) & vbCrLf & "The square of Double " & _16 "7.5 is " & square(7.5)17 End Sub ' FrmOverload_Load18 19 Function Square(ByVal value As Integer) As Integer20 Return Convert.ToInt32(value ^ 2)21 End Function ' Square22 23 Function Square(ByVal value As Double) As Double24 Return value ^ 225 End Function ' Square26 27 End Class ' FrmOverload

The compiler uses a logical name to differ between the two Square methods

The compiler might use the logical name “Square of Integer”

“Square of Double” for the Square method that specifies a Double parameter

BZUPAGES.COM

Page 39: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Overload2.vb

1 ' Fig. 6.23: Overload2.vb2 ' Using overloaded procedures with identical signatures and3 ' different return types.4 5 Public Class FrmOverload26 Inherits System.Windows.Forms.Form7 8 Friend WithEvents outputLabel As Label9 10 ' Visual Studio .NET generated code11 12 Private Sub FrmOverload2_Load(ByVal sender As System.Object, _13 ByVal e As System.EventArgs) Handles MyBase.Load14 15 outputLabel.Text = "The square of Integer 7 is " & _16 square(7) & vbCrLf & "The square of Double " & _17 "7.5 is " & square(7.5)18 End Sub ' FrmOverload2_Load19 20 Function Square(ByVal value As Double) As Integer21 Return Convert.ToInt32(value ^ 2)22 End Function ' Square23 24 Function Square(ByVal value As Double) As Double25 Return value ^ 226 End Function ' Square27 28 End Class ' FrmOverload2

Procedure calls cannot be distinguished by return type

BZUPAGES.COM

Page 40: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Overload2.vb

Program Output

The creating of overloaded procedures with identical parameter lists and different return types produces a syntax error

BZUPAGES.COM

Page 41: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

6.17.2 Optional Arguments

• Optional– Optional arguments are specified in the procedure header

with keyword Optional

• Syntax errors– Not specifying a default value for an Optional parameter

is a syntax error

– Declaring a non-Optional parameter to the right of an Optional parameter is a syntax error

BZUPAGES.COM

Page 42: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Power.vb

1 ' Fig 6.24 Power.vb2 ' Calculates the power of a value, defaults to square.3 4 Public Class FrmPower5 Inherits System.Windows.Forms.Form6 7 Friend WithEvents txtBase As TextBox ' reads base8 Friend WithEvents txtPower As TextBox ' reads power9 10 Friend WithEvents inputGroup As GroupBox11 12 Friend WithEvents lblBase As Label ' prompts for base13 Friend WithEvents lblPower As Label ' prompts for power14 Friend WithEvents lblOutput As Label ' displays output15 16 Friend WithEvents cmdCalculate As Button ' generates output17 18 ' Visual Studio .NET generated code19 20 ' reads input and displays result21 Private Sub cmdCalculate_Click(ByVal sender As System.Object, _22 ByVal e As System.EventArgs) Handles cmdCalculate.Click23 24 Dim value As Integer25 26 ' call version of Power depending on power input27 If Not txtPower.Text = "" Then28 value = Power(Convert.ToInt32(txtBase.Text), _29 Convert.ToInt32(txtPower.Text))30 Else31 value = Power(Convert.ToInt32(txtBase.Text))32 End If33 34 lblOutput.Text = Convert.ToString(value)35 End Sub ' cmdCalculate_Click

Determines whether txtPower contains a value

BZUPAGES.COM

Page 43: 6.1 Introduction Divide and Conquer –The best way to develop and maintain a large program is to construct it from small, manageable pieces. BZUPAGES.COM

Power.vb

36 37 ' use iteration to calculate power38 Function Power(ByVal base As Integer, _39 Optional ByVal exponent As Integer = 2) As Integer40 41 Dim total As Integer = 142 Dim i As Integer43 44 For i = 1 To exponent45 total *= base46 Next47 48 Return total49 End Function ' Power50 51 End Class ' FrmPower

When omitted, the Optional argument defaults to the value 2

BZUPAGES.COM