ppt - Mrs-oc

Control Structures
VB
part 2
28-Jul-17
Overview

Control structures cause the program to repeat a section of
code or choose between different sections of code





while loops repeat
if statements choose
Programs can use whiles and ifs in the Main method or in
Jeroo methods
Control structures can use compound expressions to solve
problems
Control structures can be nested inside each other to solve
the most difficult problems
Using a while loop in a Jeroo method

Assume that a Jeroo named Kim is not standing on a
flower, but there is a line of flowers ahead. Have Kim
pick all of those flowers, and stop as soon as there is no
flower directly ahead. After picking all of the flowers,
Kim should turn to the left.
While Kim.isFlower(AHEAD)
Kim.hop()
Kim.pick()
End While
Kim.turn(LEFT)
How would this be
written as part of a
method?
As part of a method
Sub pickRow()
While isFlower(AHEAD)
hop()
pick()
The main program would be:
End While
Sub Main()
turn(LEFT)
Dim Kim as Jeroo = new Jeroo()
Kim.pickRow()
End Sub
End Sub
Review: The Conditional statements
some statement
if condition THEN
do if true
End If
next statement
If
some statement
if (condition) Then
do if true
else
do if false
End If
next statement
If-else
If condition_1 then
'statements that execute if condition_1 is true
elseif condition_2 then
'statements to execute when condition_2 is true
'more else if blocks as necessary
elseif last_condition then
'statements to execute when last_condition is true
else
'statements to execute when
all conditions are false
End If
Cascaded if
Changing Cascaded-If into a Jeroo method







Assume that a Jeroo named
Louisa is carrying at least one
flower.
Have her check the cell ahead.
If that cell contains a flower,
pick it.
If that cell contains a net,
disable it.
If that cell contains water, plant
a flower at the current location.
If that cell contains another
Jeroo, give that Jeroo a flower.
Finally, if there is nothing in
that cell, have her hop once and
turn left.
Sub Decide()
if Louisa.isFlower(AHEAD) then
Louisa.hop()
Louisa.pick()
elseif Louisa.isNet(AHEAD) then
Louisa.toss()
elseif Louisa.isWater(AHEAD) then
Louisa.plant()
elseif Louisa.isJeroo(AHEAD) then
Louisa.give(AHEAD)
else
Louisa.hop()
Louisa.turn(LEFT)
End If
End Sub
To turn this into a Jeroo method, give it a name and remove the specific Jeroo name from the code
Simple and Compound Conditions

A simple condition has one part. In the Jeroo language,
a simple condition is formed by invoking a single sensor
method.

Examples:



Tiffany.isClear(right)
Walter.isFacing(East)
A compound condition uses logical operators. The Jeroo
language contains the three most commonly used
logical operators:



NOT ie: NOT Tiffany.isClear(right)
AND ie: Tiffany.isClear(right) AND Tiffany.isClear(left)
OR ie: Tiffany.hasFlower() OR Tiffany.isClear(ahead)
Compound condition examples


Boolean Expression (VB-style) & English Translation
NOT Bob.isNet(AHEAD)


Bob.hasFlower() AND Bob.isClear(LEFT)


Bob has at least one flower and there is nothing in the cell immediately to
the left of Bob.
Bob.isWater(AHEAD) OR Bob.isWater(RIGHT)



There is not a net ahead of Bob
There is water ahead or to the right of Bob, or both
Notice the COMPLETE CONDITIONS on both sides of the OR
Bob.isFacing(WEST) AND ( NOT Bob.isNet(AHEAD) )

Bob is facing west and there is no net ahead
Use these examples to write
compound conditions
A more complex Programming Example

Have the Jeroo named Jessica (who has at least 1 flower) keep
moving forward until she finds a net to her left or right. When she
finds one, have her disable it and return to face her original
direction again. After she disables a net, Jessica should hop one
space ahead.
Pseudocode:
While there is not a net on the left or right
first keep hopping
hop
until a net is found
End While
If there is a net to the right then
disable the net on the right and turn back
Else ‘ if the net is not to the right, it must be on the left then disable the net,
whichever side it is on
disable the net on the left and turn back
End If
hop one time
then hop once
Translate the pseudo code to code
While there is not a net on the left or right
hop
first
End While
If there is a net to the right then
disable the net on the right and turn back
Else ‘ if the net is not to the right, it must be on the left
disable the net on the left and turn back
End If
Jessica.hop()
problem
Which is the correct way to say:
“there is not a net on the left or right” ?
1.
NOT isNet(left) OR isNet(right)
2.
NOT isNet(left) and NOT isNet(right)
this can be read as: there is not a net on the left and there’s not a net on the right.
Translate the pseudo code to code
While there is not a net on the left or right
hop
End While
If there is a net to the right then
disable the net on the right and turn back
Else ‘ if the net is not to the right, it must be on the left
disable the net on the left and turn back
End If
Jessica.hop()
turn(RIGHT)
toss()
turn(LEFT)
this has been
solved before
so how must it
change if the net
is on the left?
turn(LEFT)
toss()
turn(RIGHT)
Put it together:
While NOT isNet(left) and NOT isNet(right)
hop()
End While
If there is a net to the right then
turn(RIGHT)
toss()
turn(LEFT)
Which part still
needs to be
translated into code?
isNet(right) then
Else ‘ if the net is not to the right, it must be on the left
turn(LEFT)
toss()
turn(RIGHT)
Ready to type in the code!
End If
Jessica.hop()
Is this code for a Main method or a Jeroo method? Why?
The code does not specify a Jeroo name, so it belongs in a Jeroo
Control structures can be nested inside each
other to solve the most difficult problems
A problem requiring nested control structures

Remove all the nets on Jessica’s right side as she hops
all the way across the island.
The code to remove one net and move
forward has already been written:
If isNet(RIGHT) then
turn(RIGHT)
toss()
turn(LEFT)
End If
hop()
Some questions:
The Problem: Remove all the nets on Jessica’s right side as
she crosses the island.
Question:



How do you know that a Jeroo has
reached the end of the island?
How do you say “ keep hopping
until you reach the end of the
island”?
How do you say “keep removing
nets until you reach the end of the
island”?
Answer:

there is water ahead

While NOT iswater(ahead)
hop()
End While






While NOT iswater(ahead)
‘ put the code here to
‘ remove a net if there is one.
End While
Final version: Put the pieces together

Notice the indentation:
While not iswater(ahead)
‘ remove the net if there is one.
If isNet(RIGHT) then
turn(RIGHT)
toss()
turn(LEFT)
End If
hop()
End While
The End