Title: Lesson 4 Decisions, Looping, Arrays, and Searching
1Lesson 4 Decisions, Looping, Arrays, and
Searching
- Microsoft Visual Basic .NET, Introduction to
Programming
2Objectives
- Plan the solution to a programming problem.
- Understand and apply the rules of logic to
complex True/False expressions. - Write advanced lf-Then-Else End If statements.
- Write Do-While and Do-Until statements.
- Create program loops that depend on logical
expressions. - Declare and use arrays.
- Use built-in functions for a variety of tasks.
3Vocabulary
- Algorithm
- Array
- Binary search
- Concatenation
- Counting statement
- Data structure
- Debugging line
- Declarations
- Element
- Error trapping statements
- Flag
- Index
- Items collection
- Lifetime
- Linear search
- Member
- Mod
4Vocabulary
- Private variable
- Running total
- Sentinel
- Stepwise refinement
- Subroutine
- Subscript
- User interface
- Visibility
5Approaching a Problem
- Collect information.
- Create the user interface.
- Develop the algorithm.
- Subdivide the problem.
- Choose data structures.
- Write the code.
6Collect Information
- Start by getting all the information you can
about the problem. Talk to the users who will run
the program. Find out what they want. Do not
assume that you know more about their problems
than they do. Gather as much information as you
can, but expect to revise your solution later to
meet unexpected or newly discovered needs.
7Create the User Interface
- The user interface is how the user will interact
with the program. It is what the user keys and
clicks. It is what the user sees as output. You
can create a Visual Basic program that is "all
show." Design the forms used to enter data.
Design the forms that display the information.
Once these samples are created, return to the
user. Find out if your mock solution is what the
user expects.
8Develop the Algorithm
- Solve the problem completely on paper. If you
cannot solve a problem with paper, a pencil, and
a calculator, you probably will not be able to
program the computer to solve the problem. The
step-by-step solution to a problem is called an
algorithm. The word algebra comes from the same
root.
9Subdivide the Problem
- Subdivide each section into smaller and smaller
tasks. Once youve divided the problem, each part
can be approached individually. Usually these
smaller problems are easy to solve. Even if they
are not, you have at least modularized the
problem, and you can tackle the tough parts later
in the process. This process is called stepwise
refinement.
10Event Procedure
- An event procedure is a subroutine connected
with an action performed on an object like the
Click event of a text box or button. When a
button or menu item is clicked, the code
associated with that event is executed. The Click
event is one of many events that an object may
respond to.
11Choose Data Structures
- A data structure is a way to organize data. The
simplest way to represent data is to use
variables. - Another important data structure is the array. An
array is a list of values referred to by a single
variable name. Values in an array may be numbers
or strings, or they may represent complex data
types that include many pieces of information. - Other data structures organize data according to
relationships between the individual data items.
12Write the Code
- Writing the code may be the very last thing you
do. Or it may not be. Be flexible. It may be wise
to develop an algorithm and write the code to
solve a particular piece of the problem before
the user interface is designed or before a data
structure is chosen. You may need to experiment
with different solutions or different data
structures to find the one that fits best.
13Important!!
- Don't be afraid to start over. The things you
learn in your first attempt will make your second
attempt better.
14ListBox and ComboBox
- The ListBox control is a display tool that lets
you display lists of values. It also allows the
user to select items from the list for further
processing. - The ComboBox control is closely related to the
ListBox control. When you select an item from the
Class Name box in the Code window, you are using
a combo box. A combo box is like a text box, but
it supplies the user with a list of suggested
entries.
15Items Collection
- The entries displayed in a list box or combo box
are called items. All the items together form the
Items collection. A collection is itself an
object that contains other related objects. In
this case, the objects of the collections are the
entries in the list box or combo box.
16Note
- In many fonts, a lowercase L is nearly
indistinguishable from the numeral 1 or an
uppercase I (eye). The context should tell you
which to use. The three-letter prefix for the
name of a list box is lst, except each character
is lowercase.
17- Initialize the ComboBoxes
- cboCapacity.Items.Add("30 gallon")
- cboCapacity.Items.Add("40 gallon")
- cboCapacity.Items.Add("50 gallon")
- cboPower.Items.Add("Natural Gas")
- cboPower.Items.Add("Electric")
- cboPower.Items.Add("LP Gas")
- cboWarranty.Items.Add("1 year")
- cboWarranty.Items.Add("5 years")
- cboWarranty.Items.Add("8 years")
- cboWarranty.Items.Add("10 years")
18Note
- The single quote character starts a comment.
Comments are normally displayed in a green font.
19Final Appearance of frmWaterHeater
20Note
- To enter repetitive code, select the part of the
code that repeats. Select EditCopy from the menu
bar, or press CtrlC to copy the selected code.
Move the cursor to the beginning of the next line
and paste the code by selecting EditPaste or by
pressing CtrlV. Once the code is copied a
sufficient number of times, go back and edit each
line.
21- lstQualifying.Items.Clear()
- lstQualifying.Items.Add(cboCapacity.Selecteditem)
- lstQualifying.Items.Add(cboPower.SelectedItem)
- lstQualifying.Items.Add(cboWarranty.Text)
22Program Decisions
- The simplest version of the If statement takes
only a single line - If condition Then statement
- NOTE
- The one-line If statement is the original
version. Many early versions of BASIC were
limited to this kind of If.
23Boolean or Logical Expression
- An expression that, when evaluated, results in a
True or False answer. - If the condition tested is True, the statement
or statements following Then are executed. If the
condition tested is False, the statement(s) after
Then are skipped. In either case, the statements
following the If statement are executed.
24Other Versions of the If Statement
- If condition Then
- Statement (s)
- End If
25Other Versions of the If Statement
- If condition Then
- Statement(s) of the True branch
- Else
- Statement(s) of the False branch
- End If
26Nesting If Statements
- If Age lt 2 Then
- Person "Infant"
- Else
- If Age lt 5 Then
- Person "Toddler"
- Else
- Person "Older Child"
- End If
- End If
27ElseIf
- If Age lt 2 Then
- Person "Infant"
- ElseIf Age lt 5 Then
- Person "Toddler"
- Else
- Person "Older Child"
- End If
28Three Ifs
- If Age lt 2 Then Person "Infant"
- If 2 lt Age And Age lt 5 Then Person "Toddler"
- If Age gt 5 Then Person "Older Child"
29Select Case Statement
- Select Case textexpression
- Case expressionlist
- Case expressionlist
- Statement(s)
- Statement(s)
- Case Else
- Statement(s)
- End Select
30Simple Example
- Select Case Choice
- Case 1
- txtShowOne.Visible True
- Case 2
- MessageBox.Show "Show Two"
- Case Else
- MessageBox.Show "Not one or two."
- End Select
31Ranges
- Select Case Age
- Case Is lt 2
- Person "Infant"
- Case 2 To 5
- Person "Toddler"
- Case 6 To 12
- Person "Preteen"
- Case 13 To 19
- Person "Teenager"
- Case 20,21,22
- Person "Young adult"
- Case Is gt 22
- Person "Older adult"
- End Select
32Adding Items to the Items Collection
33- Dim Index As Integer lstCardList.SelectedIndex
- Messagebox.Show("Selected index"
Index.ToString, "Index") - Select Case Index
- Case 0 'Discover card
- Messagebox.Show("1500", "Credit Limit")
- Case 1 'MasterCard
- Messagebox.show("2000", "Credit Limit")
- Case 2 'VISA
- Messagebox.Show("3000", "Credit Limit")
- Case 3 'VISA Gold
- Messagebox.Show("3500", "Credit Limit")
- Case 4 'Platinum
- Messagebox.Show("5000", "Credit Limit")
- Case Else
- Messagebox.Show("Illegal Entry")
- End Select
34Debugging Line
- A debugging line is a line of code included in
the program to let the user know what is going on
as the code is executed. In the final version of
the application, there is no need to display the
value of Index. Open the Code window, locate the
Messagebox.Show statement that displays the value
of Index, and put a single quote at the beginning
of the line. This is called commenting out a line
of code because the single quote character turns
the whole line into a comment. Commenting out a
debugging line is better than deleting it
because, when the program is modified, the line
may once again be needed.
35Programming Skills
- Characters or strings can also be used to select
different cases, as shown below - Select Case FirstName
- Case "Groucho"
- Statements(s)
- Case "Harpo"
- Statements(s)
- Case "Chicko"
- Statement(s)
- Case Else
- Statements(s)
- End Select
36A Lesson in Repetition
- For loops are called definite loops because the
starting point, the upper limit, and the
increment are all known before the loop begins.
But it is not always possible to know the number
of repetitions necessary for a loop before the
loop begins. You may need to process records from
a database until you run out of data. Or you may
need to process data from the keyboard until a
special ending value, called a sentinel value, is
entered. For these situations, use an indefinite
loop.
37Do While
- Do While condition
- Body
- Loop
38Do While Example
- In the loop below, the value of x is initialized
to 1 before the loop starts. The condition x lt
100 is evaluated before the body of the loop is
executed. Since the condition is True, the
statement in the body of the loop is executed.
The value of x is reassigned to 2 1 1, or 3.
The Loop statement at the end sends the program
flow back to the top of the loop. At the top of
the loop, the condition is tested again to see if
it is True. Since it is still True, the loop
repeats. - x 1
- Do While x lt 100
- x 2 x 1
- Loop
39Do-While Testing at the End
- Do
- Body
- Loop While condition
40An Example
- Dim PopBottles As Integer
- Do
- PopBottles CInt(InputBox("Enter the number of
broken bottles")) - Loop While PopBottles gt 0
41Do-Until
- Do Until condition
- Body
- Loop
- Example
- X 1
- Do Until x gt 100
- x 2 x 1
- Loop
42Do-Until
- X 1
- Do
- Body
- Loop Until x gt 100
43Divisibility
- To test divisibility, you use the Mod operator.
The Mod operator divides one whole number by
another and returns the remainder of the
division. Five mod three is two since three goes
into five one time with a remainder of two. If
two numbers are divided and the remainder is 0,
the first number is divisible by the second.
Fifteen Mod five is 0 because five goes into
fifteen evenly, leaving a remainder of 0. - To test to see if a number is even, divide it by
two. If the number is divisible by two, then
number Mod two will equal 0. If the number is
odd, the remainder is one.
44The Goldbach Conjecture
- Take any positive whole number. If the number is
even, divide it by two. If the number is odd,
multiply it by three and add one. Goldbach
claimed that the series of numbers generated by
applying these two rules always ends with a one. - For example, if you start with the number 7,
since it is odd, multiply by 3 and add 1. The
result is 22. Since 22 is even, divide by 2. The
result is 11. The sequence generated is 7, 22,
11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4,
2, and 1.
45 46- Dim x As Integer
- Do
- x CInt(InputBox("Enter a positive whole
number", "Goldbach", "7")) - Loop Until x gt 0
- lstDisplay.Items.Add(x.ToString)
- Do While x ltgt 1
- If x Mod 2 0 Then
- x x / 2
- Else
- x 3 x 1
- End If
- lstDisplay.Items.Add(x.ToString)
- Loop
47- Dim x As Integer, y As Integer, Largest As
Integer - x 1
- Do
- x x 1
- Largest x
- y x
- lstDisplay.Items.Clear()
- lstDisplay.Items.Add(y)
48- Do While y ltgt 1
- If y Mod 2 0 Then
- y y \ 2
- Else
- y 3 y 1
- End If
- lstDisplay.Items.Add(y)
- If y gt Largest Then
- Largest y
- End If
- Loop
- Loop Until Largest gt 1000
49Programming Skills
- The section of the code shown below
- If y gt Largest Then
- Largest y
- End If
- These lines compare the current value of y with
a value stored in Largest. If the value of y
exceeds the value of Largest, the value of y is
saved in Largest. This allows the programmer to
find the largest (or smallest) item in a list and
save that value for later processing.
50The Counting Statement, x x 1.
- Algebraically, this is not a valid equation, but
it works fine in a program. It is not an equation
at all, but it is an assignment statement.
Evaluation starts on the right side of the equal
sign. The value of x is found, one is added, and
the result is assigned back to the variable x.
This is a common statement that may occur several
times in the same program.
51Running Total Total Total x
- Evaluation starts on the right side of the equal
sign. The value of Total is fetched from memory.
The value of x is added to the Total and the
result is assigned back to the variable, Total.
What normally happens in a checkbook is that a
total is written at the top of the page, then
check amounts are entered on each line and
subtracted from the running total. Running totals
are common in programs.
52Arrays
- An array is a list of values referred to by a
single name. Arrays make it easy to access a list
of related values. Arrays store lists of names,
values, or objects. An array is an appropriate
data structure anytime you want to hold a list of
values in memory for further processing or
display. - You declare an array in a Dim statement by
following a variable name with a number enclosed
in parentheses. - Dim ClassList(45) As String
- Dim Scores(10) As Integer
53Putting Values into an Array
- Dim ClassList(10) As String
- Dim Index As Integer
- For Index 0 To 9 'Valid indices from 0 to 9.
- ClassList(Index) InputBox("Enter name"
- Index.toString "")
- Next
54The Out-of-Range Error Message
55Linear Search
- Dim Target As String
- Target InputBox("Enter the target")
- For Index 0 To 9
- If Target ClassList(Index) Then
- Exit For
- End If
- Next
- MessageBox.Show(Index.ToString)
56Scope of a Variable
- The scope of a variable is its visibility and
its lifetime. The lifetime of a variable is when
it does and does not hold valid values. Most
variables have a limited life. They come into
existence at the beginning of an event procedure
and disappear when the procedure ends. They
reappear when the procedure is again executed. - The visibility of a variable is the point at
which the value of the variable is available to
use or change. A variable declared with a Dim
statement in one event procedure is normally not
available (visible) in another event procedure.
Such a variable is a private variable.
57Final Placement of Controls on the Form
58- Dim FirstName(5) As String
- Dim Current As Integer
- Current is used to keep track of the next empty
space in the array. Visual Basic automatically
initializes its value to 0. It is also used when
names are added to the array. When the value of
Current exceeds the last valid array subscript,
the program refuses to accept further input.
Current is declared in Declarations along with
the array because its lifetime must equal the
lifetime of the form.
59- If Current lt 5 Then
- FirstName(Current) InputBox("Enter a first
name") - lstDisplay.Items.AddFirstName(Current)
- Current Current 1
- Else
- MessageBox.Show("Array capacity exceeded!")
- End If
60- lstDisplay.Items.Clear
- Dim Index As Integer
- For Index 0 To 4
- FirstName(Index) " "
- Next
- Current 0
- btnEnter.Focus
61- Dim Target As String, Index As Integer
- Dim Found As Boolean
- Do
- Target InputBox("Enter the name for which
to search") - Loop Until Target ltgt ""
- Found False 'Initialize the Boolean
variable. - For Index 0 To Current - 1
- If Target FirstName(Index) Then
- Found True
- Exit For
- End If
- Next
62- If Found Then
- MessageBox.Show(Target.ToString " found
at " Index.ToString) - Else
- MessageBox.Show(Target.ToString " not in
list.") - End If
63Binary Search
- The binary search is a powerful algorithm to
find a target in an ordered list. If you use a
linear search to find a target in an unordered
list of 100, you will have, on average, 50
comparisons before you find the target. Each time
the If statement compares the target to an item
in the list, it is a comparison. The number of
comparisons is proportional to the number of
items in the list. If there are n items in the
list, it takes an average of n/2 comparisons to
find the target in an unordered list. - The binary search can find an item in an ordered
list of 100 with no more than seven comparisons.
It can search a list of 1000 items with no more
than 10 comparisons. The linear search would
average 500 comparisons with a list of 1000.
64Binary Search
- The reason the binary search is so efficient is
that, with every comparison, the list is cut in
half. The search starts by comparing the target
with the middle of the list. If the target is
equal to the item examined, the search is over.
If the target is alphabetically less than the
middle, the bottom half of the list is thrown
out. The list is redefined to include just the
items in the top half of the list and the process
is repeated. With every comparison, the list of
the remaining items is cut in half. Every time
the size of the list doubles, only one additional
comparison is needed to complete the search.
65Binary Search, Setup
- Dim Target As String
- Dim High, Low, Md, Position As Integer
- 'Assume lstDisplay is filled with names and
Sorted True - Position 0
- Low 0
- High lstDisplay.Items.Count - 1
66 Binary Search, Loop
- Do While Low lt High
- Md (Low High) \ 2
- If Target lstDisplay.Items(Md) Then
- Position Md
- Exit Do
- ElseIf Target lt lstDisplay.Items(Md).ToStrin
g Then - High Md - 1
- Else
- Low Md 1
- End If
- Loop
67 Binary Search, Finish
- If Low lt High Then
- MessageBox.Show("Found " Target
- at position" Position)
- else
- MessageBox.Show("The Target has not
- been found.")
- End If
68Festival of Strings
69Summary
- The planning and execution of a programming
application can be broken down into the following
steps - Collect information from the user about the
intended use of the application. - Create the user interface and show the result to
the user. Alter the design in accordance with the
user's needs. - Develop the algorithm used to solve the problem.
Work the problem out with paper, pencil, and a
calculator before trying to solve it on the
computer. - Subdivide the problem by breaking it into smaller
and smaller pieces. Plan the interaction of all
pieces. - Choose data structures to represent the data
processed in the program. This choice may be
determined by the algorithm and must be carefully
made to optimize both run time and storage space. - Write the code needed to solve each small
problem. If the planning is careful and complete,
the code will fit together like a puzzle.
70Summary
- A combo box lets the user choose an item from a
list. It is most like the text box control. - There are several versions of the If statement.
- Logical expressions used to build the conditions
tested in If statements can be combined using
And, Or, and Not. - The Select Case statement replaces a series of
If- Then statements. - The Do-While and Do-Until statements build
indefinite loops. These loops are controlled by
conditions within the loop itself.
71Summary
- Arrays are lists of values referred to by the
same name. The elements or members of the array
are uniquely selected by specifying an index or
subscript value. - A linear search is used to search for a target
value in an array. It works by sequentially
searching every item in the list. The average
number of comparisons made by the linear search
while searching for a target among n elements of
the list is about n/2. - A binary search can search an ordered list with a
handful of comparisons. The maximum number of
comparisons is the value of x in the equation 2x
n, where n is the number of items in the list.
72Summary
- If the Sorted property of a list box is set to
True, the elements of the list box are always
displayed in alphabetical order. - Visual Basic uses a large number of functions to
handle special jobs involving mathematics and
string manipulation.