Visual Basic -2

advertisement
CSI 1306
PROGRAMMING IN VISUAL BASIC
PART 2
Part 2
 1. Strings
 2. Translating Conditional Branch Instructions
 3. Translation Set 2
 4. Debugging Programs
 5. Additional Material
1. Strings
Strings
 A string is any combination of letters, numbers or
symbols surrounded by double quotes " "
 Two strings are considered equal if and only if
each and every character is identical
– “Bob” is equal to “Bob”
– but not equal to “BOB”, “bob” or “Robert”
 Strings can be manipulated in assignment
statements
Strings
 The following operators can be used on Strings
– Len, Lcase, Ucase, Right, Left, InStr, Ltrim, Rtrim,
Trim, Val, Str, &
 For example
– Str(Number)
• converts a numeric type into a string
• Str(456)  “ 456”
– Concatenation (joining two strings)
• done with & (ampersand)
• “Hello” & “World”  “HelloWorld” (no space)
 These operators are defined in the Additional
Material at the end of the lecture slides
2. Translating Conditional
Branch Instructions
Review of Comparisons
 The arithmetic logic unit in the central processing
unit of a computer is capable of comparing 2
numbers
 The result of the comparison is either a True or a
False
 We use the result to determine which block of
code to execute (conditional branch) or whether to
exit a loop
Review of Comparisons
 Comparisons can be made on both numeric and
string data types
 The comparison operators in Visual Basic are
–
–
–
–
–
–
<
>
=
<=
>=
<>
Less Than
Greater Than
Equal
Less Than or Equal
Greater Than or Equal
Not Equal
Conditional Branch Instructions
 IF statement
IF (condition) THEN
instruction block
END IF
 Condition is a variable or expression which must
evaluate to either True or False
 If the condition is True, then execute the
instruction block
 If the condition is False, do not execute the
instruction block
Conditional Branch Instructions
 Write a program that will order the values of X
and Y so that the smaller value will be in X and
the larger value will be in Y.
 Use the concept of a SWAP
Conditional Branch Instructions
OPTION EXPLICIT
'Written by T. James
Sub swap ()
Dim X
as Single
Dim Y
as Single
Dim Temp as Single
If (X > Y) Then
temp = X
X = Y
Y = temp
End If
End Sub
'A Value
'A Value
'Hold for a swap
Conditional Branch Instructions
 Are the results identical when these two code
fragments are executed?
IF (big > small) THEN
big = small
small = 0
END IF
IF (big > small) THEN
big = small
END IF
small = 0
In the left code fragment, small becomes zero
only when big is greater than small.
In the right code fragment, small always
becomes zero
Conditional Branch Instructions
 IF statement with an ELSE clause
IF (x > 5) THEN
do instruction block 1
END IF
IF(x <= 5) THEN
do instruction block 2
END IF
IF (x > 5) THEN
do instruction block 1
ELSE
do instruction block 2
END IF
 What if we need multiple related tests?
Conditional Branch Instructions
 IF statement with ELSEIF clauses
IF (condition 1) THEN
Do instruction block 1
ELSEIF (condition 2) THEN
Do instruction block 2
ELSEIF (condition 3) THEN
Do instruction block 3
ELSE
Do instruction block 4
END IF
 Can include any number of ELSEIF clauses
 The ELSE clause may be omitted
Conditional Branch Instructions
 ALGORITHM
 VISUAL BASIC
If student is a Male
If (Gender = “M”) Then
Let Mark = 60%Midterm + 40%Final
Otherwise
Let Mark = 40%Midterm + 60%Final
If Mark > 80
Let Grade = A
Else If Mark > 60
Let Grade = C
NG = 0.6*MT + 0.4*FE
Else
NG = 0.4*MT + 0.6*FE
End If
If (Mark > 80) Then
Grade = “A”
ElseIf (Mark > 60) Then
Grade = “C”
Else
Else
Let Grade = F
Grade = “F”
End If
Conditional Branch Instructions
 Write an IF statement to assign the correct grade
to an exam mark
–
–
–
–
–
A if exam mark is 90 or above
B if exam mark is 80 to 89
C if exam mark is 70 to 79
D if exam mark is 60 to 69
F if exam mark is below 60
Conditional Branch Instructions
OPTION EXPLICIT
'Written by T. James
Sub Grades ()
Dim Mark as Single
'Final Mark
Dim Grade as String*1 'Letter Grade
If (Mark >= 90) Then
Grade = "A"
ElseIf (Mark >= 80) Then
Grade = "B"
ElseIf (Mark >= 70) Then
Grade = "C"
ElseIf (Mark >= 60) Then
Grade = "D"
Else
Grade = "F"
End If
End Sub
Conditional Branch Instructions
 What is wrong with this code fragment?
If (Mark >= 60) Then
Grade = “D”
ElseIf (Mark >= 70) Then
Grade = “C”
ElseIf (Mark >= 80) Then
Grade = “B”
ElseIf (Mark >= 90) Then
Grade = “A”
Else
Grade = “F”
End If
 The only two grades ever assigned are D and F
Review of Comparisons
 Note that in a comparison, if Pass is a Boolean
variable
If (Pass = True) Then
is the same as
If Pass Then
and
If (Pass = False) Then
is the same as
If (not Pass) Then
Conditional Branch Instructions
 For choosing among integer values of a variable,
the SELECT CASE statement may be used
SELECT CASE variable
CASE value1
Do instruction block 1
CASE value2
Do instruction block 2
CASE ELSE
Do instruction block 3
END SELECT
 Can include any number of CASE clauses
 The CASE ELSE clause may be omitted
Conditional Branch Instructions
IF (X=1) THEN
Y=5
ELSEIF (X=3) THEN
Y=4
ELSEIF (X=6) THEN
Y=3
ELSE
Y=2
END IF
SELECT CASE X
CASE 1
Y=5
CASE 3
Y=4
CASE 6
Y=3
CASE ELSE
Y=2
END SELECT
The two code fragments accomplish the same
result. The one on the right is easier to read.
Conditional Branch Instructions
 For choosing among multiple ranges of values of a
variable, the CASE IS clause can be used
SELECT CASE variable
CASE IS range1
Do instruction block 1
CASE IS range2
Do instruction block 2
CASE ELSE
Do instruction block 3
END SELECT
Conditional Branch Instructions
IF (X<10) THEN
Y=5
ELSEIF (X<20) THEN
Y=4
ELSEIF (X<30) THEN
Y=3
ELSE
Y=2
END IF
SELECT CASE X
CASE IS <10
Y=5
CASE IS <20
Y=4
CASE IS <30
Y=3
CASE ELSE
Y=2
END SELECT
The two code fragments accomplish the same result
Translating Conditional Branch
Instructions
 Look at the METHOD
 Each conditional branch instruction should be
translated to an IF (or, if appropriate, a SELECT
CASE) statement
 Make your code easy to read. Use a uniform
indentation scheme
3. Translation Set 2
Translate 4
 Translate Algorithm 2.4
Name: FARE
Given: Age
Change: None
Result: Price
Intermediates: None
Definition: Price := FARE(Age)
Get Age
If (Age < 16)
Let Price = $7
Else If (Age > 65)
Let Price = $5
Else
Let Price = $10
Give Price
Option Explicit
Translate 4
'Written By T. James
Sub Fare()
Dim Age as Integer
 Translate Algorithm 2.4
Name: FARE
Given: Age
Change: None
Result: Price
Intermediates: None
Definition: Price := FARE(Age)
Get Age
If (Age < 16)
Let Price = $7
Else If (Age > 65)
Let Price = $5
Else
Let Price = $10
Give Price
Dim Price as Single
Age = InputBox("Age?")
MsgBox("Fare is " & Price)
End Sub
Option Explicit
Translate 4
Algorithm 2.4
'Written By T. James
Sub Fare()
Dim Age as Integer
 Translate Algorithm 2.4
Name: FARE
Given: Age
Change: None
Result: Price
Intermediates: None
Definition: Price := FARE(Age)
Get Age
If (Age < 16)
Let Price = $7
Else If (Age > 65)
Let Price = $5
Else
Let Price = $10
Give Price
Dim Price as Single
Age = InputBox("Age?")
If (Age < 16) Then
Price = 7.00
ElseIf (Age > 65) Then
Price = 5.00
Else
Price = 10.00
End If
MsgBox("Fare is " & Price)
End Sub
Translate 5
 Translate Algorithm 2.2
Name: BIG3
Givens: N1, N2, N3
Result: Largest
Intermediate: None
Definition:
Largest := BIG3(N1,N2,N3)
Get N1
Get N2
Get N3
If (N1 > N2)
Let Largest = N1
Else
Let Largest = N2
If (N3 > Largest)
Let Largest = N3
Give Largest
Option Explicit
Translate 5
'Written By T. James
Sub Big3 ()
Dim N1 as Integer
 Translate Algorithm 2.2
Dim N2 as Integer
Name: BIG3
Givens: N1, N2, N3
Result: Largest
Intermediate: None
Definition:
Largest := BIG3(N1,N2,N3)
Dim N3 as Integer
Get N1
Get N2
Get N3
N3 = InputBox("N3?")
If (N1 > N2)
Let Largest = N1
Else
Let Largest = N2
If (N3 > Largest)
Let Largest = N3
Give Largest
Dim Largest as Integer
N1 = InputBox("N1?")
N2 = InputBox("N2?")
Translate 5
 Translate Algorithm 2.2
Name: BIG3
Givens: N1, N2, N3
Result: Largest
Intermediate: None
Definition:
Largest := BIG3(N1,N2,N3)
Get N1
Get N2
Get N3
If (N1 > N2)
Let Largest = N1
Else
Let Largest = N2
If (N3 > Largest)
Let Largest = N3
Give Largest
Option Explicit
Algorithm 2.2
'Written By T. James
Sub Big3 ()
Dim N1 as Integer
Dim N2 as Integer
Dim N3 as Integer
Dim Largest as Integer
N1 = InputBox("N1?")
N2 = InputBox("N2?")
N3 = InputBox("N3?")
If (N1>N2) Then
Largest = N1
Else
Largest = N2
End If
If (N3 > Largest) Then
Largest = N3
End If
MsgBox("L = " & Largest)
End Sub
Translate 6
 Translate Algorithm 2.5
Name: MEDICAL
Given: Expense
Change: None
Result: Refund
Intermediates: LL, UL (Constants)
Definition:
Refund := MEDICAL(Expense)
Set LL = 100
Set UL = 2,000
Get Expense
If (Expense <= LL)
Let Refund = 0
Else If (Expense <= UL)
Let Refund = 90% (Expense-LL)
Else
Let Refund = 90% (UL-LL) +
100% (Expense - UL)
Give Refund
Translate 6
 Translate Algorithm 2.5
Name: MEDICAL
Given: Expense
Change: None
Result: Refund
Intermediates: LL, UL (Constants)
Definition:
Refund := MEDICAL(Expense)
Set LL = 100
Set UL = 2,000
Get Expense
If (Expense <= LL)
Let Refund = 0
Else If (Expense <= UL)
Let Refund = 90% (Expense-LL)
Else
Let Refund = 90% (UL-LL) +
100% (Expense - UL)
Give Refund
Option Explicit
'Written By T. James
Sub Medical()
Dim Expense as Single
Dim Refund as Single
Const LL = 100
Const UL = 2000
Expense=InputBox("E?")
Translate 6
 Translate Algorithm 2.5
Name: MEDICAL
Given: Expense
Change: None
Result: Refund
Intermediates: LL, UL (Constants)
Definition:
Refund := MEDICAL(Expense)
Set LL = 100
Set UL = 2,000
Get Expense
If (Expense <= LL)
Let Refund = 0
Else If (Expense <= UL)
Let Refund = 90% (Expense-LL)
Else
Let Refund = 90% (UL-LL) +
100% (Expense - UL)
Give Refund
Option Explicit
Algorithm 2.5
'Written By T. James
Sub Medical()
Dim Expense as Single
Dim Refund as Single
Const LL = 100
Const UL = 2000
Expense=InputBox("E?")
If (Expense <= LL) Then
Refund = 0
ElseIf (Expense<=UL) Then
Refund = .90*(Expense-LL)
Else
Refund = 0.9*(UL-LL)+Expense-2000
End If
MsgBox("Refund " & Refund)
End Sub
4. Debugging Programs
Debugging Programs
 Step 1
– Check the translation from your algorithm to Visual
Basic
 Step 2
– Recheck the logic in your algorithm
 Step 3
– Use the debug facilities of Visual Basic
Debugging Programs
 To debug a program is to identify and correct
errors in your program
– Usually, these are semantic (logic) or runtime errors.
You will already have corrected most syntax errors
when entering the code
 Add Watch capability
– Shows the current value of variables and expressions
as the program executes
Debugging Programs
 Step Into your code
– Runs the next executable line of code. If the code calls
another program, your view of the code shifts to the
called program until it ends
– Step Over also runs the next executable line of code.
However, if the code calls another program, the entire
called program is run so that your view of the code is
never shifted from the calling program
 Using the watch and step into debug capabilities
is analogous to tracing
Debugging Programs
 For programs with many lines of code, where you
might not want to step through each line of
executable code, you can set breakpoints
 Toggle Breakpoint
– Creates or removes a breakpoint, a location in the code
where Visual Basic halts execution
 Quick Watch
– During break mode, lets you check the value of a
variable or expression for which you have not defined a
watch
4. Additional Material
String Operators
String Operators
 Len(String)
– returns the number of characters in the String
– Len(“Hello World”)  11
 Lcase(String)
– changes all the characters in String to lower case
– Lcase(“Hello World”)  “hello world”
 Ucase(String)
– changes all the characters in String to upper case
– Ucase(“Hello World”)  “HELLO WORLD”
String Operators
 Right (String, N)
– returns the last N characters in the String
– Right(“Hello World”, 5)  “World”
 Left (String, N)
– returns the first N characters in the String
– Left(“Hello World”, 5)  “Hello”
 InStr (String1, String2)
– returns a number, counting from the left, where String2
can be found in String1
– returns 0 if String 2 is not in String1
– InStr(“Hello World”, “World”)  7
String Operators
 Ltrim (String)
– eliminates leading blanks
– Ltrim (“ Hello “)  “Hello “
 Rtrim(String)
– eliminates trailing blanks
– Rtrim (“ Hello “)  “ Hello“
 Trim(String)
– eliminates both leading and trailing blanks
– Trim (“ Hello “)  “Hello“
String Operators
 Val(String)
– converts a string (consisting of numbers) into a numeric
type
– Val(“123”)  123
 Str(Number)
– converts a numeric type into a string
– Str(456)  “ 456” (a leading space is always reserved
for the sign)
 Concatenation (joining two strings)
– done with & (ampersand)
– “Hello” & “World”  “HelloWorld” (no space)
Homework
For each of the following questions:
Develop an algorithm
Translate the algorithm into Visual Basic Code
•Write an algorithm to reverse the digits in a three digit
number and then add that number to 500. For example, 468
becomes 864. When added to 500, the result is 1364.
•Write an algorithm to get the names and ages of two people.
Return the name of the person who is older (in the format “x
is older than y”, where x and y are the names of the two
people), unless the two people are the same age, in which
case, return the message “x is the same age as y”.
An automotive sales representative’s commission is
calculated as a percentage of the sale:
– 8% of the first $5,000.00 of the sale price
– 10% on the remainder of the sale price, if the remainder
is less than or equal to $80,000.00 or
– 12.5% on the remainder, if the remainder is more than
$80,000.00
 Develop the visual basic code that will accept the
sale price of the automobile and calculate and
display the sales representative’s commission.
Download