chapter 5: control structures ii instructor: mohammad mojaddam

62
CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Upload: brenda-daniel

Post on 28-Dec-2015

223 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

CHAPTER 5 : CONTROL STRUCTURES I IINSTRUCTOR: MOHAMMAD MOJADDAM

Page 2: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Objectives2

In this chapter, you will:Learn about repetition (looping) control

structuresExplore how to construct and use count-

controlled, sentinel-controlled, flag-controlled, and EOF-controlled repetition structures

Examine break and continue statementsDiscover how to form and use nested

control structures

Page 3: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Objectives (cont'd.)3

Learn how to avoid bugs by avoiding patchesLearn how to debug loops

Page 4: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Why Is Repetition Needed?4

Repetition allows you to efficiently use variables

Can input, add, and average multiple numbers using a limited number of variables

For example, to add five numbers: Declare a variable for each number, input the

numbers and add the variables together Create a loop that reads a number into a variable and

adds it to a variable that contains the sum of the numbers

Page 5: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

while Looping (Repetition) Structure5

The general form of the while statement is:

while is a reserved wordStatement can be simple or compoundExpression acts as a decision maker and is

usually a logical expression Statement is called the body of the loop The parentheses are part of the syntax

Page 6: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

while Looping (Repetition) Structure (cont'd.)6

Infinite loop: continues to execute endlessly Avoided by including statements in loop body that

assure exit condition is eventually false

Page 7: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

while Looping (Repetition) Structure (cont'd.)7

Page 8: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Designing while Loops8

Page 9: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Case 1: Counter-Controlled while Loops9

If you know exactly how many pieces of data need to be read, while loop becomes a counter-controlled loop

Page 10: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

10

Page 11: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

11

Page 12: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Case 2: Sentinel-Controlled while Loops12

You may know that the last entry is a special value, called a sentinel.

Sentinel variable is tested in the condition Loop ends when sentinel is encountered

Page 13: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

13

Page 14: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

14

Page 15: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Example 5-5: Telephone Digits15

Example 5-5 provides an example of a sentinel-controlled loop

The program converts uppercase letters to their corresponding telephone digit

Page 16: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Case 3: Flag-Controlled while Loops16

A flag-controlled while loop uses a bool variable to control the loop

The flag-controlled while loop takes the form:

Page 17: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Number Guessing Game17

Example 5-6 implements a number guessing game using a flag-controlled while loop

The program uses the function rand of the header file cstdlib to generate a random number rand() returns an int value between 0 and 32767 To convert it to an integer greater than or equal to 0 and

less than 100: rand() % 100

To generate different random numbers each time the program is executed, you also use the function srand of the header file cstdlib

The function srand takes as input an unsigned int, which acts as the seed for the algorithm.

Page 18: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Case 4: EOF-Controlled while Loops18

Use an EOF (End Of File)-controlled while loop

The logical value returned by cin can determine if the program has ended input

Page 19: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Case 4: EOF-Controlled while Loops19

Page 20: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

More on Expressions in while Statements20

The expression in a while statement can be complex For example:while ((noOfGuesses < 5) && (!isGuessed)){…

}

Page 21: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Fibonacci Number21

Consider the following sequence of numbers: 1, 1, 2, 3, 5, 8, 13, 21, 34, ....

Given the first two numbers of the sequence (say, a1 and a2) nth number an, n >= 3, of this sequence is given by: an = an-1 + an-2

Page 22: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Fibonacci Number (cont'd.)22

Fibonacci sequence nth Fibonacci number a2 = 1 a1 = 1 Determine the nth number, an, n >= 3

Page 23: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Fibonacci Number (cont'd.)23

Suppose a2 = 6 and a1 = 3 a3 = a2 + a1 = 6 + 3 = 9; a4 = a3 + a2 = 9 + 6 = 15

Write a program that determines the nth Fibonacci number Given the first two numbers

Page 24: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Input and Output24

Input: first two Fibonacci numbers and the desired Fibonacci number

Output: nth Fibonacci number

Page 25: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Problem Analysis and Algorithm Design

25

Algorithm: Get the first two Fibonacci numbers Get the desired Fibonacci number

Get the position, n, of the Fibonacci number in the sequence

Calculate the next Fibonacci number By adding the previous two elements of the Fibonacci

sequence

Page 26: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Problem Analysis and Algorithm Design

26

Repeat Step 3 until the nth Fibonacci number is found Output the nth Fibonacci number

Page 27: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Variables27

Page 28: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Main Algorithm28

1. Prompt the user for the first two numbers—that is, previous1 and previous2

2. Read (input) the first two numbers into previous1 and previous2

3. Output the first two Fibonacci numbers4. Prompt the user for the position of the

desired Fibonacci number5. Read the position of the desired Fibonacci

number into nthFibonacci

Page 29: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Main Algorithm (cont'd.)29

6. a. if (nthFibonacci == 1)

The desired Fibonacci number is the first Fibonacci number. Copy the value of previous1 into current

b. else if (nthFibonacci == 2)The desired Fibonacci number is the second Fibonacci number. Copy the value of previous2 into current.

Page 30: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Main Algorithm (cont'd.)30

6. (cont’d.) c. else calculate the desired Fibonacci number as

follows: Start by determining the third Fibonacci number Initialize counter to 3 to keep track of the calculated

Fibonacci numbers. Calculate the next Fibonacci number, as follows:current = previous2 + previous1;

Page 31: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Main Algorithm (cont'd.)31

6. c. (cont’d.)

Assign the value of previous2 to previous1 Assign the value of current to previous2 Increment counter Repeat until Fibonacci number is calculated:while (counter <= nthFibonacci){

current = previous2 + previous1;previous1 = previous2;previous2 = current;counter++;

}

Page 32: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example: Main Algorithm (cont'd.)32

7. Output the nthFibonacci number, which is current

Page 33: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example33

Page 34: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Programming Example34

Page 35: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure35

The general form of the for statement is:

The initial statement, loop condition, and update statement are called for loop control statements initial statement usually initializes a variable

(called the for loop control, or for indexed, variable)

In C++, for is a reserved word

Page 36: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

for Looping (Repetition) Structure36

The for loop executes as follows:

1. The initial statement executes.

2. The loop condition is evaluated. If the loop condition evaluates to true:i. Execute the for loop statement.ii. Execute the update statement (the third

expression in the parentheses).3. Repeat Step 2 until the loop condition evaluates to false.The initial statement usually initializes a variable

(called the for loop control, or for indexed, variable).

Page 37: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)37

Page 38: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)38

Page 39: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)39

C++ allows you to use fractional values for loop control variables of the double type Results may differ

The following is a semantic error:

Page 40: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)40

Page 41: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)41

Page 42: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

42

Page 43: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

43

Page 44: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

44

Page 45: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)45

Page 46: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

for Looping (Repetition) Structure (cont'd.)46

Page 47: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

do…while Looping (Repetition) Structure47

General form of a do...while:

The statement executes first, and then the expression is evaluated

To avoid an infinite loop, body must contain a statement that makes the expression false

The statement can be simple or compoundLoop always iterates at least once

Page 48: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

do…while Looping Structure48

Page 49: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

do…while Looping (Repetition) Structure49

Page 50: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

do…while Looping (Repetition) Structure50

Page 51: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Example : Divisibility Test by 3 and 9

51

Page 52: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Choosing the Right Looping Structure52

All three loops have their place in C++ If you know or can determine in advance the number

of repetitions needed, the for loop is the correct choice

If you do not know and cannot determine in advance the number of repetitions needed, and it could be zero, use a while loop

If you do not know and cannot determine in advance the number of repetitions needed, and it is at least one, use a do...while loop

Page 53: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

break and continue Statements53

break and continue alter the flow of controlbreak statement is used for two purposes:

To exit early from a loop Can eliminate the use of certain (flag) variables

To skip the remainder of the switch structureAfter the break statement executes, the

program continues with the first statement after the structure

Page 54: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

break and continue Statements (cont'd.)54

continue is used in while, for, and do…while structures

When executed in a loop It skips remaining statements and proceeds with the

next iteration of the loop

Page 55: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Nested Control Structures55

To create the following pattern: ***************

We can use the following code:for (i = 1; i <= 5 ; i++){ for (j = 1; j <= i; j++) cout << "*"; cout << endl;}

Page 56: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Nested Control Structures (cont'd.)56

What is the result if we replace the first for statement with the following?

for (i = 5; i >= 1; i--)

Answer:***************

Page 57: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

C++ Programming: From Problem Analysis to Program Design, Fifth Edition

57

setw: Number of characters to be used as field width (iomanip header)

Page 58: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Avoiding Bugs by Avoiding Patches58

Software patch Piece of code written on top of an existing piece of

code Intended to fix a bug in the original code

Some programmers address the symptom of the problem by adding a software patch

Should instead resolve underlying issue

Page 59: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Debugging Loops59

Loops are harder to debug than sequence and selection structures

Use loop invariant Set of statements that remains true each time the loop

body is executedMost common error associated with loops is

off-by-one

Page 60: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Summary60

C++ has three looping (repetition) structures: while, for, and do…while

while, for, and do are reserved wordswhile and for loops are called pretest loopsdo...while loop is called a posttest loopwhile and for may not execute at all, but do...while always executes at least once

Page 61: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Summary (cont'd.)61

while: expression is the decision maker, and the statement is the body of the loop

A while loop can be: Counter-controlled Sentinel-controlled Flag-controlled

In the Windows console environment, the end-of-file marker is entered using Ctrl+z

Page 62: CHAPTER 5: CONTROL STRUCTURES II INSTRUCTOR: MOHAMMAD MOJADDAM

Summary (cont'd.)62

for loop: simplifies the writing of a counter-controlled while loop Putting a semicolon at the end of the for loop is a

semantic errorExecuting a break statement in the body of

a loop immediately terminates the loopExecuting a continue statement in the body

of a loop skips to the next iteration