vb csci130 instructor: dr. lynn ziegler, slides originally designed by dr. imad rahal, updated by...

62
VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYER Order High-order P.L.: Visual Basic 1 System Software: O.S. 3 Data Representation 5

Upload: clinton-kelley

Post on 28-Dec-2015

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

VB

CSCI130Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by

Lynn Ziegler

LAYER Order

High-order P.L.: Visual Basic 1

System Software: O.S. 3

Data Representation 5

Page 2: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Computer Programming Different types of high-level languages

The imperative programming paradigm A program is a sequence of instructions Machine language/assembly language

Object-oriented paradigm (just as we, humans, think) Visual Basic or VB uses OOP (Object Oriented Paradigm)

Objects each having properties and actions: Imagine a computer screen with several icons Each a icon is an object – also desktop is an object Each icon has its own attributes and actions

Properties: Icon image/shape and color Actions:

Single-clicked Darken Color (affect itself) Double-clicked

Run corresponding program (Program is another object) Change desktop look (Desktop is another object)

Page 3: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Object-Oriented Programming

The program is collection of interacting objects

In VB, actions are triggered by eventsDone by users (interactive): e.g. CLICK or

DOUBLE_CLICK

Objects sharing properties/methods are grouped into classesClass: An Icon (Student)Object: My Documents, My Computer (John, Lynn,

Cathy, etc ..)

Page 4: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Introduction

Basic is an imperative language developed in 1960s

Visual Basic (VB) --- developed by MicrosoftOO version of BasicUnderlying ALL MS office programs

You could do a lot Write your own programs Tailor office applications

Visually oriented Programs have a GUI for input/outputFirst thing to do to build a VB program is to design the

interface

Intro to VB

Page 5: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Hungarian Notation A must in this course Every object used MUST be renamed including the form(s) using

the following rules Form frmFormName

E.g. frmTemperature Also change caption

Textbox txtTextBoxName E.g. txtInputBox Also change Text (to empty)

Label lblLabelName E.g. lblDescribeInput Also change caption

Button btnButtonName E.g. btnComputeButton Also change caption

RichTextBox outBoxName E.g. outCelsiusTemp

Page 6: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Simple Calculations Algorithm

Get temperature in Celsius, call it celsiusTemp Convert using fahrenheitTemp = 1.8*celsiusTemp+32 Print result in a Rich Text Box

Show code: option Explicit

Private Sub cmdConvertButton_Click() (1) ‘program to convert Celsius to Fahrenheit (2) Dim celsiusTemp As Single=0.0 ‘declare a variable of type Single ‘(Note you can have no space in a name) Dim fahrenheitTemp As Single=0.0 ‘declare a variable of type float (3) celsiusTemp = txtInput.Text ‘copy value in txtInput into celsiusTemp (4) fahrenHeit = 1.8*celsiusTemp+32.0 ‘Compute fahrenheitTemp (5) outResults.AppendText(FormatNumber(celsiusTemp,3) & “ degrees Celsius is” & fahrenheitTemp & “ degrees Fahrenheit.“) ‘prints resultEnd Sub

Page 7: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Simple Calculations

'program to convert Celsius to Fahrenheita comment describing what the subroutine does…for

the readerEverything starting with a quotation mark (‘) is

ignored by the computerFor longer programs, we need more comments

spread throughout the program

celsiusTemp & fahrenheitTemp are variables that represents the memory registers used to store the floating-point values

Page 8: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Variable Declarations

Declaring variables At the beginning of the codeDim variable_name As Type = initialValue

Dim C As Single = 0.0

The variable name is a string of characters (letters, numbers, and

others)MUST Start with a lower case letter If there are multiple words, capitalize the later words (for

example, bestCostEstimate). This is called Camel NotationNO SPACES

Relate the Name to the kind of value it is storing (REQUIRED)

Page 9: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Variable Declarations Type

Integer for short integers (2’s complements) 2 bytes -2,147,483,648 through 2,147,483,647 (signed)

Long for long integers (double precision 2’s complements) 4 bytes -9,223,372,036,854,775,808 through 9,223,372,036,854,775,807

Single for short real numbers (floating-point) 4 bytes -3.4028235E+38 through -1.401298E-45 for negative 1.401298E-45 through 3.4028235E+38 for positive

Double for long real numbers (double precision floating-point) 8 bytes -1.79769313486231570E+308 through -4.94065645841246544E-324 for

negative 4.94065645841246544E-324 through 1.79769313486231570E+308 for

positive Boolean: True or False

2 bytes String for character strings (ASCII)

Variable length 0 to approximately 2 billion Unicode characters

Page 10: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Variable Declarations

When declaring a variable, we initialize itDim A As Integer =10

If you do not initialize (DO NOT USE THIS)All numbers are set to 0Strings to emptyBooleans to false

VB does not force us to declare themUsing Option Explicit

Placed at the top of code module sheetForces all variables to be declared on that formA MUST IN THIS COURSE

Page 11: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Simple Calculations

fahrenheitTemp = 9/5*celsiusTemp+32We need to

divide by 5multiply by C

Whenever a variable is used, the computer uses the corresponding value stored in the variable

add 32

BUT IN WHAT ORDER?

Page 12: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Order of Precedence

Arithmetic operations

What happens when we have more than 1 in the same equation?

Addition +

Subtraction -

Multiplication *

Division /

Exponentiation ^

F = 32 + 9 / 5 * C (), ^, * and /, + and –

Handled from left to right

A = 3*8/2^2+2-52^2 = 4 A = 3*8/4+2-

53*8 = 24 A = 24/4+2-

524/4 = 6 A = 6+2-56+2 = 8 A = 8-58-5 = 3 A = 3

Page 13: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Simple CalculationsoutResults.AppendText(FormatNumber(celsiusTemp,3) & “ degrees Celsius is ” & fahrenheitTemp & “ degrees Fahrenheit.“) An object function for the Rich Text Box outResults

The value in celsiusTemp is printed first An & is used to separate the numbers and the following or

preceding things being printed Text between double quotes is printed as is All printing is done in the Rich Text Box (outResults)

Every time we click the button, the program prints the required output

What happens if we click it twice? It doubles the output on one line.

In the above we might see 20 degrees Celsius is 68 degrees Fahrenheit 20degrees Celsius is 68 degrees

Fahrenheit outResults.Clear()

It clears the Rich Text Box outResults of all text.

Page 14: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Simple Calculations

To add code for the btnExitButtonWe need to double click it in design mode

You should always include a btnExitButton on every formGood programming practice – allows program

exitIndentation makes things clearer for the

readerPrivate Sub ExitButton_Click() EndEnd Sub

Page 15: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Numeric Functions Sqr(X)

Square rootSqr(4)

Int(X) Int(2.1234)

Round(X)To the nearest

integerRound(2.45)

Abs(X)Abs(-34)

Log(X) Log(4)

Program: calculate the roots of a quadratic equation given a, b and c

Private Sub Quadraticbutton_Click()

Dim A As Integer,=0 B As Integer=0Dim C As Integer=0Dim R1 As Double =0.0, R2 As Double=0.0A = txtA.TextB = txtB.TextC = txtC.TextR1 = (-B+Sqr(B^2-4.0*A*C))/(2.0*A)R2 = (-B-Sqr(B^2-4.0*A*C))/(2.0*A)outResults.AppendText(“Roots

are:”&R1&R2)

End Sub

Page 16: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Input

Textboxes Input Boxes

Different than textboxesGood for small amount of input (form full of textboxes is

not nice)

X = InputBox(“prompt message”, “title message”)The input is assigned to variable X when the use hits OK

A = InputBox(“Please enter your password”,”Login”)

Page 17: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Output

Rich Text Boxes Message Boxes

For output specially in situations of errorsdifferent than pictureboxesMessageBox.show(“prompt msg”, “title msg”) MsgBox (“Please enter a valid username and password” , “Error!”)

Page 18: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Output Display (Rich Text Boxes)

Spacing Dim frmtStr as String = “{0,-25}{1,-30}{2,15}” outResults.AppendText(String.Format(frmtStr,“Hello”,”There”,”Students”) &

vbNewLine)Note what this does is the following:• The {0,-25} means the first string (in this case “Hello”) will use 25 spaces and

will be left justifed. It will then appear as Hello followed by 20 spaces.• The {1,-30} means the second string (in this case “There”) will use 30 spaces

starting right after Hello and its spaces and will be left justified. Again, it will appear as There followed in this case by 25 spaces.

• The {2,15} means that the third string (in this case “Students”) will use 15 spaces starting right after There and its spaces and will be right justified.

If we pretend that – represents a space, the pattern would be:Hello--------------------There--------------------------------Students

An & at the end means print the next stuff on the same line.

A vbNewLine means do a carriage return. This String.Format allows alligning things on multiple

lines.

Page 19: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Alligned TextDim frmtStr as String = “{0,-12}{1,-11}{2,5}”

outResults.AppendText(String.Format(frmtStr,“First Name”,”Last Name”,”Score”) & vbNewLine)

outResults.AppendText(String.Format(frmtStr,“_________”,”_________”,” ___”) & vbNewLine)

outResults.AppendText(String.Format(frmtStr,”Jim”,”Jones”,FormatNumber(73.257,1)) & vbNewLine)

outResults.AppendText(String.Format(frmtStr,“Jane”,”Johnson”,FormatNumber(94.326,3) & vbNewLine)

outResults.AppendText(String.Format(frmtStr,”John”,”Jensen”,FormatNumber(56.289,2) & vbNewLine)

The output from these would be nicely lined up as follows:

First Name Last Name Score

________ _________ _____

Jim Jones 73.3

Jane Johnson 94.326

John Jensen 56.29

Note the names are lined up left-justified, the numbers right-justified.

Page 20: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Output Display FormatCurrency(x,y) --- y is 2 by default

x is the decimal number to be formatted y is the number of digits allowed after the decimal point (rounding)

Extra 0s are appended Adds a $ sign and commas if needed FormatCurrency(1234.234,2) = $1,234.23 FormatCurrency(1234.2,2) = ?

FormatPercent(x,y) --- y is 2 by default x is the decimal number (less than 1) to be formatted y is the number of digits allowed after the decimal point (rounding)

Extra 0s are appended FormatPercent(0.5235, 3) = 52.400%

FormatNumber(x,y) --- y is 2 by default Rounds x to the nearest number of digits after the decimal point

specified by y FormatNumber(0.5235) = 0.52 FormatNumber(0.5235,3) = 0.524

Page 21: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Variable Scope

Where we declare a variable defines its scope i.e. where it is knownDetermines what subroutines can access it

Subroutine-level: Within a subroutine only in that subroutine

Form-level: At top of the form (before the code for the first subroutine and after Option Explicit)

It is available in any subroutine that does not have a variable of the same name declared inside it.

Do this if you want a value accessible by all SUBROUTINES for that form

Page 22: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

If Statements

We want to execute something only when a certain condition is met

If condition(s) thenStatements to execute

End If

Read student grade using an inputboxIf 90 or more, print the following in a

message box“Congratulations on your hard work!”

True?

Do action

NOYES

Page 23: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

If Statements

Private Sub cmdGrade_Click() Dim grade As Single = 0 grade = InputBox (“Please enter a score”) If grade >= 90 then

MsgBox(“Congratulations on your hard work!”,”Congrats”) End If

End Sub

Page 24: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Allowed Comparison operations

Equals =

Greater than >

Less than <

Greater than or equal >=

Less than or equal <=

Not equal (i.e. different)

<>

Page 25: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

If Statements What if grade is less than 90?

Nothing happensNot very good!

If statement with the else clauseIf condition(s) then

Statements to execute if condition is metElse

Statements to execute if condition is NOT metEnd IfNote the indentation!

If grade>=90 then display congrats message; otherwise, display support message

True?

Do YESaction

NOYES

Do NO action

Page 26: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

If StatementsPrivate Sub Grade_Click()

Dim grade As Single = 0.0grade = InputBox (“Please enter a score”,”Score”)If grade >= 90 then

MsgBox(“Congratulations on your hard work!”,”YES”)Else

MsgBox(“DUDE!!! Try harder next time!”,”NO”)End If

End Sub

Note it prints the Congrats message if grade >= 90, the support message otherwise.

Note the indentation. This is REQUIRED in this course and is actually very helpful in understanding the program.

Page 27: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

If Statements Compound statements for compound conditions More than one condition can appear in a statement which

can be joined by either NOT the opposite AND both must be true OR at least one must be true NOT takes precedence over AND and AND takes precedence over

ORI never use the precedence. I use parentheses to indicate

order. Detect whether input grade is valid or invalid (i.e.

outside [0,100]) If grade>=90 then display congrats message; otherwise, display

support message Nested Ifs

Show Celsius/Fahrenheit conversion but limit input to -100,+100 If not valid, inform user

Page 28: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Find Output Dim X As Integer, Y as Integer, Z as String X = 5 Y = 2*X Z = “CSCI-130” If Z = “PHIL-330” OR X<>4 AND Y>9 Then

Msgbox(“Good Job”,”Groovy”)

Else Msgbox(“Even Better”,”Whoa!”)

End If

Page 29: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Numeric to Letter grade If grade >= 90 Then

Msgbox(FormatNumber(grade,1))&“ ==> A”,”Grade”) ElseIf grade >= 80 Then

Msgbox(FormatNumber(grade,1))&“ ==> B”,”Grade”) ElseIf grade >= 70 Then

Msgbox(FormatNumber(grade,1))&“ ==> C”,”Grade”) ElseIf grade >= 60 Then

Msgbox(FormatNumber(grade,1))&“ ==> D”,”Grade”) Else

Msgbox(FormatNumber(grade,1))&“ ==> F”,”Grade”) End If

Page 30: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

1. A VB project to perform simple bank withdrawals

2. If the withdrawn amount is larger than the beginning balance, the user is warned and nothing happens to the balance … display warning in a message box:ERROR: Withdrawal denied!

3. Otherwise, the new balance is shown in the Rich Text Box like the following: The new balance is $889.12

1. In the last case above, modify your program to use a nested IF so that if the new balance is below $150.00, the user is informed The new balance is $89.12WARNING: Balance below $150!

Page 31: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Do Loops Stopping/looping condition but not sure how many iterations

good with flags (or sentinels) Do While --- LOOPING CONDITION

Dim inputNum As Single=0.0, sum As Single=0.0sum = 0.0inputNum=InputBox(“Enter a number to add, 0 to stop”,”Num”)Do While inputNum<>0

Sum = Sum + inputNuminputNum=InputBox(“Enter a number to add, 0 to stop”,”Num”)

LoopMsgbox(FormatNumber(Sum,5),”Sum”)

What would happen if I didn’t read input again from user inside loop?

Print all even numbers between 2 and 100 in a picturebox

Page 32: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Do Loops Dim counter As Integer=0 counter=2 Do While counter <=100

outResults.AppendText(counter & vbNewLine) counter = counter +2

Loop

Initialization phase Exit conditions Action (Loop body: Do … Loop)

Must include progress

Page 33: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Do Loops

Program to compute the average for any exam in any class at CSBSJU (number of students differs)Enter any number of gradesWhen the flag (-1) is provided (-1 is known as

sentinel value)end of input and print average

Algorithm + programShow program

Page 34: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Do Loops

Program to get the average of any number of grades (enter -1 to exit)sum = 0, count=0, average=0grade=input by userWhile grade <> -1

Add grade to sumAdd 1 to countEnter another grade

Divide sum by count to obtain the averagePrint average

Page 35: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Do Loops Private Sub cmdAverageButton_Click()

‘Sentinel Loop program to compute the average exam scoreDim count As Integer = 1Dim grade As Single=0.0,sum As Single=0.0,avg As Single=0.0grade = InputBox (“Enter the first exam score:” & ”Exam Scores”, “Score”)Do While grade <> -1

sum = sum + gradecount = count + 1grade = InputBox(“Enter another score Type -1 to end.” & “Exam Scores”,”Score”)

Loop avg = sum/count MsgBox(“The average is: ” & FormatNumber(avg),”Average”)

End Sub

Work on class problem

Page 36: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

For Next Loops When we know how many times we need to repeat the

loop With a consistent increase or decrease For Next Loops are

better

Display values between 1 to 5 (vs. until user inputs -1) Dim number As Integer = 0 For number = 1 to 5

outResults.AppendText(number & “ “) Next number After every loop, the loop counter named number is

incremented by 1 Initialization: number=1 Exit Condition: number>5 Action: outResults.AppendText(number) Combines the initialization and exit conditions into one

line Previously initialization was done before loop

Page 37: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

For Next Loops

After every loop, the loop counter is incremented by 1 (default)Can be changed by specifying steps (display even

numbers from 2 to 100)For number = 2 to 100 Step 2

outResults.AppendText(number & “ “)Next number

The increment can be positive or negative (display even numbers from 100 to 2)For number = 100 to 2 Step -2

outResults.AppendText(number & “ “)Next number

Page 38: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

For Next Loops The steps don’t have to be integers

For number = 1 to 3 Step .5outResults.AppendText(number && “ “)

Next number Suppose we want to display all even numbers

between 2 and another number specified by the userDim counter as Integer, N As IntegerN = txtEndBox.TextFor counter = 2 to N Step 2

outResults.AppendText(counter & vbNewLine)Next counter

Design a VB program that displays in a picture box the first N multiples of an input integer

Page 39: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

For Next Loops Input 19 lab scores for each of 26

studentsFor student = 1 to 26

For score= 1 to 19 grade = InputBox(“Enter a score for lab”,”Score”)

Next scoreNext Student

The nested (inner) loop is executed completely for each execution of the outer loop --- how many?Outer 26, inner 26*19=494

We can nest loops but they may not overlap i.e. if the start of a loop L1 starts after that of

another one, L2, then L1’s end must come before L2’s

Page 40: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Example of bad nesting

For example, the following is illegal:For counter=1 to 10

For secondCounter=2 to 12

sum=sum+3

Next counter

Next secondCounter

This is illegal because the For for secondCounter is after the For for counter but the Next for counter occurs before the Next for secondCounter

Page 41: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Input & Output Data Files

vs. Textboxes and InputboxesWhen we have a lot of input --- not convenient to

enter all at runtimeAverage for exam scores in a class of 30 students

Open some text editor (Notepad)Enter data separating individual pieces of data by

commas and rows by placing them on separate linesSave the file with its own nameNO EMPTY LINES AT THE END

Page 42: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Input & Output File must be in the project’s folder

Create project and save it first and then save the data file in the same folder We must ALWAYS open a file before we can use it. Here is an example of

opening a file: FileOpen(1,”QuizScores.txt”,OpenMode.Input) You can then read the contents of the file with, for example, the

following do while loop: Do While Not EOF(1)

Input(1, col1) Input(1, col2) Input(1,col3) …

Loop ALWAYS close the file when finished with the FileClose statement: FileClose(1)

Looping used with files: Read until a flag is met EOF(x) is a special flag that tells the program to loop until the end of the file

(whose number is provided in parentheses)

Page 43: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Arrays We have been using variables

pointing to a single memory register holding a single value

What if we have to store a list of related data E.g. exam-1 scores for this class

declare 30 variables?

An array is a variable that holds multiple data pieces such as a list or table A block of memory registers

Declare it by giving a name and a size Dim ArrayName(1 to MaxSize) As DataType

Refer to stored data by their positions

Page 44: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Arrays Dim Runner(75) As String

Declares 76 memory registers indexed by 0,1,2,…,75 for array Runner

Each will holds a string – probably a runner’s name To print the 15th runner: outResults.AppendText(Runner(15) & vbNewLine)

Declare two arrays for exam-1 students and grades for this class

Display student 10 with his/her grade in a messagebox Parallel arrays

Average the contents of the first 20 runner times in the array Dim Times(75) As Single, Pos As Integer … code to read in the times For position = 0 to 19

Sum = Sum + Times(position) Next position Avg = Sum/20

Page 45: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Arrays and Files

Runners and times programParallel arrays 1 - Reads names & times into arrays

used multiple timesdone in a separate stepmaintain position as an array index

2- Find averagesize vs. capacityChange to display all runners with

less time than an average

Page 46: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Dim times(75) As Single, position As Integer=0Dim numElements as Integer=0, sum as Integer=0FileOpen(1,”RunnerTimes”,OpenMode.Input)numElements=0Do While Not EOF(1)

Input(1,times(numElements)numElements=numElements+1

LoopFor position = 0 to 19

sum = sum + times(position)Next positionAvg = sum/20.0outResults.AppendText(“Average time is “ & sum &

vbNewLine)FileClose(1)

Page 47: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Sequential SearchTwo types of array sequential searching

problems(1) Match-and-stop (first match)

Begin at first array elementCompare search value with each data elementIf there a match , stop and return match or its

positionOtherwise, go to next element and repeatStop looking when a condition is satisfied or when

we have finished the list in which case we return a failure

Usually we use a Do Loop

Page 48: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Match-and-Stop Search Use Boolean variable to denote whether a match has been found or not

found initially False If a match is found, we set it to True

Dim found As Boolean = False, position As Integer = 0Dim numberToCheck as Integer = 0, searchValue as String = “”‘read in how many elements of the array you want to searchnumberToCheck=InputBox(“Enter number of elements to search”,”Number” & “ of Elements”)found = Falseposition = 0‘read in the value to search forsearchValue=InputBox(“Enter the value to search for”,”Search Value”)Do While (found=false and position<numberToCheck)

If Array(found) = searchValue Thenfound=TrueoutResults.AppendText(searchValue & “ found at position “ & position)

End Ifposition=position+1

LoopIf found=False then

outResults.AppendText(searchValue & “ not found.”)End If

Page 49: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Match-and-Stop Search

Read an array of 75 runner names and array of 75 runner times from a file and search for a specific name input through an inputboxIf found, display rank and timeElse, display not found

What would happen if numberToCheck were greater than the Array maximum size?Try a successful and an unsuccessful search

What would happen if the else were included in the loop and not outside

Page 50: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Sequential Search

(2) Exhaustive search (must check all array elements)E.g. find all values less than a given value,

maximum, or minimumMust scan whole arrayWe use a For LoopFor Pos = 1 to numElements

If condition is true then do action

Page 51: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Exhaustive Search

Write a program that reads numbers from a file (unknown size but say less than 100) into an array

Uses the array to find and display all numbers larger than an input minimum threshold

Page 52: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Exhaustive SearchPrivate Sub cmdSearchButton_Click()

Dim numElements As Integer = 0, position As Integer = 0Dim min As Integer = 0,found As Boolean = False,numbers(1 to 100) As Integerfound = FalseFileOpen(1,"Numbers. Txt”,OpenMode.Input)numElements = 0Do While not(EOF(1))

Input(numbers(numElements))numElements = numElements + 1

Loop min = InputBox(“Enter your minimum threshold please” , ”INPUT”) For position = 1 to numElements

If min < numbers (position-1) Thenfound = trueoutResults.AppendText(Numbers(Pos) & vbNewLine)

End IfNext Pos If found=false then

picResults.Print “There were no matches”End if

End Sub

Page 53: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Bubble Sort Many algorithms to sort data Bubble sort is one of the simple ones

Sort: 3 1 2 Goes through a list several times (passes)

On every pass, bubbles largest number to end of array compares a number with its right neighbor If the number is larger, it is swapped/exchanged with its

neighbor Larger numbers are said to “bubble down” to their proper

places in the list After every pass, we place a number in its proper

position so the number of comparisons made is decreased by 1

Bubble sort simulator: http://www.csbsju.edu/computerscience/curriculum/launch/default.htm

Page 54: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Bubble Sort 5 2 4 3

1 2 5 4 3

1 2 4 5 3

1 2 4 3 5

1 2 4 3 1

5 2 3 1 4

5 2 1 3 4

5 1 2 3 4

5 First pass takes 5 to

end 4 comparisons Largest value 5 is “bubbled down”

Second pass “bubbles up” 4 3 comparisons Second largest value No need to compare with 5

because we know its larger Third pass “bubbles up” 3

2 comparisons No need to compare with

either 4 or 5 Fourth pass “bubbles up”

2 1 comparisons No need to compare with

any of 3, 4 or 5 N numbers need N-1

passes

Page 55: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Bubble Sort Algorithm: sort N numbers

Input numbers to be sorted into an array of size NMake N-1 passes through the array

Compare each number with its right neighbor and swap them if they are out of order

Print sorted arrays Note that on

pass 1, we make N-1 comparisonsPass 2, we make N-2 comparisons…Pass x, we make N-x comparisons

How do we swap two values X and Y

Page 56: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Swapping in Bubble Sort List(I) = List(I+1) List(I+1) = List(I) ???? Lost List(I)!

We need to save it in a temporary variable before storing List(I+1) in it Temp = List(I) List(I) = List(I+1) List(I+1) = Temp

Read names and grades from a data file called csci130.txt Display them before sorting in one picturebox Sort them by grade in ascending order and display them after

sorting in another picturebox (go to N:\CS130\handouts\VB Samples\Bubble Sort-Incomplete

Sort them in inverse alphabetical order by name (i.e. in descending order from Z to A) and display them after sorting in a 3rd picturepbox

Page 57: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Another Bubble Sort Example

Private Sub Sortbutton_Click()Dim myNumbers(1 to 100) As Integer, aNumber As Integer = 0Dim position As Integer = 0, pass As Integer = 0Dim numElements As Integer=0,temp as Integer=0,myNumber As Integer=0 FileOpen(1,”Numbers.txt“,OpenMode.Input)numElements = 0Do While not(EOF(1))

numElements=numElements+1Input(1,aNumbermyNumbers(numElements-1) = aNumber

LoopFileClose(1)‘ print all array numbers (before sorting) on same lineoutResults.AppendText("The unsorted list is:“)For position = 1 To numElements

outResults.AppendText(MyNumbers(position-1) & “ “)Next positionoutResults.AppendText(vbNewLine) ‘to go to a new line

Page 58: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Bubble SortFor pass = 0 To numElements-2

For position= 0 To numElements-2-passIf myNumbers(position)>myNumbers(position +1)

Thentemp = MyNumbers(position)myNumbers(position) = myNumbers(position

+1)myNumbers(position +1) = temp

End IfNext position

Next passoutResults.AppendText("The sorted list becomes:“ & vbNewLine)For position = 0 To numElements-1

outResults.AppendText(myNumbers(position));Next position

End Sub

Page 59: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Multiple Forms We’ve been designing projects with single forms

Very easy to add new forms to your project if needed A form to load data from a file into an array A form to search for entries in the array A form to sort the array and display it sorted

Different backgrounds and designs How to move from one form to another. You cannot refer to the

form you are on by its name. Instead, you must use Me. For example, suppose you want to make this form invisible and frmSecond visible. You would do: Visible properties – sets the Hide and Show properties

Me.Hide() frmSecond.Show()

This would make both frmFirst and frmSecond appear. frmFirst.Show() frmSecond.Show()

Page 60: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Multiple Forms All forms except the initial has this property set to Hide Private Sub cmdChangeformbutton_Click()

Me.Hide() cmdNewForm.Show()

End Form Click on the Select project Add Form Form

Click on Add Form Will create a new form in the same project Be sure to give it a proper name

Page 61: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Multiple Forms Variable scope categories

Subroutine-level vs. form-level vs. project-level

To use the same variables on more than one form we need to declare them differently Add new code module At the top of a code module as public In this module, we list all declarations of all variables that be

shared among multiple forms To add a code module

Select project Add Module Open Enter declarations Public SomeVar As SomeType

Private keyword

Page 62: VB CSCI130 Instructor: Dr. Lynn Ziegler, Slides originally designed by Dr. Imad Rahal, updated by Lynn Ziegler LAYEROrder High-order P.L.: Visual Basic1

Dynamic Picture Loading picResults.Picture = loadPicture(App.Path & “\” & imageFileName)