Chapter 6
More About Loops and
Decisions
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
6.1 Combining Loops With If-Then
Statements
By
combining
loops
and
decision
structures,
programs
become
much
more
complex.
Loops
can
be
nested
inside
selecJon
structures
and
selecJons
can
be
nested
inside
loops.
Loops
can
be
nested
inside
other
loops.
Using
mulJple
combinaJons
of
these
structures
allows
for
limitless
possibiliJes!
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Exi8ng a Loop Early
One
reason
to
nest
a
selecJon
structure
inside
a
loop
is
to
allow
the
loop
to
end
before
the
test
condiJon
has
been
met
for
any
reason.
For
example:
If
the
user
has
entered
an
incorrect
value
that
would
cause
an
error
If
the
user
has
entered
a
required
response
and
the
program
can
conJnue
without
further
iteraJons
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example: Exi8ng the Loop When Theres No More Money
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Declare Cost, Total, Max As Float
Declare Count As Integer
Set Total = 0
Write Enter the maximum amount you want to spend: $
Input Max
For (Count = 1; Count < 11; Count++)
Write Enter the cost of an item:
Input Cost
Set Total = Total + Cost
If Total > Max Then
Write You have reached your spending limit.
Write You cannot buy this item or anything else.
Set Total = Total Cost
Exit For
End If
Write You have bought + Count + items.
End For
Write Your total cost is $ + Total
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example: The Guessing Game using a DoWhile loop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Declare SecretNumber, Count, Guess As Integer
Write Enter a secret number:
Input SecretNumber
Clear Screen
Set Count = 1
Do
Write Guess the secret number:
Input Guess
If Guess == SecretNumber Then
Write You guessed it!
Exit Loop
Else
Write Try again
End If
Set Count = Count + 1
While Count <= 5
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example: Combining Loops, Decisions, and Valida8ng Data
Compu8ng valid square roots
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Declare Number, Root As Float
Declare Response As Character
Write Do you want to find the square root of a number?
Write Enter y for yes, n for no:
While Response == y
Write Enter a positive number:
Input Number
If (Number >= 0) Then
Set Root = Sqrt(Number)
Write The square root of + Number + is: + Root
Else
Write Your number is invalid.
End If
Write Do you want to do this again?
Write Enter y for yes, n for no:
Input Response
End While
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
6.2 Combining Loops and Decisions in Longer
Programs
The
example
in
the
next
slide
shows
how
to
keep
track
of
how
many
posiJve
numbers
and
how
many
negaJve
numbers
are
input
by
a
user.
Uses
for
this
type
of
program:
Embed
in
a
larger
program
to
track
various
types
of
entries
Use
by
a
college
to
enter
demographic
informaJon
on
students
Use
by
a
business
to
track
number
of
items
purchased
that
were
above
or
below
a
certain
cost
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example:
Keeping
Track
of
User
Input
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Declare PositiveCount, NegativeCount, Number As Integer
Set PositiveCount = 0
Set NegativeCount = 0
Write
Enter a number. Enter 0 when done:
Input Number
While Number != 0
If Number > 0 Then
Set PositiveCount = PositiveCount + 1
Else
Set NegativeCount = NegativeCount + 1
End If
Write Enter a number. Enter 0 when done:
Input Number
End While
Write Positive numbers entered: + PositiveCount
Write Negative numbers entered: + NegativeCount
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Flowchart using a
selec8on structure with
a loop to keep track of
the number of posi8ve
and nega8ve numbers
entered
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
The Length_Of() Func8on
The
Length_Of()
funcJon
takes
a
string
or
a
string
variable
inside
the
parentheses
and
returns
the
number
of
characters
in
that
string.
MyLength = Length_Of(Hello)
assigns
the
value
of
5
to
MyLength because
Hello
has
ve
characters.
MyLength = Length_Of(Good-bye!)
assigns
the
value
of
9
to
MyLength because
the
string
has
nine
characters,
including
the
hyphen
and
exclamaJon
point.
If
Name = Hermione Hatfield
then:
MyLength = Length_Of(Name)
assigns
the
value
of
17
to
MyLength.
If
TheSpace =
then:
MyLength = Length_Of(TheSpace)
assigns
the
value
of
1
to
MyLength because
a
space
counts
as
one
character.
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
The Print Statement and the newline Indicator <NL>
The
Write statement
indicates
output
to
the
screen
with
the
assumpJon
that
each
new
Write
statement
would
begin
on
a
new
line.
The
Print
statement
indicates
output
to
the
screen,
including
the
ability
to
concatenate
variables
and
text.
However,
unJl
the
newline
indicator
is
used,
it
is
assumed
that
output
from
any
subsequent
Print statements
will
be
on
the
same
Code
Code
Write Hi
Write Ho
Write Done
Print Hi
Print Ho <NL>
Print Done
Display
Display
Hi
Ho
Done
HiHo
Done
line.
The
newline
indicator
is
<NL>.
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Using the Length_Of()
Func8on for FormaRng
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Declare Name As String
Declare Symbol, Choice As Character
Declare Number, Count As Integer
Set Count = 0
Write Enter your name:
Input Name
Write Choose one of the following symbols: * or #
Input Symbol
Write Do you want a space between each symbol? Enter Y for yes, N for no
Input Choice
Set Number = Length_Of(Name)
Print Name <NL>
While Count <= Number
If Choice == y OR Choice == Y Then
Print Symbol +
Set Count = Count + 2
Else
Print Symbol
Set Count = Count + 1
End If
End While
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
6.3 Random Numbers
Random
numbers
are
numbers
whose
values
form
an
unpredictable
sequence.
They
have
many
interesJng
applicaJons
in
programming.
One
major
use
is
to
provide
an
element
of
chance
in
computer
games.
They
are
also
used
to
simulate
situa7ons
or
processes
in
business,
mathemaJcs,
engineering,
and
other
disciplines.
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
The Random() Func8on
Most
programming
languages
contain
a
funcJon
that
is
used
to
generate
a
sequence
of
random
numbers.
The
name
of
this
funcJon
and
the
way
it
works
varies
from
language
to
language.
We
dene
a
funcJon
of
the
following
form:
Random()
which
generates
a
random
number
from
0.0
to
1.0
(including
0.0
but
not
1.0).
To
increase
the
range
of
random
numbers
generated,
mulJply
Random()
by
any
value.
To
change
the
spread
of
the
range,
add
an
integer
to
the
values
generated.
Use
the
Int()
or
Floor()
funcJon
to
generate
random
integers.
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Examples of Random Numbers Using the
Random()Func8on
If
Random() = 0.3792,
then
Random() * 10 = 3.7920
If
Random() = 0.0578,
then
Random() * 10 = 0.5780
MulJplying
Random()
by
10
generates
random
numbers
between
0.0 and
10.0,
not
including
10.0.
To
generate
only
integer
values,
use
the
Floor()
or
Int()
funcJon:
If
Random() = 0.3792,
then
Floor(Random() * 10) = 3
If
Random()
= 0.0578,
then
Floor(Random()
* 10) = 0
To
change
the
range
of
integers,
add
a
number
to
the
result.
For
example,
adding
1
to
the
previous
result
will
generate
random
numbers
between
1 and
10.
If
Random()
= 0.3792,
then
(Floor(Random()
* 10) + 1) = 4
If
Random()
= 0.0578,
then
(Floor(Random() * 10) + 1) = 1
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Genera8ng Random Numbers in Various Ranges
If
NewNumber
is
an
integer
variable,
then:
NewNumber = Floor(Random()
number
between
1
and
10
(inclusive)
NewNumber = Floor(Random()
number
between
1
and
100
(inclusive)
NewNumber = Floor(Random()
number
between
4
and
13
(inclusive)
NewNumber = Floor(Random()
NewNumber = Floor(Random()
* 10) + 1
will
result
in
a
random
* 100) + 1
will
result
in
a
random
* 10) + 4
will
result
in
a
random
* 2)
will
result
in
either
0
or
1
* 2) + 1
will
result
in
either
1 or
2
A[er
examining
these
examples,
we
can
conclude
that,
to
generate
a
sequence
of
N
random
integers
beginning
with
the
integer
M,
use:
Floor(Random() * N) + M
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example: Flipping a Coin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Declare Number As Integer
Declare Response As Character
Write Do you want to flip a coin? Enter y for yes, n for no:
Input Response
While Response == y
Set Number = Floor(Random() * 2)
If Number == 1 Then
Write Heads
Else
Write Tails
End If
Write Flip again? Enter y for yes, n for no:
Input Response
End While
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example: Winning at Dice: What number should I bet on?
Possible
ways
to
roll
the
11
possible
sums
1 + 1 = 2
2 + 1 = 3
3 + 1 = 4
4 + 1 = 5
5 + 1 = 6
6 + 1 = 7
1 + 2 = 3
2 + 2 = 4
3 + 2 = 5
4 + 2 = 6
5 + 2 = 7
6 + 2 = 8
1 + 3 = 4
2 + 3 = 5
3 + 3 = 6
4 + 3 = 7
5 + 3 = 8
6 + 3 = 9
1 + 4 = 5
2 + 4 = 6
3 + 4 = 7
4 + 4 = 8
5 + 4 = 9
6 + 4 = 10
1 + 5 = 6
2 + 5 = 7
3 + 5 = 8
4 + 5 = 9
5 + 5 = 10
6 + 5 = 11
1 + 6 = 7
2 + 6 = 8
3 + 6 = 9
4 + 6 = 10
5 + 6 = 11
6 + 6 = 12
Possible
ways
to
roll
a
5:
(1,4), (4,1), (2,3), (3,2)
Possible
ways
to
roll
an
8:
(2,6), (6,2), (3,5), (5,3), (4,4)
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example: Winning at Dice: What number should I bet on?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Declare FiveCount, EightCount, K, Die1, Die2, Sum As Integer
Set FiveCount = 0
Set EightCount = 0
For (K = 1; K <= 1000; K++)
Set Die1 = Floor(Random() * 6) + 1
Set Die2 = Floor(Random() * 6) + 1
Set Sum = Die1 + Die2
If Sum == 5 Then
Set FiveCount = FiveCount + 1
End If
If Sum == 8 Then
Set EightCount = EightCount + 1
End If
End For
Write Number of times sum was 5: + FiveCount
Write Number of times sum was 8: + EightCount
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
The Algorithm for a Pseudorandom Number
A
computer
doesnt
understand,
Pick
any
number
between
1
and
20.
A
computer
must
receive
instrucJons
from
a
program.
Random
numbers
are
o[en
produced
by
means
of
a
mathema7cal
algorithm.
A
mathemaJcal
algorithm
is
a
formula
that
instructs
the
computer
how
to
pick
some
number
in
a
specied
range.
An
algorithm
requires
some
beginning
value
to
manipulate.
This
starJng
number
is
the
seed
value.
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
The Seed for a Pseudorandom Number
If
the
same
seed
is
used
each
Jme,
the
numbers
generated
are
not
really
random.
Such
numbers
are
called
pseudorandom.
If
the
starJng
value
of
the
algorithm
never
changes,
the
same
sequence
of
numbers
will
be
produced
each
Jme
the
program
is
executed.
This
may
be
useful
for
debugging
purposes.
The
programmer
must
force
the
computer
to
use
a
dierent
seed
on
each
run
so
that
the
random
numbers
produced
will
be
unpredictable.
use
a
seed
that
is
not
predetermined,
like
the
number
of
milliseconds
since
the
beginning
of
the
current
year
it
will
only
occur
once
a
year
forces
a
random
number
generator
to
start
with
a
dierent
seed
each
Jme
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
6.4 Nested Loops
When
one
loop
is
contained
enJrely
within
another
we
say
that
they
are
nested
loops.
The
larger
loop
is
called
the
outer
loop
The
one
lying
within
it
is
called
the
inner
loop
It
is
o[en
dicult
to
follow
the
logical
sequence
of
steps
when
nested
loops
are
implemented.
It
is
very
important
to
be
able
to
walk
through
(desk
check)
the
pseudocode
with
paper
and
pencil,
carefully
wriJng
down
the
values
of
each
variable
at
each
step.
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example
1
2
3
4
5
6
7
8
Declare OutCount As Integer
Declare InCount As Integer
For (OutCount = 1; OutCount <=2; OutCount++)
For (InCount = 1; InCount <=3; InCount++)
Write OutCount + : + InCount
End For(InCount)
Write
End For(OutCount)
OutCount
InCount
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
output
Flowchart for the
nested loops on the
previous slide
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Nes8ng Other Kinds of Loops:
Any style of loop may be nested. Each nested loop must be indented to indicate
which statements are controlled by which looping construct.
Do
Code Statements
While <condition>
More code may be here
For (initial condition; test; increment)
more code here
End For
More code may be here
End While
More code may be here
While <condition>
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Example:
Drawing
Squares
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Declare Count1, Count2, Side As Integer
Declare Symbol As Character
Write Choose a symbol (any character from the keyboard):
Input Symbol
Write Enter the length of a side of the square:
Input Side
Set Count1 = 1
Set Count2 = 1
While Count1 <= Side
While Count2 <= Side
Print Symbol
Set Count2 = Count2 + 1
End While
Print <NL>
Set Count2 = 1
Set Count1 = Count1 + 1
End While
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Mind Games Workout #1
1
2
3
4
5
6
7
8
Declare X, Y, Z As Integer
For (X = 1; X < 4; X++)
Write Pass Number + X
For (Y = 1; Y < 10; Y+3)
Set Z = X + Y
Write X + + + Y + = + Z
End For(Y)
End For(X)
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
output
Pass Number 1
1 + 1 = 2
1 + 4 = 5
1 + 7 = 8
10
10
Pass Number 2
2 + 1 = 3
2 + 4 = 6
2 + 7 = 9
10
10
Pass Number 3
3 + 1 = 4
3 + 4 = 7
10
3 + 7 = 10
10
10
10
10
Mind Games: Workout # 2
1
2
3
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Count1
Count2
Pass Number 1
X = 2, Y = 3, Z = 6
3
3
6
Declare X, Y, Z As Integer
Declare Count1 As Integer
3
3
9
Declare Count2 As Integer
4
3
9
Set Y = 3
4
3
12
Set Count1 = 1
5
3
12
Do
Set X = Count1 + 1
Set Count2 = 1
Write Pass Number + Count1
While Count2 <= Y
Set Z = Y * X
Write X = + X + , Y = + Y + , Z =
Set X = X + 1
Set Count2 = Count2 + 1
End While
Set Count1 = Count1 + 1
While Count1 < Y
output
X = 3, Y = 3, Z = 9
X = 4, Y = 3, Z = 12
And so on...
+ Z
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Mind
Games:
Workout
#3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Declare A, B, C As
Set A = 1
Write Cheers!
While A < 3
Set C = A
Write A
Set B = 1
While B < 4
Set C
Write
If (A
Integer
= C + A
C
== 1 AND C >= 4) Then
Write Lets do this some more!
Else
If (A == 2 AND C >= 8) Then
Write Who do we appreciate?
End If
End If
Set B = B + 1
End While
Set A = A + 1
End While
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE
Mind
Games:
Workout
#3
Follow
Along
output
Cheers!
Lets do this some more!
Who do we appreciate?
2
3
PRELUDE
TO
PROGRAMMING,
6TH
EDITION
BY
ELIZABETH
DRAKE